![远程 Fedora 系统无响应,尝试登录时出现奇怪但一致的行为](https://linux22.com/image/530040/%E8%BF%9C%E7%A8%8B%20Fedora%20%E7%B3%BB%E7%BB%9F%E6%97%A0%E5%93%8D%E5%BA%94%EF%BC%8C%E5%B0%9D%E8%AF%95%E7%99%BB%E5%BD%95%E6%97%B6%E5%87%BA%E7%8E%B0%E5%A5%87%E6%80%AA%E4%BD%86%E4%B8%80%E8%87%B4%E7%9A%84%E8%A1%8C%E4%B8%BA.png)
我在一年前左右的 Fedora 安装上运行了许多网站。今晚,所有网站都停止响应。我一直试图登录进行调查,但无法登录,我不知道该怎么办。
服务器 ping 操作成功,响应时间还不错,~200ms。
当我按下“shh”键时,屏幕上会显示“上次登录:...”文本,但仅此而已。但是,如果我保持原样,然后打开另一个 ssh 会话,第一个会话实际上会登录(我已将其设置为使用密钥而不是密码),而新的会话会停留在“上次登录:...”处。我可以重复此操作多次 - 打开新的 ssh 会话总是会使先前打开的会话登录。
登录后,唯一可以持续运行而不会冻结连接的命令是ls
在我的主目录中。我曾经能够运行sudo su
一次,但其他时候都会在那里冻结,就像运行任何其他命令一样(我尝试过、、top
) 。killall -9 httpd
ps aux
这种模式听起来熟悉吗?任何关于如何进行的提示都将不胜感激!
答案1
这听起来像是您的系统负载非常重。很可能是交换量很大或使用了磁盘 I/O。
我怀疑这种情况的发生是因为某种原因*) 您的网站突然收到大量针对某个大型动态页面的 http 请求,这导致 Apache 消耗了您所有的服务器资源。真正的原因很可能是数据库服务器负载过重且响应缓慢,这会增加您 Web 服务器上的页面加载时间,这会导致 Apache 消耗更多进程,从而导致服务器过载,进而导致您观察到的情况。
您的网站通常流量大吗?最好能给出一个大概的数字——我们说的是每天几千次点击、几万次点击还是几百万次点击……?
您的服务器有资源图表吗?像 snmpd+mrtg 或 Cacti 这样的图表可以绘制 CPU、内存、磁盘使用情况吗?如果有,是否有峰值?或者,如果您安装了sysstat
软件包,那么您可能有sar
可用的快照 - 尝试命令sar
。它会每 10 分钟左右保存有关系统的各种信息,并通过它的报告您可以看到正在发生的事情。
这个 Fedora 安装是单独的物理服务器吗?还是它在某种程度上取决于您所说的 VMware 环境?可能是您的 VMware 基础架构的某些部分时不时会过载,而这才是导致问题的真正原因?
此外,尘埃落定之后,我会调查日志,看看是否有任何迹象表明内核正在大喊 OOM(内存不足)杀手,或者 httpd 日志是否看起来可疑。
通常,如果我无法亲眼在 httpd 日志中看到任何可疑内容,我会让 Webalizer 或类似的分析器运行该日志,看看输出中是否有任何 URL 弹出。或者我只是将日志传输到管道apachetop
并查看发生了什么。
*) 原因可能是 DoS 攻击、行为不当的 PHP 脚本、错误的 .htaccess 文件导致您的 ErrorDocument 页面递归调用自身、Slashdot/reddit 效应或其他完全不同的东西。
答案2
哦,昨天早上我的虚拟服务器(通过 VMWare 运行的 CentOS 5.4)也遇到了同样的问题。当我尝试以详细模式使用 ssh 时,它挂在:
debug1: Entering interactive session.
如果我打开另一个 ssh 会话,第一个会话将继续显示一些调试信息并卡在:
debug2: callback start
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug2: channel 0: request shell confirm 1
debug2: fd 3 setting TCP_NODELAY
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login:
几分钟后,它实际上给了我一个命令提示符。
但下午,我可以正常 ssh。这对我来说很奇怪,我在 Google 上找不到任何信息。
PS:我也使用公钥代替密码。