一 优化思路
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目录中
使用命令格式:
./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" />