需要帮助解决 PHP-fpm 的高 CPU 使用率问题

需要帮助解决 PHP-fpm 的高 CPU 使用率问题

有个问题让我抓狂。在我尝试修复 VPS 的 CPU 使用率问题的第二天,CPU 负载从 60% 增长到了 150%,我不知道是什么原因造成的。请帮帮我。

我在一台 1024 的 Linode 上安装了一份 mediawiki。wiki 运行在 Niginx + PHP-fpm + MySql 上。wiki 的流量不大,每天只有大约 4000 个请求,大部分来自 Google 和 Bing 机器人。之前它一直使用大约 60%(Linode 上总共 400%)的 CPU。我觉得有点高,所以两天前,我试图解决这个问题(不知道等待我的是什么)。我什么也没做,只是在 wiki 的配置文件中添加了一个新的空行,这会更改配置文件的修改时间,然后所有缓存的页面文件都将设置为无效。我以前做过这件事,这会导致 CPU 使用率过高,但通常只需几个小时就可以让一切恢复正常。这次不是,我的 CPU 使用率已经两天多的时间保持在 150% 左右了。

php-fpm 占用了大部分 CPU 资源。三个核心使用 100% 并不罕见。我以前没见过这种情况。Linode 上还有其他网站,但应该是 wiki。因为如果我离线 wiki,CPU 使用率很快就会降回 40% 左右。

那天我也复制了php-fpm.conf,并打开了它,但没有改变它。

我不知道我做错了什么。我在这里寻求帮助,以免自己发疯!!!它是 php-fpm。有没有办法找出它在做什么?我的意思是哪些脚本相关以及正在运行哪些函数代码?

顶部:

top - 06:34:33 up 10 days,  4:23,  2 users,  load average: 1.10, 1.24, 1.37
Tasks:  76 total,   4 running,  72 sleeping,   0 stopped,   0 zombie
Cpu(s): 61.1%us,  3.1%sy,  0.0%ni, 32.8%id,  2.9%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   1028684k total,   945192k used,    83492k free,    89580k buffers
Swap:   524284k total,    18084k used,   506200k free,   530380k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                 
26721 www-data  20   0  208m  54m  34m R   99  5.4   0:09.07 /opt/php5/sbin/php-fpm --fpm-config /opt/php5/etc/php-fpm.conf                                          
26592 www-data  20   0  207m  45m  26m R   91  4.5   0:12.77 /opt/php5/sbin/php-fpm --fpm-config /opt/php5/etc/php-fpm.conf                                          
26706 www-data  20   0  196m  43m  34m S   47  4.3   0:15.19 /opt/php5/sbin/php-fpm --fpm-config /opt/php5/etc/php-fpm.conf                                          
26583 www-data  20   0  197m  45m  35m S   33  4.5   0:19.08 /opt/php5/sbin/php-fpm --fpm-config /opt/php5/etc/php-fpm.conf                                          
26787 www-data  20   0  206m  36m  18m R   25  3.7   0:00.41 /opt/php5/sbin/php-fpm --fpm-config /opt/php5/etc/php-fpm.conf                                          
26661 www-data  20   0  207m  46m  26m S   13  4.6   0:19.87 /opt/php5/sbin/php-fpm --fpm-config /opt/php5/etc/php-fpm.conf                                          
 1971 mysql     20   0  155m  57m 3952 S    8  5.7 383:57.81 /usr/sbin/mysqld                                                                                        
  242 root      20   0     0    0    0 S    1  0.0   0:51.36 [kworker/3:1]                                                                                           
 5711 root      20   0  139m  95m  580 S    1  9.5   0:41.30 /usr/local/bin/memcached -d -u root -m 128 -p 11211                                                     
19463 root      20   0  190m 3984 1284 S    1  0.4   0:02.66 /opt/php5/sbin/php-fpm --fpm-config /opt/php5/etc/php-fpm.conf                                          
29100 www-data  20   0 10928 5540  820 S    1  0.5   4:49.05 nginx: worker process

