Сбой перепека: как диагностировать и исправить?

Использование памяти при пересборке значительно выше, чем в обычном режиме работы. Похоже, что повторная выпечка (rebaking) также создаёт высокую нагрузку. Если это так, то любое регулярное мониторинговое наблюдение не принесёт большой пользы: мониторинг нужен именно в моменты пиковых нагрузок, которые, к счастью, возникают только при выполнении администратором определённых действий.

Когда я работал на менее мощной, более ограниченной конфигурации оборудования, я открывал второе терминальное окно, подключался к серверу по SSH и запускал команду
vmstat 5
которая показывает изменение использования памяти во времени. Следите за столбцом swpd и сравнивайте его с настроенным объёмом подкачки (swap). Обычно сбой происходит внезапно, а не постепенно, поэтому даже анализ краткосрочных трендов не даёт большой пользы.

Если у вас есть место на диске, нет никаких причин не выделять много места под swap — половину от объёма оперативной памяти или даже столько же, сколько оперативной памяти. В данном случае swap нужен именно для обработки пиковых нагрузок. В обычном режиме использования вы не должны наблюдать активности подкачки/выгрузки страниц. Опять же, можно использовать команду vmstat 5 5, чтобы получить краткосрочную картину активности подкачки (в столбцах si и so).

Вот пример:

# 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

Как видно, столбец swpd достиг пика чуть более 1,5 ГБ при настроенном объёме 2,0 ГБ. Вы также видите, что активность выгрузки страниц (so) достигла пика в том же 5-секундном интервале, а активность загрузки страниц (si) — в следующем интервале.

(Редактирование: я вижу, что у меня было настроено 2,0 ГБ подкачки, так как я ранее запускал команду free:

# free
              total        used        free      shared  buff/cache   available
Mem:        1009140      696504       78544       51784      234092      118436
Swap:       2097144      154628     1942516

Также видно, что в тот момент мне удавалось запускать Discourse только с 1 ГБ оперативной памяти.)