You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CentOS实例SSH端口周期性无法连接问题排查求助

排查方案

1. 先盯紧系统资源消耗

这种SSH、Cron挂掉但Apache还能跑的情况,大概率是关键资源被占满——老进程(Apache worker)还能维持运行,但新进程(sshd子进程、Cron任务)无法启动。

  • 提前写个定时脚本(趁Cron还能正常运行时配置),每隔5分钟把关键系统状态写到EBS挂载的独立日志文件里(别用系统默认的/var/log,问题出现后系统日志会停止记录):
    # 示例脚本,保存为/root/monitor_resources.sh并执行chmod +x赋予权限
    echo "==== $(date) ====" >> /data/resource_monitor.log
    ps aux | wc -l >> /data/resource_monitor.log  # 记录总进程数
    cat /proc/sys/fs/file-nr >> /data/resource_monitor.log  # 记录文件句柄使用情况
    free -m >> /data/resource_monitor.log  # 记录内存/swap占用
    top -bn1 | head -10 >> /data/resource_monitor.log  # 记录CPU负载和核心进程状态
    ss -s >> /data/resource_monitor.log  # 记录网络连接统计
    
    然后添加Cron任务:*/5 * * * * /root/monitor_resources.sh
  • 检查系统进程数上限:cat /proc/sys/kernel/pid_max,以及用户级进程数限制ulimit -u,如果进程数接近上限,就是进程泄漏导致的问题。

2. 给sshd开调试日志,避免日志丢失

系统日志停更后,可单独给sshd配置实时写入的调试日志:

  • 修改/etc/ssh/sshd_config,调整日志级别:
    LogLevel DEBUG3
    SyslogFacility AUTHPRIV
    
  • 编辑/etc/rsyslog.conf,将AUTHPRIV日志定向到独立文件,并开启同步写入防止缓冲丢失:
    authpriv.* /var/log/sshd_debug.log
    $ActionFileEnableSync on
    
  • 重启sshd和rsyslog服务:systemctl restart sshd rsyslog

3. 排查内核级阻塞或进程挂死

日志停更可能是rsyslogd本身挂了,或者内核出现死锁导致系统调用卡住:

  • 添加定时脚本监控关键进程状态:
    echo "==== $(date) ====" >> /data/process_monitor.log
    ps aux | grep -E 'sshd|crond|rsyslogd' >> /data/process_monitor.log
    
    同样加入Cron每隔5分钟执行,查看问题出现前这些进程是否消失或资源占用异常。
  • 开启内核panic日志,修改/etc/sysctl.conf:
    kernel.panic = 10
    kernel.panic_on_oops = 1
    kernel.printk = 7 4 1 7
    
    执行sysctl -p生效,若内核发生panic,会自动重启并将日志写入dmesg,重启后可通过dmesg -T查看。
  • 检查OOM Killer记录:用定时脚本定期抓取dmesg | grep -i oom,确认是否因内存不足导致sshd/crond进程被杀死。

4. 网络层面排查

Apache能访问不代表SSH网络无异常:

  • 问题出现时,从同VPC的其他实例用telnet <目标IP> 22测试,判断是连接无法建立还是持续挂起。
  • 开启VPC Flow Logs,查看SSH流量(22端口)是否被安全组/NACL拦截,或存在异常丢包情况。
  • 调整TCP keepalive参数,避免中间设备断开连接:修改/etc/sysctl.conf:
    net.ipv4.tcp_keepalive_time = 300
    net.ipv4.tcp_keepalive_intvl = 60
    net.ipv4.tcp_keepalive_probes = 5
    
    执行sysctl -p生效。

5. 排查周期性任务的问题

每隔几天发作,大概率是某个定时任务触发的:

  • 列出所有Cron任务:crontab -l(需检查root及其他用户的任务)、ls -la /etc/cron.*,查看是否有周期性执行的备份、清理脚本,是否存在误删文件或占用大量资源的情况。
  • 检查Apache访问日志,查看问题出现前是否有异常流量(如爬虫、DDoS),导致Apache占满CPU/内存间接影响其他进程。
  • 检查自定义的systemd服务或后台进程,是否存在内存/进程泄漏,比如某个脚本每隔几天就fork大量进程。

6. 最小化测试

挑一台受影响的实例,停掉所有非必要服务(自定义脚本、非核心应用),只保留Apache、sshd、crond,观察问题是否还会出现,逐步缩小范围定位根源。


内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:20:33