Nginx實現高併發優化
http://blog.csdn.net/atai2002/article/details/76041518
一 優化思路
1.1 Socket連線
1.1.1 系統層面
最大連線:somaxconn
加快tcp回收:tcp_tw_recycle
空tcp回收:tcp_tw_reuse
去除洪水攻擊抵禦:syncookies
1.1.2 nginx層面
每個子程序允許開啟的連線數:worker_connections
連線的保持時間:keepalive_timeout
1.2 檔案訪問數量
1.2.1 系統層面
引數:ulimit
1.2.2 nginx層面
引數:worker_rlimit_nofile
二 引數配置
2.1 系統引數配置
echo 50000>/proc/sys/net/core/somaxconn # 設定系統最大socket連線數
echo 1>/proc/sys/net/ipv4/tcp_tw_recycle # 0-不加快tcp回收 1-加快tcp回收
echo 1>/proc/sys/net/ipv4/tcp_tw_reuse # 0-不啟用空tcp回收 1-空tcp回收
echo 0>/proc/sys/net/ipv4/tcp_syncookies # 0-去除洪水攻擊抵禦 1-啟用洪水攻擊抵禦
ulimit -n 50000 #設定系統最大檔案訪問數量
Centos 6.8以上版本的配置方式有所不同:
vi /etc/sysctl.conf 新增或者修改
net.core.somaxconn = 50000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 0
讓sysctl.conf生效
sysctl -p
ulimit -n 50000
2.2 nginx配置檔案設定
worker_connections 10000 #每個子程序允許開啟的連線數
keepalive_timeout 0
worker_rlimit_nofile 10000 #每個子程序允許開啟的檔案數
三 測試環境配置
3.1 系統引數的設定
壓力測試客戶端ulimit和somaxconn引數也需要優化,設定方式參考上文
3.2 nginx狀態監控模組的安裝
./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module
make && make install
在nginx.conf的server塊中新增如下程式碼
location /status {
stub_status on;
access_log off;
}
通過 http://IP/status訪問檢視
3.3 測試工具
apache,自帶ab工具;
也可以獨立安裝:
ab執行需要依賴apr-util包,安裝命令為:
yum install apr-util
安裝依賴 yum-utils中的yumdownload 工具
如果沒有找到 yumdownload 命令可以
yum install yum-utils
安裝完成後執行以下指令
cd /opt
mkdir ab
cd ab
yum install yum-utils.noarch
yumdownloader httpd-tools*
rpm2cpio httpd-*.rpm | cpio -idmv
解開後就能得到獨立的 ab可執行檔案了。
操作完成後 將會產生一個 usr 目錄 ab工具就在這個usr 目錄下的bin目錄中
使用命令格式:
四 nginx整合tomcat
4.1 配置nginx.conf
location / {
index index.jsp;
proxy_pass http://localhost:8080;
}
4.2 配置tomcat管理員賬戶
在conf/ tomcat-users.xml下新增使用者:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
4.3 開啟執行緒池
開啟server.xml裡的
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
節點,修改maxThreads引數,這裡設定為10000
4.4 啟動NIO模式
修改server.xml裡的Connector節點,修改protocol為:
org.apache.coyote.http11.Http11NioProtocol;
增加executor="tomcatThreadPool"屬性,屬性值與執行緒池的name一致;
<Connector executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />