前情提要 基于 PVE 搭的 all in boom ,里面跑了两个 LXC 容器和一个虚拟机,一个容器跑了显卡直通做 Emby server ,另外一个容器装了 alpine 专门用来跑各种各样的的 docker ,本次故障的最大起因可能就是这个容器,后面会细说的。虚拟机用来跑 OP ,整个这套系统比较稳定的运行了快一年,当中偶尔因为装 docker 的容器内存不够折腾过,所有的其他服务都很稳定,因为系统负载也不大。
前几天装了新的 docker 跑本地的 GPT https://github.com/Yidadaa/ChatGPT-Next-Web/ ,当时装好运行一切正常,然而第二天突然开始出现不能用了,web 页面打不开,一开始以为是绑定域名的反代出了问题,就想着在内网直接用局域网 IP 访问,然后发现也不行了,然后一路排查下来发现整个容器已经挂了,没法 ssh ,然后紧接着发现 PVE 宿主的 web 管理页面也打不开了,但是跑 OP 的虚拟机没有问题,所以网络还是正常的。
ssh 到 PVE 宿主上 top 一下,发现两个进程占了 100%的 CPU ,一个是 java 一个是 portainer ,portainer 是跑在 Docker 的容器里的,所以基本上可以确定是那个容器出了问题,本来到这里我还没有觉得有很大的问题,大不了直接重启下容器就好了嘛,然后我再尝试跑了条 pvesh ,就没有任何反馈回来了,再尝试 SSH 的结果就是可以输入用户名和密码,但是接下来没有命令行出现了
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
Last login: Wed Jul 19 10:59:26 2023 from 192.168.10.26
正常这里会有 root@PVE:~# 然而它就没有了...所以我就压根没机会执行任何的命令事情到这里我还抱了最后一丝希望,大不了我直接物理连接到宿主机上操作嘛,等了一晚上系统没有自动恢复之后,我开始执行最后的方案,等我接好屏幕和键盘,屏幕上显示的就是一连串
[27234234.123123]systemd failed to start journal service
每一行前面的数字都不相同, 当我 root 登录之后,和 ssh 的结果一样,就没有命令行了... 放狗搜了半天也没发现类似的情况,想要 troubleshooting 都无从入手,还请各位专家帮忙指条明路,除非万不得已我实在不想直接断电重启,真的 all in boom 的话,我今晚就要无家可归了~~ 1
ltkun 2023-07-19 13:41:59 +08:00 via Android
为啥不重启 虽然我也不想
|
2
billlee 2023-07-19 13:43:06 +08:00 via Android
可能是 profile/bashrc 里面有什么命令阻塞了。可以试试直接 ssh 命令行传递命令。最后,除了断电,还可以 sysreq 重启
|
3
Masoud2023 2023-07-19 13:50:16 +08:00
没有命令行应该是系统负载太高了吧,这种情况除了重启也没啥好办法了吧。
说句风凉话:all in boom ,最后 boom 了就要愿赌服输 |
4
424778940 2023-07-19 14:00:04 +08:00
+1 你这多半是内存炸了
|
5
flowdesign OP @billlee 多谢你的指点,ssh 直接传递命令过去我刚刚试了一下,那些有交互的命令就完全没反应,比如 top... 所以就搞得我有点不敢乱执行,虽然我猜就是容器出问题了,可是也不知道是不是可以强制关闭容器成功,现在宿主机还是能 winscp 上去看文件,然后我查了 var/log 下面的东西,没找到任何有价值的信息
|
6
flowdesign OP @Masoud2023 不风凉,既然做了 all in boom ,自然有最坏打算的准备,当然在可以挽救的前提下还是会尽可能的去救,我没理解的是,如果真的系统负载高到不行,为啥我的 OP 虚拟机还能正常工作让我现在还有机会上来求救一下...按理说容器对于宿主机的影响更小才对嘛
|
7
billlee 2023-07-19 14:16:38 +08:00 via Android
@flowdesign 文件系统还在运行说明问题不大。top 用不了,可以用 ps, kill, pkill, killall 等命令来杀掉出问题的容器。
|
8
flowdesign OP @billlee 就是不知道是不是真的杀掉了,前面我跑 emby 的容器都可以正常 ssh 进去,然后我执行了一下 restart ,就没有了...所以我就很忐忑直接 kill 会出什么幺蛾子
|
9
billlee 2023-07-19 14:42:52 +08:00 via Android
@flowdesign 容器进程是可以在容器外看到的,ps 看不到相关进程,就说明容器已经销毁了。
|
10
flowdesign OP @billlee
跑了一下这个命令尝试强制杀掉 103 也就是跑 Docker 的容器 <p>root@Openwrt:~# ssh -t [email protected] "lxc-stop -n 103 -k"</p> <p>[email protected]'s password:</p> 窗口就没有任何回应了,也没法继续执行其他命令 |
11
flowdesign OP 等了好几分钟以后提示
Job for pveproxy.service failed because a timeout was exceeded. See "systemctl status pveproxy.service" and "journalctl -xe" for details. 然后跑 journalctl -xe 灭有反应 again 。。。 |
12
ruanimal 2023-07-19 17:23:47 +08:00
过热掉硬盘了?
|
13
flowdesign OP @ruanimal 没有过热,硬盘也都应该挂载的很好
|
14
flowdesign OP PVE 还是命硬,苟了两天以后,终于活过来了,初步判断还是卡 IO 导致的,卡 IO 的元凶就是那个跑 docker 的 LXC 容器,所以在我把容器强行 kill 之后,排队的进程慢慢的跑完就基本恢复,但是现在的问题就是那个强行 kill 的容器启动不起来,log 也没啥有价值的东西,又一轮新的 troubleshooting...
|
15
flowdesign OP @ruanimal 被你猜中了, 真的是容器所在的那个硬盘出了问题 fsck 一把错误不说, 跑完就直接 IO error, all in boom 没有及时备份的痛不外如是...
|