公众号旧文
服务器安装大型软件卡死了,怎么办?
本文从下面这张阿里云后台截图开始,聊聊安装大型软件怎么避免卡死。

故事还要从安装 Dify 说起:
前天,我在一台2核2G的服务器上,尝试安装 Dify。
结果刚开始安装,终端就卡死了。
阿里云后台,磁盘读写异常活跃。
从 17:40 左右开始,读取突然暴涨。
随后长时间维持在 70MB/s ~ 100MB/s 附近。
而且不是瞬间,是持续几十分钟。
一、为什么安装软件会疯狂读盘?
因为现代软件安装,早就不是复制几个文件。
尤其是 Docker 环境。
当你执行:
docker compose up
服务器就马上开始:
- 拉取镜像
- 解压镜像 layer
- 创建 overlay2
- 初始化数据库
- 安装 Python 依赖
- 创建 node_modules
- 校验文件完整性
这些操作会产生海量小文件读写。
而 Linux 最怕的恰恰就是随机 IO。
二、为什么 SSH 也会跟着卡?
明明只是安装软件,为什么连 SSH 都进不去了?
因为 SSH 本身也依赖磁盘。
例如:
- bash 历史记录
- 用户配置
- PAM
- systemd
- shell 环境
- 日志
都需要读写硬盘。
于是当 Docker 疯狂抢 IO 时,sshd 也得排队。
于是看到的现象就是:
- SSH 卡顿
- 输入延迟
- 新连接超时
- 系统像死机
但实际上内核很可能还活着。
只是所有进程都在等硬盘。
三、Linux 一种很经典的状态:没死,但谁都动不了。
CPU 可能才 20% 到 30%,内存也没爆。
但磁盘已经 100%。
于是所有进程都卡在:
D 状态(不可中断 IO 等待)
换句话说就是:大家都在排队等硬盘。
这也是为什么很多时候 ping VPS 还能通。
四、这时候最忌讳什么?
估计很多人会和前天的我一样,立刻强制重启。
但正确的做法是先观察。
比如:
1. Ping 还通不通
如果 ping 还能通,就说明内核大概率还活着。
2. 后台监控还动不动
虽然 SSH 卡住,但如果磁盘曲线还在变化。
就说明系统还在工作。
3. CPU 是否完全归零
如果:
- CPU 还有波动
- IO 还在跑
- 网络还有流量
那么通常只是系统忙疯了,而不是服务器死机了。
五、那如何不卡死呢?
我的思路很简单:
只要别让服务器资源跑到物理极限,那就自然不会卡死了。
于是在安装大型软件时,可以这样:
ionice -c3 nice -n 19 docker compose up
其中 nice -n 19,是降低 CPU 优先级。
而 ionice -c3,会降低磁盘 IO 优先级。
因为真正把 SSH 拖死的,很多时候不是 CPU,而是磁盘 IO。
代价只是安装慢一点。
但换来的却是:
- SSH 不容易卡死
- VPS 不容易失联
- 系统更稳定
这俩参数,对于低配服务器安装大型软件来说,几乎是必须的。