从今天起我的网络服务器(VPS 上的 nginx + php-fpm + mysql)非常慢。
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
CPU:(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% 的 CPU 使用率是不正常的...我该如何解决这个问题?
编辑: 我认为可能是因为 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
我通过 PDO 连接到 Mysql。如何获得更多线程?
答案1
以下是分析您的代码的链接: StackOverflow:分析 PHP 脚本的最简单方法
答案2
负载不应高于核心数量。目前您有 6 个核心,高于此数量的负载会导致响应缓慢。
看起来您的 PHP 脚本正在消耗所有 CPU 资源。对其进行分析是个好主意。
您还可以使用一些缓存来增加 PHP 处理能力。我建议您尝试一下 eaccelerator,它应该很容易启用,还可以看看 nginx 缓存选项。
我们使用的另一个很好的分析器是 xhprof:https://github.com/facebook/xhprof但需要多读一些才能使用。
祝你好运