我想了解这种情况:
我的服务器突然变得繁忙,停止执行我要求它执行的任何新操作:ls、vi,什么都不起作用,它冻结了。但我可以浏览已经打开的 vim 文件。为什么会这样?
答案1
可能是各种各样的事情,这假设你除了使用现有的 vim 之外什么都做不了。你不能 ssh 进入,你不能打开新的 shell,什么都做不了。如果你可以打开新的 shell,但不能在该 shell 中运行任何东西,那么可能是各种各样的事情不同的例如,您的 PATH 可能指向已关闭的网络共享上的目录(尝试运行“/bin/ls”,这样就不会搜索 PATH),并且您必须等待它超时,然后它才会查看其他目录...这里有一些可以尝试的事情:
按照“最不可能导致 vim 崩溃”的顺序,首先让 vim 打开 /proc/loadavg ( :r /proc/loadavg
) 它应该插入如下一行
0.04 0.05 0.01 2/176 26199
前三个数字是平均负载(与 uptime 命令相同),2/176 表示总共 176 个进程中有两个进程当前可运行。如果进程总数达到数万,那么 forkbomb 或类似的东西可能正在消耗您的所有资源。您可能可以阅读/proc/[randomnumber]/cmdline
并猜测这些进程来自何处。
/proc/meminfo
将有很多行关于当前 RAM 使用情况的信息。如果 MemFree 接近于零和Buffers 和 Cached 接近于零,则表示某些东西已经消耗了大部分内存。请注意,由于 Buffers 和 Cache,MemFree 通常较低,因此如果 Buffers 和 Cache 较高,则这是正常操作。
如果 /proc/loadavg 的前三个数字真的很高(例如 10.0+,取决于 # cpus/cores),那么它可能是一个失控的进程,占用了你所有的 CPU 时间(在这种情况下,你的命令最终应该会执行……但 vim 也会很慢)。否则,可能是 IO 问题,这会在不使用 CPU 的情况下增加负载数字(例如硬盘故障)。如果你已经挂载了 sysfs(通常/sys/
),你可以尝试读取/sys/block/[drivedevice]/device/ioerr_cnt
(其中 [drivedevice] 是你的驱动器设备名称,例如sda
,而不是分区名称)。这将有一个十六进制数,计数该设备已记录的所有错误。我的是 0x8(一些写缓存和其他设置的启动测试会导致错误,这是正常的,取决于硬件和驱动程序)但是如果你的很大(并且越来越大,尝试读取两次)那么驱动器就要死了。
如果驱动器没有错误,那么尝试从驱动器读取可能是安全的:如果您有权限,请尝试打开,/var/log/kern.log
这可能会让您更深入地了解正在发生的事情。 /var/log/syslog
并且/var/log/messages
也可能会有所帮助。