max user processes 導致的服務器大量close_wait問題解決過程


1、背景:

由於現網業務量增長過快,需要擴容應用程序服務器,分擔來自前端的訪問壓力。

2、故障:

部署好業務啟動程序后,發現程序運行一小會后不產生新的日志和數據。

3、查問題過程:

1、首先查看程序運行有無報錯

正常

2、查看服務器的負載,會不會是新增服務器的性能影響了程序正常運行

查看io,正常

 top查看,正常

 

內存使用,正常

 

3、查看應用服務器和前端nginx 的連接

大量的CLOSE-WAIT

 

 連接狀態一看就有問題,CLOSE_WAIT是服務端被動關閉連接的意思(連接狀態詳解)。

4、解決過程:

網上查解決方法一致都是說程序本身的問題導致,如果你的問題是程序造成的,那么按網上的方法改善代碼即可解決。

 

但是我的新增服務器上的程序都是和原先運行正常的服務器上copy過來的,原服務器運行正常,所以說明不是程序的問題。

從新增服務器本身考慮“被動關閉連接”,會不會是我服務器內核參數配置的連接數太低了。

網上搜的修改連接數的帖子:https://www.jianshu.com/p/fa35d91b727b

經過一番修改,重新啟動程序觀察,問題依舊,實在是找不到和原有服務器配置上的區別了。

 

本着所有的問題都是有原因的原則,繼續觀察端口狀態的變化:

 

觀察到一個現象,es狀態暴增后突然變為close_wait,應該就是服務器配置限制了連接數,還是要從服務端查看。

經過我的不斷努力查找,終於找到問題的原因

root用戶和普通用戶的ulimit -a查看到的配置是不同的

查看我程序運行賬號tomcat 的ulimit(ulimit -a 用來顯示當前的各種用戶進程限制。)

ulimit -a 時發現max user processes為1024,代表tomcat用戶的線程數才1024

 

 修改ulimit -u 65535         //此方法是臨時修改

 

修改永久生效

上面的修改為臨時修改,設置永久生效的方式是編輯/etc/security/limits.conf

* soft nproc 655350
* hard nproc 655350
* soft nofile 655350
* hard nofile 655350

 

:sentos6系統中修改/etc/security/limits.conf ,退出shell后重新登陸,依然不行。

報:ulimit: max user processes: cannot modify limit: 不允許的操作 ulimit: open files: cannot modify limit: 不允許的操作

后經Google是/etc/security/limits.d/90-nproc.conf的限制。

解決辦法:https://blog.csdn.net/u014595668/article/details/89279756

修改:

# vim /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     unlimited
root       soft    nproc     unlimited

到這里問題終於解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM