有时我的一些 Linux 机器会进入某种奇怪的状态而需要重新启动它们。
所有命令的执行时间约为 5 秒。但如果您连续两次运行相同的命令,则第一个命令将需要 5 秒,而第二个命令将立即执行。即使是 time 命令也看不到这 5 秒:
[root@node48 ~]# time echo 1
1
real 0m0.000s
user 0m0.000s
sys 0m0.000s
[root@node48 ~]# time echo 1
1
real 0m0.000s
user 0m0.000s
sys 0m0.000s
[root@node48 ~]# time echo 2
2
real 0m0.000s
user 0m0.000s
sys 0m0.000s
[root@node48 ~]# time echo 2
2
real 0m0.000s
user 0m0.000s
sys 0m0.000s
在上面的例子中,第一次回声耗时 5 秒,第二次是即时的,第三次耗时 5 秒,第四次是即时的。然而,所有“时间”结果均为 0。
我不知道是什么原因造成的。此节点上不存在负载,即使我停止了该节点上所有正在运行的服务,问题仍然存在。
[root@node48 ~]# top
top - 16:17:22 up 42 days, 11:02, 1 user, load average: 0.17, 0.83, 1.20
Tasks: 292 total, 1 running, 291 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.4%us, 0.2%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32934476k total, 21642992k used, 11291484k free, 11296k buffers
Swap: 4095996k total, 0k used, 4095996k free, 343152k cached
没有交换使用,没有僵尸,有充足的 CPU 空闲时间。
如果您遇到这样的问题您会看什么?
谢谢你,
答案1
tldr;systemctl | grep "abandoned" | cut -f3 -d ' ' | xargs systemtctl stop
帮我修好了。
我注意到,并非所有命令都很慢,特别是与登录有关的命令很慢(ssh、w、top 等),但其他命令(例如iostat
、、ls
等)都很快。
例如,在执行某个操作时strace -v w
,我注意到它因等待 D-bus 而挂起。当然,D-bus 本质上与 systemd 紧密相关,您不能在不重新启动的情况下重新启动 D-bus。因此,我进行了一些探索和搜索,并注意到:
systemctl | grep "abandoned" | wc -l
这台机器返回了711。(您也可以看到此信息ls -l /run/systemd/sessions/ | wc -l
)。
有很多被遗弃的登录会话从未被清理过。我清理了它们:systemctl | grep "abandoned" | cut -f3 -d ' ' | xargs systemctl stop
一切都立即好起来了。
我并不是说这可以修好你的机器,但它修好了我的机器,而且它也许可以帮助那些像我一样最终来到这里而无从下手的可怜迷失的灵魂。