vmstat 30

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  16912  81456  90784 554172    0    0     4     6    3    2 11  1 87  1
 0  0  16912  78036  91000 555356    0    0    38    34 1397  375 12  1 87  0
 4  0  16912  31776  91528 557508    0    0    78    42 3197  487 45  1 52  1
 1  0  16912  83356  91768 558576    0    0    35    56 2608  449 32  1 67  1
 1  0  16912  81548  92040 559720    0    0    41    31 1243  432  8  1 91  1
 2  0  16912  53056  92332 562744    0    0   105    33 2013  581 17  1 81  1
 2  0  16912  73236  92552 564844    0    0    68    36 1968  615 16  1 82  1
 0  0  16912  91612  92904 566676    0    0    69    35 1845  692 13  1 85  1
 1  0  16912  71248  93180 568428    0    0    58    33 1952  604 15  1 82  1
 1  0  16868  55952  93516 572660    1    0   144    42 1801  637 12  1 86  1
 2  0  16868  48324  94416 577844    0    0   189    66 2058  702 17  1 80  2
 1  0  16928  58644  94592 578184    0    2   160    49 2578  723 25  1 70  3
 5  0  16928  22600  94980 580568    0    0    89    32 1496  361 13  0 85  1
 0  0  16988  49256  94500 576396    0    2    41    37 1601  426 14  1 85  0
 5  0  18084  24336  86032 502748    0   37    83    68 2989  562 42  1 56  0
 1  0  18084 123604  86376 506996    0    0   118    41 2201  573 22  1 76  1
 2  0  18084 126984  86752 508876    0    0    64    53 1620  490 13  1 85  1
 2  0  18084 103104  87148 510768    0    0    71    37 2757  602 33  1 64  1

答案1

尝试使用strace -p 26721来查看进程正在做什么。要查看哪个文件句柄是哪个,请使用lsof -p 26721

答案2

您可以从减少 Google 和 Bing 请求开始... 您是否设置了 robots.txt?从抓取中排除 ScriptPath,以便只索引规范页面 URL,而不索引任何带有 api.php 或 index.php 参数的 URL。如果需要,还可以设置抓取延迟。

许多 MediaWiki 网站由于一些小的配置错误而被搜索引擎减慢了速度。

答案3

在我的例子中,运行 top 之后,确定了占用 CPU(用户时间为 11.8%us)的 top 的 pid(3174):

top - 12:43:19 up  1:35,  2 users,  load average: 0.97, 1.05, 1.11
Tasks: 265 total,   2 running, 263 sleeping,   0 stopped,   0 zombie
Cpu(s): 11.8%us,  0.4%sy,  0.0%ni, 87.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16333780k total, 11207464k used,  5126316k free,     6464k buffers
Swap:  2097144k total,        0k used,  2097144k free, 10078524k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3174 nginx     20   0  705m  49m  23m S 33.5  0.3   1:12.21 php-fpm
 3173 nginx     20   0  711m  56m  25m S 28.5  0.4   1:08.62 php-fpm
 3187 nginx     20   0  711m  49m  17m S 26.2  0.3   1:00.80 php-fpm
 3191 nginx     20   0  717m  59m  21m R  6.6  0.4   1:04.29 php-fpm

运行以下命令来识别导致故障的因素:

strace -ffttTo /tmp/strace.out -p 3174

该文件/tmp/strace.out.3174充满了以下几行

12:55:17.417008 open("/var/log/php-fpm/www-error.log", O_WRONLY|O_CREAT|O_APPEND, 0644) = -1 EACCES (Permission denied) <0.000024>
12:55:17.417120 write(2, "NOTICE: PHP message: PHP Depreca"..., 186) = 186 <0.000016>

运行后:

chown -R nginx:root /var/log/php-fpm

问题已经解决。

答案4

CPU 处于 %user 状态,尝试在 top 输出中找到有关消耗最多资源的 PID 的更多信息。如前所述,在其上运行 strace -ffttTo /tmp/strace.out -p 以了解它卡在哪里或连续系统调用需要多少时间。如果有延迟,您可以从那里识别它。

此外,lsof、fuser 也是可行的选择。

相关内容