性能测试-基础环境配置调优说明

1、Nginx

优化思路,每个请求都需要建立 socket 连接,那么影响并发情况有:
1.系统客户端不允许一次性创建过多的连接(实际情况不用考虑客户端,实际情况的客户端是分布在各个终端,只有测试并发时才考虑这个,因为是集中用一台或者两台服务器去集中模拟大量客户端)。
2.相对客户端的请求,服务端不允许一次性创建过多的连接,每个请求都要访问一些资源。
3.服务端不允许一个文件在同一时间点被访问 N 次,相当于一个文件在服务端打开 N 次
从上面的优化分析中,我们可以从socket 和文件两个层面进行 Nginx 的高并发优化。

1.1socket连接优化

socket分为系统层面和 nginx 层面的配置:

  • 系统层面

禁止洪水抵御,这个操作在重启之后失效

命令:more /proc/sys/net/ipv4/tcp_syncookies
结果:1
优化命令:echo 0 > /proc/sys/net/ipv4/tcp_syncookies

最大连接数,这个操作在重启之后失效

命令:more /proc/sys/net/core/somaxconn
结果:128
优化命令:echo 50000 > /proc/sys/net/core/somaxconn

加快 tcp 连接的回收,这个操作在重启之后失效

命令:cat /proc/sys/net/ipv4/tcp_tw_recycle
结果:0
优化命令:echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

使空的 tcp 连接重新被利用,这个操作在重启之后失效

命令:cat /proc/sys/net/ipv4/tcp_tw_reuse
结果:0
优化命令:echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

完整的优化命令

echo 50000 > /proc/sys/net/core/somaxconn
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
  • Nginx层面

子进程允许打开的连接数(nginx.conf)及 IO 选择

events {
    # 子进程连接数
    worker_connections 65535;
    # 使用 linux 下的多路复用 IO,是 poll 增强版本
    use epoll;
}

将 keepalive_timeout 设置为 0,高并发网站中,一般不超过 2s。此参数在 F12 调试页面时,在 Network 的 Headers 的 Response Headers 下可以看到 Connection:keep-alive,如果设置为 0,那么为 Connection:close,此配置慎用。

1.2文件优化

socket分为系统层面和 nginx 层面的配置:

  • 系统层面

设置同一个文件同一时间点可以打开 N 次,这个操作在重启之后失效

命令:ulimit -n
返回:128
命令:ulimit -n 20000
  • Nginx层面

nginx 进程数,按照 CPU 数目指定,nginx配置文件nginx.conf中

worker_processes 8;# nginx 子进程允许打开的文件次数
worker_rlimit_nofile 102400;

1.3Nginx性能测试相关使用说明

Linux性能测试压测机配置调优

ulimit -n 20000
echo 50000 > /proc/sys/net/core/somaxconn

1.3.1Nginx 添加统计模块及配置

nginx 在安装时可以添加访问的统计模块。

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

在 nginx.conf 中配置统计模块

location /status{
    # 开启状态
    stub_status on;
    # 不需要日志
    access_log off;
    # 只允许此 ip 访问
    allow 192.168.222.101;
    # 其他 ip 禁止访问
    deny all;
}

1.3.2使用Nginx的统计模块查看状态

浏览器打开

http://ip:port/status

其中,“Active connections”表示当前的活动连接数;而“server accepts handled requests”表示已经处理的连接信息。三个数字依次表示已处理的连接数、成功的TCP握手次数、已处理的请求数。
2Tomcat
Tomcat配置文件server.xml:

<Connector port="9739" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8449"
               minSpareThreads="25"
               maxSpareThreads="75"
               enableLookups="false"
               disableUploadTimeout="true"
               acceptCount="300"
               maxThreads="1200"
               maxProcessors="2000"
               minProcessors="16"
               useURIValidationHack="false"
               URLEncoding='UTF-8'/>

调优说明:
maxThreads :Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是 200
minSpareThreads:最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。
maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。
上边配置的参数,最大线程 500(一般服务器足以),要根据自己的实际情况合理设置,设置越大会耗费内存和 CPU,因为 CPU 疲于线程上下文切换,没有精力提供请求服务了,最小空闲线程数 20,线程最大空闲时间 60 秒,当然允许的最大线程连接数还受制于操作系统的内核参数设置,设置多大要根据自己的需求与环境。当然线程可以配置在“tomcatThreadPool”中,也可以直接配置在“Connector”中,但不可以重复配置。
URIEncoding:指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 WEB 服务器软件配置方便,需要分别指定。
connnectionTimeout: 网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒,可根据检测实际情况,适当修改。
enableLookups: 是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。
disableUploadTimeout:上传时是否使用超时机制。
connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个。
keepAliveTimeout:长连接最大保持时间(毫秒),表示在下次请求过来之前,Tomcat 保持该连接多久,默认是使用 connectionTimeout 时间,-1 为不限制超时。
maxKeepAliveRequests:表示在服务器关闭之前,该连接最大支持的请求数。超过该请求数的连接也将被关闭,1表示禁用,-1表示不限制个数,默认100个,一般设置在100~200之间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值