一句话:低配 VPS 上 Jenkins 构建 + 异常
npm install+ 挖矿木马叠加,导致多次整机卡死;排查靠监控、htop 与清理 workspace。
写在前面
2022 年 9 月 7 日下午,腾讯云轻量服务器突然无响应。本文记录 从现象 → 排查 → 临时恢复 → 根因 → 后续复发 的完整过程,给同样在 小内存机器跑 Jenkins + Node 构建 的同学提个醒。
核心内容
现象与监控
登录腾讯云控制台,监控页显示约 10 分钟完全无响应。崩溃前一段时间:
- 内存 打满
- 磁盘 接近满
- 带宽 飙高
第一反应是遭受攻击,但后续排查指向 资源耗尽 + 恶意进程 叠加。
第一次恢复:Jenkins 与博客
- 强制重启服务器两次,访问 Jenkins 仍无响应
- 第三次重启后 不打开 Jenkins,直接访问博客 —— 正常(说明 pm2 开机自启有效)
- 停止 Jenkins 后,查看
/var/lib/jenkins/workspace,发现大量 未完成构建目录 - 删除这些目录后启动 Jenkins,Web 页面恢复
- 再次点击构建 → 服务器又卡死
根因之一:npm install 与 package-lock.json
构建日志卡在 npm install。进入项目目录 手动执行同样卡死。
最终发现:blog-server 的 package-lock.json 被置空,npm 需重新解析全量依赖树,在小内存 VPS 上 长时间占满 CPU/内存/磁盘 IO,表现为整机假死。
| 因素 | 影响 |
|---|---|
| 空 lock 文件 | 依赖解析极慢、下载量大 |
| 1G × 2 实例 pm2 | 内存基线过高 |
| Jenkins 构建 | 与线上服务抢资源 |
2022-09-11:挖矿程序
重启 Jenkins 时发现 c3pool/xmrig 挖矿进程。多次:
- 重置 Jenkins
- 删除
smring相关文件与进程
后服务才稳定。Jenkins 未授权暴露或弱口令 是常见入侵入口,务必改强密码、限制 8080 访问来源。
2023-02-15:再次卡死与 htop
晚上 19 点左右服务再次无响应,重启后安装:
bash
yum install -y htop
htop
htop 字段速查:
| 字段 | 含义 |
|---|---|
| PID | 进程 ID |
| USER | 运行用户 |
| VIRT / RES | 虚拟 / 物理内存 |
| %CPU / %MEM | CPU、内存占比 |
| COMMAND | 启动命令 |
常用键:F3 搜索、F9 杀进程、F10 退出。
释放 buff/cache
free -m 显示 available 很低但 buff/cache 很高 时,可临时清缓存(治标不治本):
bash
sync
echo 1 | sudo tee /proc/sys/vm/drop_caches
echo 2 | sudo tee /proc/sys/vm/drop_caches
echo 3 | sudo tee /proc/sys/vm/drop_caches
生产环境慎用,优先找 谁占用了 RES。
踩坑与注意
- 永远不要提交空的
package-lock.json;CI 应npm ci且 lock 与package.json同步。 - Jenkins 不要与线上 API 同机硬扛:小内存机应用 独立构建机 或云效/GitHub Actions 外置构建。
- pm2 内存上限:两实例各 1G 在 2G 机上必炸,按实际 RAM 调整
--max-memory-restart。 - 安全:Jenkins 改端口 + 防火墙 + 强密码;定期检查
ps aux陌生进程。 - workspace 定期清理:失败构建残留会占满磁盘。
小结
这次崩溃是 资源型 VPS 上的典型组合事故:异常 npm 安装拖死机器、Jenkins 构建放大问题、后期又混入挖矿木马。恢复手段:停 Jenkins → 清 workspace → 修复 lock → htop 查进程 → 加固入口。教训:锁文件、构建与生产分离、监控告警 三件套缺一不可。


全部评论(0)