性能測試之nginx瓶頸優化

壓測場景

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**

未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章