Какая техника, чтобы найти узкое место?

Я установил WordPress на Digital Ocean для самой маленькой капли в течение нескольких месяцев.

Недавно мой блог стал вирусным (более 1000 публикаций в Facebook), а на ответ сервера потребовалось более 50 секунд (Google Analytics показывает, что в моем блоге одновременно около 40 человек в течение почти целого дня).

Я спрашиваю команду поддержки Digital Ocean, и они сказали мне, что моя 512 МБ ОЗУ слишком мала.

Но я использую 'free -m' и вижу

             total       used       free     shared    buffers     cached
Mem:           490        465         24         64         94        136
-/+ buffers/cache:        234        256
Swap:          999          0        999

Итак, я думаю, что у меня есть 256 МБ памяти?

Я сказал им, и они сказали: "Хотя он может показывать 100 МБ свободной памяти, вероятно, только после того, как он убил некоторые службы для экономии памяти".

Но я использую "верх" и вижу

%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

Я обнаружил, что CPU остается идентификатором 92~100%, поэтому я думаю, что мой процессор не занят.

Так как я могу найти узкое место?

Я хочу знать, что является узким местом, прежде чем платить больше за модернизацию.

2 ответа

Решение

При рассмотрении проблем с производительностью важно помнить "большую четверку":
-ЦПУ
-Объем памяти
-дисков
-Network

Я большой поклонник использования atop для использования процессора и памяти, iotop для использования диска, и iftop для сетевого трафика. Помните, что эти показатели полезны только в режиме реального времени, когда сервер находится под нагрузкой и испытывает эту проблему.

Любая из вышеперечисленных 4 может вызвать существенную задержку обработки при запросе страницы. Вы упомянули, что этот сайт является блогом, но не упомянули, генерируется ли контент динамически, что добавило бы еще один слой к этому уравнению - базу данных. Длительное время ответа на запрос может вызвать эффект проскальзывания, который приводит к длительной загрузке страницы.

Единственный способ проверить это наверняка - запустить тест, такой как "ab", и проверить количество или посетителей вашего сайта - и устранить неполадки, происходящие на сервере в это время. Запустите что-то вроде:

$ ab -n 10000 -c 50 http://yoursite.com/

с вашего компьютера или другого сервера.

Это ударит по вашему серверу 10000 запросов, но не более 50 одновременных. Перед началом теста запустите htop на своем веб-сервере и наблюдайте за тем, как появляются новые процессы, а также меняются нагрузка на память и ЦП.

Поскольку вы не объяснили настройку своего веб-сервера (используете ли вы apache/mod_php или nginx/php-fpm или какую-либо другую комбинацию) - мы даже не можем даже догадываться о потреблении памяти на пользователя.

У меня сложилось впечатление, что с ростом числа пользователей ваш сервер начинает обмениваться и использовать дополнительные 1 ГБ виртуальной памяти, которая фактически находится на жестком диске. Чрезмерное переключение означает, что пользователи ждут обслуживания процессов, чья память находится на диске, что может объяснить ту медлительность, которую вы наблюдаете. Но без дополнительной информации мы ничего не можем поделать.

Другие вопросы по тегам