在过去一年里,我有一个 DigitalOcean VM 运行 Jenkins,没有任何问题。本周突然开始出现问题。
事情开始于有一天,我注意到一些apt
相关进程(apt-check
我认为)的 CPU 使用率高达 100%。我重启了机器,一切又恢复正常了。
但是现在这台机器基本上已经无法使用了。SSH 很慢,我几乎无法访问 Jenkins Web 界面。因此,我开始四处寻找并查看问题的原因。
检查 IO 使用情况
我注意到的最值得注意的事情是,当我的一项 Jenkins 作业正在运行时,IO 利用率持续达到 100% 的峰值。
好吧,这有点奇怪。我继续在机器上安装 iotop,并查看了哪些设备使用了这么多 IO。只是运行iotop
并没有显示太多信息。但是,当我运行时,iotop --accumulated
我注意到这jbd2
导致了高 IO 等待时间,而实际上并没有做太多工作(几乎没有读/写活动)...
编写测试
于是我继续进行了一些测试(关闭 Jenkins 后),以测量机器上的实际读写性能。读取很好,但是写入很奇怪。
root@jenkins:~# dd if=/dev/zero of=/tmp/output bs=1G count=1
1073741824 bytes (1.1 GB) copied, 271.903 s, 3.9 MB/s
对于使用 SSD 存储的 DigitalOcean VM 来说,这似乎非常慢。但为了确保万无一失,我在具有相同规格(1G 30GB AMS3)的另一台 VM 上运行了相同的测试:
root@gitlab:~# dd if=/dev/zero of=/tmp/output bs=1G count=1
1073741824 bytes (1.1 GB) copied, 36.9623 s, 29.0 MB/s
显然 jenkins 机器有些奇怪。对我来说,这感觉像是硬件问题(在 Google 上搜索 jbd2 io 等待时间时,提到了 RAID 问题)。
闲置过夜
机器一整夜处于闲置状态,没有运行 jenkins。IO 利用率不断波动(10-50%),我看到 apt 进程的 CPU 使用率很高。不确定这是否相关。
新的虚拟机(来自快照)
作为最后的测试,为了测试硬件问题,我现在还从我的 jenkins 机器的快照创建了一个新的 VM。目前看来,新的 VM 运行良好(jbd2 不会导致高 IO 等待时间 - 空闲时或 jenkins 作业运行时)。
结论
这确实是旧 jenkins VM 的硬件问题吗?我也会联系 DigitalOcean,看看他们怎么说。这一切似乎让我有点担心。
更新
DigitalOcean 已确认主机节点的 I/O 负载过高。我担心(我猜)其他客户可能会导致我的 droplet 无法使用。不过,我已将我的 droplet 迁移到其他主机,现在一切恢复正常。