Какая техника, чтобы найти узкое место?
Я установил 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 ГБ виртуальной памяти, которая фактически находится на жестком диске. Чрезмерное переключение означает, что пользователи ждут обслуживания процессов, чья память находится на диске, что может объяснить ту медлительность, которую вы наблюдаете. Но без дополнительной информации мы ничего не можем поделать.