Apache 压力测试
1000个并发 50000次
./bin/ab -c 1000 -n 50000 http://192.168.0.9999:8080
too many open files 24 打开文件数
1、优化服务器 打开文件数 ulimit -n number
ulimit -n 20000 #允许打开20000个
2、安装nginx 统计模块便于观察nginx状态
--with-http_stub_status_module
nginx.conf location / { stub_status on; access_log off; allow 192.168.xxx.xxx; dent all; }
3、高并发优化思路
nginx 响应请求
a、建立socket链接,打开文件并沿socket返回
从系统的dmesg 和 nginx的 error.log 来观测问题
A、从socket角度需要优化的
系统层面:
最大连接数somaxconn、
加快tcpip链接的回收(recycle)、
空的tcp是否允许回收利用reuse 、
不做洪水抵御
nginx:子进程允许打开的链接 (worker_connections)
B、从系统文件层面需要优化的
nginx worker_limit_nofiles
linux 系统 ulimit 设置较大的合理的值
C、高并发网站中nginx 需要注意 keepalive_timeout 选项的设置,高并发情况一般设置为0秒;
作用就是快加tcp的快速回收
more /proc/sys/net/core/somaxconn 修改somaxconn值为 50000
echo 50000 > /proc/sys/net/core/somaxconn cat /proc/sys/net/ipv4/tcp_tw_recycle tcp 回收利用,设置为1 echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle cat /proc/sys/net/ipv4/tcp_tw_reuse 空的tcp回收利用,设置为1 echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse cat /proc/sys/net/ipv4/tcp_syncookies 不做洪水抵御 设置为0 echo 0 > /proc/sys/net/ipv4/tcp_syncookies
PHP方面的优化
1、设置php-fpm.conf配置文件, pm 运行方式为static,运行方式分为静态和动态两种方式:
pm=static #静态方式
pm.max_children=16 #一般一个fpm的子进程设置16个
2、然后配置fpm.conf 配置文件,可以使用多个配置文件来开启多个fpm进程
可以创建一个fpm-static.sh脚本 来管理多个fpm.conf文件,写入内容如下:
/usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm001.conf /usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm002.conf
3、然后利用nginx的upstrem模块来均衡请求到上面的php-fpm服务器对应端口
nginx配置php-fpm
upstream phpserver { server 192.168.1.110:9000; server 192.168.1.110:9001; server 192.168.1.110:9002; server 192.168.1.110:9003; } location ~ \.php$ { fastcgi_pass phpserver; #fastcgi 参数需要配置成 upstream的设置 }
4、nginx配置 memcach 缓存
upstream mcserver { consistent_hash $request_uri; #一次性hash ,用request_uri进行hash server 192.168.1.204:1121; server 192.168.1.204:1122; server 192.168.1.204:1123; server 192.168.1.204:1124; } location / { set $memcached_key $request_uri; memcached_pass mcserver; error_page 404 /callback.php; }
memcached.sh脚本,方便配置
#!/bin/bash /usr/local/memcached/bin/memcached -u nobody -c 2000 -p 11211 -m 512 -d /usr/local/memcached/bin/memcached -u nobody -c 2000 -p 11212 -m 512 -d
Linux 系统级别的调优
1、调整系统同时打开文件数量
ulimit -n 20480
2、tcp最大连接数调整
echo 10000> /proc/sys/net/core/somaxconn
3、tcp链接回收时效及时
echo 1> /proc/sys/net/ipv4/tcp_tw_reuse echo 1> /proc/sys/net/ipv4/tcp_tw_recycle
4、不做tcp洪水抵御
echo 0> /proc/sys/net/ipv4/tcp_syncookies
Nginx 调优说明
1、worker_connections work_rlimit_nofile #数值加大
2、keepalive_timeout
3、worker_processes 4; #进程数改成cpu数目的2倍
4、worker_rlimit_nofile 20000; #nginx 进程打开的最多文件数,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
events { #使用epoll的I/O模型 use epoll; #每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections worker_connections 20000; multi_accept on; } http { keepalive_timeout 0; }