Linux SSH连接故障排查与修复过程分享

 更新时间:2026年09月02日 14:18:55   作者:姜太小白  
这篇文章主要介绍了Linux SSH连接故障排查与修复过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题现象

  • 初始错误:SSH protocol handshake error, Socket error: Connection reset by peer
  • 后续在服务器端执行命令时出现:-bash: fork: retry: Resource temporarily unavailable
  • 根本原因:系统进程数(PID)耗尽,无法创建新进程(包括 SSH 登录所需的 shell)。

排查与修复步骤(按时间顺序)

1. 紧急恢复系统创建进程的能力

目的:临时调高系统允许的最大 PID 数量,使系统能再次 fork 新进程。

# 临时修改内核参数(立即生效,无需重启)
echo 1000000 > /proc/sys/kernel/pid_max

# 检查当前用户进程数限制(可选)
ulimit -u
# 若限制过小,可临时解除
ulimit -u unlimited

2. 统计各用户进程数量,定位异常

目的:找出哪个用户占用进程数最多。

ps -eo user=|sort|uniq -c|sort -nr

输出

  28168 root
  28148 oracle
     58 grid
     ...

发现 root 和 oracle 用户各有约 2.8 万个进程,远超正常范围。

3. 进一步统计每个用户下各命令的进程数量

目的:确定具体是哪个程序(COMMAND)造成了进程爆炸。

# 统计 root 用户各进程数量(取前10)
ps -U root -o comm --no-headers | sort | uniq -c | sort -nr | head -10

输出(示例):

     52 bioset
     51 kdmflush
      7 ext4-rsv-conver
      6 sshd
      5 mingetty
      4 bash
      4 UsmGeneral
      3 udevd
      3 oks_rbld
      3 java

root 用户下未见异常,数量可控。

# 统计 oracle 用户各进程数量(取前10)
ps -U oracle -o comm --no-headers | sort | uniq -c | sort -nr | head -10

输出

  27436 sendmail
  27436 crond
    558 postdrop
    115 oracle
     18 server
     18 replicat
     10 extract
      1 sshd
      1 oraagent.bin
      1 ggsci

锁定元凶:oracle 用户下堆积了约 2.7 万个 sendmail 和 2.7 万个 crond 进程,完全失控。

4. 清理异常进程

目的:终止这些失控进程,释放 PID 资源。

# 杀掉 oracle 用户下所有 sendmail 进程
pkill -u oracle sendmail

# 杀掉 oracle 用户下所有 crond 进程
pkill -u oracle crond

# 若上述无效或仍有残留,可强制终止该用户所有进程(注意:会中断 Oracle 数据库)
pkill -9 -u oracle

5. 验证清理效果

# 查看当前总进程数
ps -e | wc -l

# 分别查看各用户进程数
ps -U root | wc -l
ps -U oracle | wc -l

进程数应降至正常水平(通常几百到几千)。

6. 根除病因——检查 oracle 用户的定时任务

目的:防止重启后问题复现,因为大量 crond 进程通常来自循环执行的 cron 任务。

# 查看 oracle 用户的 crontab
crontab -u oracle -l

# 也可直接查看 cron 文件
cat /var/spool/cron/oracle

发现异常任务(如频繁调用 sendmail 或死循环脚本),立即注释或删除相应行。

7. 永久固化系统配置(避免重启后再次耗尽)

目的:将临时修改写入配置文件,使系统重启后仍保持较大的 PID 上限和用户进程限制。

# 永久修改内核最大 PID 数
echo "kernel.pid_max = 1000000" >> /etc/sysctl.conf
sysctl -p

# 永久解除(或调高)用户进程数软硬限制
echo "root soft nproc unlimited" >> /etc/security/limits.conf
echo "root hard nproc unlimited" >> /etc/security/limits.conf
echo "oracle soft nproc unlimited" >> /etc/security/limits.conf
echo "oracle hard nproc unlimited" >> /etc/security/limits.conf

8. 重启 SSH 服务并验证连接

