在部署有並發任務執行的虛機上, 會遇到 SSH 無法訪問的問題. 本文將幫助你找出其中一種比較特殊的原因, 並提供解決方案。
Note
以下案例分析基於 CentOS 7, 對於其他版本的 Linux 操作系統, 會略有不同, 請注意。
症狀描述
虛機在正常運行過程中,突然發現 SSH 連接失敗。重啟虛機以后,SSH 連接恢復正常。再運行一段時間之后,又發生同樣的問題。
問題分析
- 經過日志分析,azure 平台和虛機運行均無異常。但是從 /var/log/secure.log 里發現如下信息 “sshd[23106]: error: do_exec_pty: fork: Resource temporarily unavailable”
- 根據了解,該虛機上運行的應用程序屬於並發,在同一時間段,同一用戶的進程數會超過 10000.已經超過了默認的 4096 最大值。這是導致本次 SSH 登陸失敗的原因
解決方案
- 重啟虛擬機並以管理員登陸虛擬機,切換成 root 用戶
-
查看文件 /etc/security/limits.d/20-nproc.conf, 默認應該為如下內容
# Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 4096 root soft nproc unlimited
-
編輯文件 /etc/security/limits.d/20-nproc.conf,將高亮顯示行內的 4096,調整為相應的值,或者改成 unlimited.
更多詳細介紹, 請參考這篇文檔
立即訪問http://market.azure.cn