Nginx实现高并发优化

时间:2022-08-28 19:10:40

一 优化思路

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目录中

 

使用命令格式:

./ab -c 5000 -n 100000 -k http://127.0.0.1/index.html

 

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