目的:确保 SSH 服务状态正常,并能接受新连接。

# 重启 SSH 服务
systemctl restart sshd

# 从另一终端尝试 SSH 连接,确认成功

关键命令速查表

步骤命令作用
紧急恢复echo 1000000 > /proc/sys/kernel/pid_max临时调高 PID 上限
查看总进程数ps -e | wc -l统计全部进程数
统计各用户进程ps -eo user=|sort|uniq -c|sort -nr找出异常用户
统计某用户各命令ps -U oracle -o comm --no-headers | sort | uniq -c | sort -nr | head -10定位具体失控程序
清理进程pkill -u oracle sendmail
pkill -u oracle crond
杀死指定用户的特定进程
查看 crontabcrontab -u oracle -l检查定时任务
固化配置见上文第7步永久生效

总结

故障根源是 oracle 用户的 cron 任务反复拉起 sendmail/crond 进程,导致 PID 耗尽

通过临时调高 PID 上限、清理失控进程、修复定时任务并固化内核/用户限制,彻底解决了 SSH 连接拒绝和 fork 失败的问题。

完成后,SSH 连接恢复正常。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • CentOS6.8中/英文环境切换教程图解

    CentOS6.8中/英文环境切换教程图解

    这篇文章主要介绍了CentOS6.8中/英文环境切换教程,本文只以中文切换为英文为例给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Linux系统为什么要吃掉我的“内存”

    Linux系统为什么要吃掉我的“内存”

    这篇文章主要介绍了Linux系统为什么要吃掉我的“内存”的相关资料,需要的朋友可以参考下
    2019-07-07
  • ubuntu18.04 nvidia驱动安装全过程

    ubuntu18.04 nvidia驱动安装全过程

    本文记录了作者在Ubuntu 18.04上安装NVIDIA驱动的过程,由于自动检测与自动安装方法不适用,作者只能强制安装特定版本的驱动,并在安装后更新到支持的最新版本,最终,系统能够识别NVIDIA驱动,但性能未达最佳
    2026-03-03
  • Centos7.2安装Nginx实现负载平衡的方法

    Centos7.2安装Nginx实现负载平衡的方法

    这篇文章主要介绍了Centos7.2安装Nginx实现负载平衡的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • linux的CPU、内存查看命令方式

    linux的CPU、内存查看命令方式

    这篇文章主要介绍了linux的CPU、内存查看命令方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Vim中特殊字符的读写详解

    Vim中特殊字符的读写详解

    最近在工作中遇到一个文章,在跨平台工作的时候由于不同编辑器处理换行和空白字符风格不一致, 常常在Vim下会看到一些特殊字符。这些特殊字符的含义可通过digraph-table查询, 也可根据digraph-table或Unicode/ASCII编码手动输入这些特殊字符。下面来一起看看详细的介绍
    2016-11-11
  • 在Linux服务器下启动tomcat的三种方式

    在Linux服务器下启动tomcat的三种方式

    这篇文章主要介绍了在Linux服务器下启动tomcat的三种方式,Linux作为一种稳定安全的服务器一直受到业界欢迎,那么如何启动部署在服务器上的Tomcat呢,这篇文章带我们来了解
    2023-03-03
  • 64位CentOS 6.0下搭建LAMP环境详细步骤

    64位CentOS 6.0下搭建LAMP环境详细步骤

    这篇文章主要介绍了系统环境:Centos6.0 x64的lamp运行环境配置教程,需要的朋友可以参考下
    2013-07-07
  • Linux用户与最小权限原则解析

    Linux用户与最小权限原则解析

    这篇文章主要为大家解析了Linux用户与最小权限原则,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Linux下实现不活动用户登录超时后自动登出

    Linux下实现不活动用户登录超时后自动登出

    这篇文章主要介绍了Linux下实现不活动用户登录超时后自动登出 ,本文给大家带来了四种方式,每种方式都通过实例代码文字给大家介绍的非常详细,需要的朋友可以参考下
    2019-08-08

最新评论