С сегодняшнего дня мой веб-сервер (nginx + php-fpm + mysql на VPS) работает очень медленно.
htop говорит:
1 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%] Tasks: 63 total, 13 running
2 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%] Load average: 11.67 10.95 6.95
3 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%] Uptime: 00:18:40
4 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
5 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
6 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
Mem[||||||||||| 137/1280MB]
Swp[ 0/0MB]
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
6802 www 20 0 76232 12320 5716 R 27.0 0.9 0:06.48 php-fpm: pool www
7048 www 20 0 75200 12136 5700 R 52.0 0.9 0:03.64 php-fpm: pool www
6699 www 20 0 74176 11124 5700 R 27.0 0.8 0:07.36 php-fpm: pool www
7029 www 20 0 73668 10380 5676 R 42.0 0.8 0:03.52 php-fpm: pool www
6995 www 20 0 76228 12456 5644 R 42.0 1.0 0:03.98 php-fpm: pool www
6858 www 20 0 74172 10684 5620 R 35.0 0.8 0:05.52 php-fpm: pool www
6998 www 20 0 75200 12072 5620 R 37.0 0.9 0:03.95 php-fpm: pool www
7098 www 20 0 75200 12052 5616 R 42.0 0.9 0:02.33 php-fpm: pool www
7093 www 20 0 76228 12496 5612 R 37.0 1.0 0:03.02 php-fpm: pool www
7226 www 20 0 74692 11080 5588 R 32.0 0.8 0:00.66 php-fpm: pool www
ЦП: (cat / proc / cpuinfo | модель grep)
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
Я считаю, что загрузка процессора в 10 и 100% - это ненормально ... Как я могу это исправить?
Редактировать: Думаю, это могло быть из-за mysql. Вот список процессов PhpMyAdmin:
Show Full Queries ID User Host Database Command Time Status SQL query
Kill 3567 bs localhost bs Sleep 2 --- ---
Kill 3575 bs localhost bs Sleep 1 --- ---
Kill 3576 bs localhost bs Sleep 1 --- ---
Kill 3578 bs localhost bs Sleep 0 --- ---
Kill 3579 bs localhost bs Sleep 0 --- ---
Kill 3580 bs localhost bs Query 0 Writing to net SELECT count( id )
FROM messages
WHERE uid_to =345
AND unread =1
Kill 3581 bs localhost bs Sleep 0 --- ---
Kill 3582 unauthenticated user connecting host None Connect login ---
Kill 3583 phpmyadmin localhost None Sleep 0 --- ---
Kill 3584 root localhost mysql Query 0 --- SHOW PROCESSLIST
Как видите, используется только один поток, но Google Analytics говорит:
Right now
429
active visitors on site
Я подключаюсь к Mysql через PDO. Как я могу получить больше тем?
Вот ссылка на профиль вашего кода: StackOverflow: самый простой способ профилировать PHP-скрипт
Нагрузка не должна быть больше количества ядер. В настоящее время у вас 6, более высокая нагрузка приведет к медленным откликам.
Похоже, что ваши PHP-скрипты потребляют все ресурсы процессора. Их профилирование было бы хорошей идеей.
Вы также можете увеличить обработку PHP с помощью некоторого кэширования. Я бы порекомендовал попробовать eaccelerator, который должно быть легко включить, а также взглянуть на параметры кеширования nginx.
Еще один хороший профилировщик, который мы использовали, был xhprof: https://github.com/facebook/xhprof но для использования требуется немного больше чтения.
удачи