VPS работает медленно, несмотря на нехватку памяти и cpu usages

в последнее время веб-сайт, размещенный на VPS, иногда становится очень труднодоступным, и я пытаюсь понять, почему. Я заметил следующие вещи:

  • Использование ЦП и памяти очень низкое (всегда <15%, если суммировать все, но обычно даже меньше);
  • веб-сайт загружается очень медленно, но всякий раз, когда я подключаюсь к VPS через SSH, он работает очень плавно;
  • Я проверил активность в phpMyAdmin, всякий раз, когда происходят эти замедления, страница статистики требует много времени для обновления (до 20-30 секунд, в то время как он установлен на 5 секунд - количество запросов в секунду, похоже, не увеличивается);
  • похоже, это не зависит от количества людей в сети.

Учитывая эти наблюдения, что должен ли я попытаться проверить / отладить, чтобы найти решение?

Спасибо!

0
задан 11 March 2020 в 10:28
1 ответ

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

  • iostat из пакета sysstat диагностирует, является ли это проблемой ввода-вывода

  • Запустите strace -fp of process, пока вы выполняете медленный запрос. Ctrl-c strace, когда закончите. Наблюдайте за системными вызовами во время медленного запроса. Скорее всего, он остановится на одном, а затем продолжится. strace сбрасывает тонны информации, поэтому вы можете использовать -o. Он также может сбрасывать большой объем информации из других подключений, если они являются параллельными и обрабатываются одним и тем же процессом в другом потоке и т.п.

  • Увеличьте количество журналов в приложении / базе данных и попытайтесь сузить проблему

Я предполагаю, что будь то обратный поиск источника соединений в коде или в журнале. Если это делается синхронно, каждое соединение будет ждать ответа от DNS-сервера и сократит ваше время ответа.

Другая возможность состоит в том, что вы используете mysql и myisam для его типа хранилища с большим количеством одновременных записей. Myisam выполняет блокировку на уровне таблицы (или, по крайней мере, раньше). Вся таблица будет заблокирована для записи до тех пор, пока запись не будет завершена с ее запросом / записью. Каждое соединение должно будет по очереди ждать записи в базу данных.

0
ответ дан 30 March 2020 в 01:30

Теги

Похожие вопросы