在升级过程中,内存(RAM+swap)的最大压力出现在“ember”进程运行时。我认为每次运行更新时,它都比以前更大,并且越来越接近无法在推荐的最低配置的计算机上运行。
在它实际失败之前,最好研究一下这个问题。(希望出于成本原因,答案不是增加推荐的最低配置。如果磁盘空间允许,增加 swap 会有帮助。原则上,可以暂时迁移到更昂贵的、内存更大的实例。)
我在小型实例上运行两个中等规模的论坛——我相信它们都在推荐的最低配置范围内。在这两种情况下,RAM+swap=3G。一种情况是使用 1G RAM 和 2G swap 的 Digital Ocean 实例,另一种情况是使用 2G RAM 和 1G swap 的 Hetzner 实例。
以下是 ember 进程在 DO 机器上使用 ps auxc 的三个快照:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1000 10342 87.7 65.1 32930460 657936 ? Rl 16:57 2:23 ember
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1000 10342 84.9 60.7 43572204 612668 ? Rl 16:57 2:57 ember
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1000 10342 81.2 55.2 43405220 557128 ? Rl 16:57 3:40 ember
显然,43GB 的进程大小并不全部存在于虚拟内存中,因为我们只有 3G 可用。使用 65% 的内存大小作为 RSS 是令人印象深刻的,但本身并不是问题。可用内存和可用 swap 的数量表明机器接近内存不足 (OOM) 状况,这很可能会导致某个进程被终止,并导致更新的非正常结束。
这是 free 的时间点快照:
# free
total used free shared buff/cache available
Mem: 1009140 863552 72768 6224 72820 34868
Swap: 2097144 1160628 936516
为了尝试在最接近失败的情况下捕捉情况,我使用了 vmstat 5:
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 1392140 61200 11632 76432 41 32 117 93 0 1 2 1 97 0 0
1 1 1467220 63416 324 67284 8786 20499 13178 20567 2539 8924 77 13 0 10 0
0 2 1593340 57916 1096 53832 24262 46868 29986 46889 5377 18534 44 22 0 34 0
4 0 1155632 120680 2772 86280 39111 35424 54768 37824 6987 25174 38 27 0 35 0
3 0 1102988 74096 2852 85276 11261 246 12610 271 1879 6365 86 6 0 8 0
你会注意到大量的上下文切换 (cs),大量的磁盘活动 (bi, bo) 和大量的 swap 活动 (si, so),但最重要的是 swap 使用量高达 1.6G,可用内存下降到 60M,只有 54M 的缓冲区使用量。这意味着 3G 可用虚拟内存中有约 2.6G 正在使用。这是容量的 87%。(情况可能更糟,因为我们每 5 秒才采样一次。)
请注意,我在八月份更新时,情况已经令人担忧(使用了约 2G,远未达到今天的临界状态):
# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 700404 62740 1956 48748 35 29 108 92 3 8 2 1 96 0 1
1 0 741000 65996 1880 44360 3708 11190 3982 11191 643 1437 92 4 0 3 1
1 0 834836 70452 1480 53856 528 18969 4274 18974 532 1575 93 6 0 1 0
4 1 1010144 82192 4644 44400 30065 38803 35455 39946 4432 19267 28 26 0 39 7
1 0 644116 307764 1644 55348 24406 21154 27724 21945 2551 8672 52 22 0 21 6
