1. 环境:Red Hat 4.1.2-52
nginx1.6.2
ab:Version 2.0.40-dev
2. 首先安装apache的ab工具(ApacheBench):yum install httpd-tools
安装nginx:
./configure --prefix=/usr/local/nginx1.6.2 --add-module=/usr/local/nginx1.6.2/HttpUpStreamConsistentHash/ngx_http_consistent_hash-master --with-http_stub_status_module make && make install说明:--add-module:是增加nginx的第三方consistent hash模块。
--with-http_stub_status_module:是增加监控功能。
3. 用ab命令进行压测:
./ab -c 2000 -n 80000 http://www.jackal.com/index.html说明:-c:每次2000个并发。
-n:总共80000次请求
注意:有可能你的-c参数设定的太大。导致linux打开socket文件描述符失败。
解决方案:查看linux支持的文件描述符大小:ulimit -n ,然后根据服务器实际情况设定文件描述符的大小 ulimit -n 30000,设定文件描述符打开的个数为30000
4. nginx调优
高并发思路:
socket层面:1. 在linux下设置允许打开的socket的最大连接数:somaxconn,查看:cat /proc/sys/net/core/somaxconn。设置:echo 50000 > /proc/sys/net/core/somaxconn
2. 在nginx下设置一个worker进程允许打开的socket的最大连接数:worker_connections。
3. 在linux中设置socket下加快tcp连接的回收:recycle。查看:cat /proc/sys/net/ipv4/tcp_tw_recycle。0表示:不快速回收,1:快速回收。设置:echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
4. 在linux中设置socket下空的tcp是否允许回收利用:reuse。查看:cat /proc/sys/net/ipv4/tcp_tw_reuse。0表示:不利用,1:利用。设置:echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
5. 在linux中设置socket防止tcp洪水攻击:tcp_syncookies。查看:cat /proc/sys/net/ipv4/tcp_syncookies。0表示:不抵御,1:抵御。 设置:echo 0 > /proc/sys/net/ipv4/tcp_syncookies
文件层面:1. 在linux中设置文件的打开数量用:limit -n 65535
2. 在nginx中设置一个woker进程允许打开的文件个数:worker_rlimit_nofile
5. 优化脚本
#!/bin/bash echo 10240 > /proc/sys/net/core/somaxconn echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse echo 0 > /proc/sys/net/ipv4/tcp_syncookies