Как диагностировать замедление?

В последнее время мой сайт стал немного и внезапно медленнее загружать страницы. У меня возникла проблема: была создана резервная копия, которая превысила доступное место на томе DigitalOcean, что привело к остановке сайта. С тех пор мне было трудно восстановить работу сайта. Эти события могут быть связаны по времени. В настоящее время сайт, кажется, находится в стабильном состоянии, но работает медленнее, чем я привык.

Я мог бы рассказать подробнее о том, что произошло, но предпочитаю задать более общий вопрос. Какие существуют методы диагностики причины замедления? Мой Droplet в среднем использует 20% процессорного времени, так что, похоже, ресурсов достаточно (4 ГБ оперативной памяти / 2 AMD vCPU / 80 ГБ дискового пространства, около 15 тысяч просмотров страниц в день).

Буду признателен за любые советы.

Моей первой точкой отправления была бы команда
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
 1  0 475136 144304  20296 1786100    2    3  2622   447   44   50 19  3 72  1  4
 0  0 475136 143076  20304 1785312    0    0    65    25  622  584  2  1 95  0  1
 0  0 475136 141080  20456 1789144    0    0   800     3  459  473  2  1 96  0  1
 3  0 475136 143092  20572 1783408    0   17 11598    51  733  966 14  6 67  2 12
 0  0 475648 134688  20376 1791036    0   81 38915   394 1323 1784 10  8 61  8 13

Спасибо! Если бы у вас не хватало памяти, значения в кэше были бы малы, а при интенсивной подкачке столбцы si и so были бы велики. Но в данном случае это не так.

Мы видим значительный пик в bi и bo, что обычно указывает на активность диска. Интересно, не происходит ли где-то сборка, восстановление или сканирование чего-либо.

Попробуйте запустить
ps auxrc
каждые пять секунд в течение минуты или около того, чтобы попытаться поймать активный процесс в момент его работы.

Существуют и другие утилиты, которые могут быть еще не установлены: возможно, стоит поискать «Как мониторить ввод-вывод диска в системе Linux» или что-то подобное.

Стоит отметить, что если у вас есть сомнения в целостности вашей системы, самым быстрым решением может стать её восстановление из резервной копии. Но обязательно имейте копию резервной копии в другом месте, а лучше две, на случай аварии. И, в идеале, выполните установку на новом экземпляре, оставив существующий в рабочем состоянии, пока новый не заработает корректно.

Это отличный совет, спасибо!

У меня потребление памяти на уровне 80%. Это нормально? Падение связано с тем, что я остановил и перезапустил приложение через лаунчер.

droplet: 4 ГБ памяти / 2 AMD vCPU / 80 ГБ диска

Я создал новый droplet и восстановил резервную копию форума (без изображений), но наблюдаю аналогичное поведение.

Вывод htop, отсортированный по памяти:

80% не кажется мне проблемным.

Более интересно то, что у вас много процессов sidekiq, но я вижу аннотацию «0 из 5 занято» — у вас их больше пяти. Также у вас, похоже, много потоков unicorn.

Я предлагаю создать новую тему здесь, приложив вывод htop, включая ваш конфигурационный файл yml, чтобы показать, меняли ли вы количество процессов unicorn. Спросите, выглядит ли этот набор процессов разумным.

У меня очень похожий htop на том же VPS (хотя процессор другой), и я ничего не менял по умолчанию.

Не зная деталей, я бы сказал, что это показывает лишь одно: в тот момент не было слишком много трафика, если вообще был.

Ага, я должен был проверить свой htop: очень похоже.

Ещё одна совсем другая идея для первоначального наблюдения «замедления» — активировать мини-профайлер с помощью Alt-P, затем открыть типичную большую страницу на вашем форуме и посмотреть, какие запросы выполняются и сколько времени они занимают, кликнув на цифру времени, которая появляется в правом верхнем углу.

Мне удалось выполнить apt upgrade и пересборку. Эта проблема: Pups error on rebuild 🐕 мешала мне пересобирать систему в течение некоторого времени.

После пересборки всё кажется улучшенным. Однако мне не нравится полагаться на ощущения; в данном случае я предпочёл бы иметь аналитику и измеримые данные. Спасибо за советы @Ed_S, они пригодятся для дальнейшего мониторинга.

Интересует, возможно ли собрать часть этих данных профилирования и отображать «здоровье» экземпляра через админ-панель. Возможно, это идея для будущего плагина или функции ядра?