测试驿栈-由浅入深学性能 Nginx 性能优化 (一)

飞天小子的性能课堂 · 2021年05月29日 · 185 次阅读

压测场景

800 线程做稳定性压测时,接口大批量返回 500 异常,如下所示

可以发现,很明显是 Nginx 返回的错误。但是从接口返回看不出太多的细节问题,需要打印 nginix 日志查看

日志分析

打印 nginx 日志,可以看到大量的异常信息:Too many open files

看起来是句柄数超出文件限制了
ulimit -a 查看一下 linux 的句柄,发现已经加到 65535,最大值

查看 nginx 进程句柄数,发现也是 65535,最大值

linux 句柄和 nginx 进程句柄都已经放到最大了,为什么还会报错呢?

问题分析

仔细想一想,其实这个Too many open files反映的并不是句柄数,而是打开文件数。什么是打开文件数?
linux 下,有两个值可以代表打开的文件
1.file-max【最大打开文件数】
2.ulimit【最大文件句柄数】
通过lsof | grep 应用进程号 | wc -l可以实时查看当前进程一共打开了多少文件,如下所示,一共打开了 70 多万。。。。

然后再通过 ** /proc/sys/fs/file-max*查看一下当前 linux 的 file-max 限制,最大是 10240

对比一下就知道了,打开的文件数远远超出了 linux 的限制数!
echo 6553560 > /proc/sys/fs/file-max,修改一下最大文件数就行了,改成 6553560,然后重启 nginx
再次跑脚本的时候,就没有返回这些文件错误了,但是又返回了新的错误:
Connection reset by peer*

我们下一篇继续!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册