1. 程式人生 > >Nginx實現高併發優化

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 系統引數的設定

壓力測試客戶端ulimitsomaxconn引數也需要優化,設定方式參考上文

3.2 nginx狀態監控模組的安裝

./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module

make && make install

nginx.confserver塊中新增如下程式碼

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" />