某次压力测试时,Jmeter得到大量connection reset、connect timeout的错误。
拓扑
|
|
观察nginx
nginx采用的是四层代理,用的是stream模块
查看 /var/log/nginx/error.log
,看到大量too many open files
的错误。
观察ulimit -a
得到open files (-n) 1024
,这个值太小了,采用这个方式调大。
优化nginx
再优化nginx,调整 /etc/nginx/nginx.conf
。
调整worker_processes,默认值是 1,改为auto。
|
|
调整worker_connections,默认值是512太小了,压测并发有15000,因为服务器有10核,woker_processes的实际值是10,所以调整到1600,那么总共就是16000。
|
|
调整worker_rlimit_nofile到16000,该值小于不能总的worker_connections:
|
|
再次压测后,Jmeter得到502 bad gateway等错误。
观察nginx的 /var/log/nginx/error.log
,没有新的错误日志产生。
观察ingress nginx
先设置ingress nginx配置 disable-access-log=true ,关闭access log打印,可以让我们专注在错误日志上。
观察ingress nginx日志,发现先有大量Connection timed out错误:
|
|
然后出现大量Cannot assign requested address的错误:
|
|
看来是ingress nginx和Pod的连接超时了,根据ingress nginx文档,proxy-connection-timeout
默认值5秒,太短了,调整到60秒。
再次压测后Connection timed out问题没有了,而且Cannot assign requested address也没有了。
评论