在部署有并发任务执行的虚机上, 会遇到 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