作者:夕阳小子
时间:2017-5-1
优化思路:
Nginx层面:
解决: nginx.conf 下面: work_connection 加大
worker_connections 10240;
Worker_rlimit_nofiles 10000;
Keepalive_timeout 0;
系统层面
1: 内核层面,加大连接数,并加快tcp回收
2: mysql层面,增大连接数
3: php层面,用长连接,节省连接数
4: 用memcached缓存,减轻mysql负担
A服务器:nginx
B服务器:mysql
C服务器:php-fpm进程服务器
D服务器:memcached服务器5-8个
A,B,C,D四台服务器防火墙全部关掉 service iptables stop,防火墙用硬件防火墙
每台服务器都做以下优化:
系统内核层面:
net.core.somaxconn = 4096 允许等待中的监听
net.ipv4.tcp_tw_recycle = 1 tcp连接快速回收
net.ipv4.tcp_tw_reuse = 1 tcp连接重用
net.ipv4.tcp_syncookies = 0 不抵御洪水攻击
ulimit -n 30000
安装php-fpm
php-fpm配置
分别增加5个php-fpm配置文件:php-fpm.conf php-fpm9001.conf php-fpm9002.conf php-fpm9003.conf php-fpm9004.conf
分别做一下配置,监听不同端口
Pm = static 让fpm进程始终保持,不要动态生成
Pm.max_children= 32 始终保持的子进程数量
写一个shell脚本方便全部php-fpm进程
Nginx服务器
相关优化
Nginx层面:
解决: nginx.conf 下面: work_connection 加大
worker_connections 10240;
Worker_rlimit_nofiles 10000;
Keepalive_timeout 0;
memcahced服务器
安装
1. 查找Memcached
yum search memcached
首先检查yum软件仓库中是否存在memcached,如果有 直接进入第3步安装即可,否则执行第2步。
2. 安装第三方软件库(可选)
标准的CentOS5软件仓库里面是没有memcache相应的包的,所以,我们的第一步就是导入第三方软件仓库,这里推荐的是RpmForge(RpmForge库现在已经拥有超过10000种的CentOS的软件包,被CentOS社区认为是最安全也是最稳定的一个第三方软件库),安装方法如下:
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.5.2-2.rf.src.rpm
rpm -ivh rpmforge-release-0.5.2-2.rf.src.rpm
3.安装Memcached
yum -y install memcached
4.验证安装
memcached -h
/etc/rc.d/init.d/memcached status
5. 查看配置文件
cat /etc/sysconfig/memcached
可以根据情况修改相关配置参数:
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS=""
6.启动memcached
/etc/rc.d/init.d/memcached start
nginx 配置
Mysql服务器
数据准备:
大概12w的数据
代码准备:bench.php
接下来进行压力测试
分别用两台服务的apache ab压力测试工具进行测试:目标是3000个并发,50w个请求
时时观测:status
测试结果:80%-90%响应在3-8秒之间,整个nginx集群负载还是很不错的;仅仅是做了简单的压力测试,在实际的业务场景中,还需要具体的问题分析,找到问题所在,看是服务器瓶颈还是系统瓶颈,或者是软件(nginx,mysql,php....),再进行相关的优化,把最快的响应给用户,就是我们的目标。