php – 我的服务器发生了什么?高负载,大量空闲CPU时间,低磁盘利用率

我运营一个网站,并向订阅者发送合法的选择性每日电子邮件简报. Web托管和电子邮件发送都由同一台机器完成.

我有大约10万订阅者选择了我的每日电子邮件简报.我的PHP脚本在最近才向所有人发送邮件方面做得非常好,但随着列表的增长,我无法跟上.

当我运行顶部时,我的负载非常高 – 通常至少为6或7,有时高达15 – 尽管我只有两个CPU.但是,当我运行sar时,我的CPU平均闲置约30%的时间.所以,似乎我不受CPU限制.当我运行iostat时,似乎我没有磁盘绑定,因为我的每个设备的%util都非常低(不超过5%).

鉴于我似乎没有CPU绑定或磁盘绑定,为什么顶级报告如此高负载?

另外,由于我似乎没有CPU绑定或磁盘绑定,为什么我的电子邮件发送脚本无法跟上?

这是我在跑步时看到的:

top - 11:33:28 up 74 days, 18:49,  2 users,  load average: 7.65, 8.79, 8.28
Tasks: 168 total,   5 running, 162 sleeping,   0 stopped,   1 zombie
Cpu(s): 38.9%us, 58.6%sy,  0.8%ni,  0.0%id,  0.7%wa,  0.2%hi,  0.8%si,  0.0%st
Mem:   3083012k total,  2144436k used,   938576k free,   281136k buffers
Swap:  2048248k total,    39164k used,  2009084k free,  1470412k cached

这是我在运行iostat -mx时看到的内容:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          34.80    1.20   55.24    0.37    0.00    8.38

Device:         rrqm/s   wrqm/s   r/s   w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.19    71.70  1.59 29.45     0.02     0.07     5.90     0.55   17.82   1.16   3.59
sda1              0.00     0.00  0.00  0.00     0.00     0.00     7.10     0.00   13.80  13.72   0.00
sda2              0.05    50.45  1.13 24.57     0.01     0.29    24.25     0.35   13.43   1.15   2.97
sda3              0.05    10.17  0.20  2.33     0.01     0.05    43.75     0.05   20.96   2.45   0.62
sda4              0.00     0.00  0.00  0.00     0.00     0.00     2.00     0.00   70.50  70.50   0.00
sda5              0.07     0.22  0.03  0.07     0.00     0.00    32.84     0.08  856.19   8.03   0.08
sda6              0.02     5.45  0.03  0.72     0.00     0.02    67.55     0.02   26.72   5.26   0.39
sda7              0.00     1.56  0.00  0.42     0.00     0.01    38.04     0.00    8.88   5.84   0.24
sda8              0.01     3.84  0.20  1.35     0.00     0.02    28.55     0.05   31.90   4.08   0.63

这是我在运行sar时看到的内容:

09:40:02 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle
09:50:01 AM       all     30.59      1.01     49.80      0.23      0.00     18.37
10:00:08 AM       all     31.73      0.92     51.66      0.13      0.00     15.55
10:10:06 AM       all     30.43      0.99     48.94      0.26      0.00     19.38
10:20:01 AM       all     29.58      1.00     47.76      0.25      0.00     21.42
10:30:01 AM       all     29.37      1.02     47.30      0.18      0.00     22.13
10:40:06 AM       all     32.50      1.01     52.94      0.16      0.00     13.39
10:50:01 AM       all     30.49      1.00     49.59      0.15      0.00     18.77
11:00:01 AM       all     29.43      0.99     47.71      0.17      0.00     21.71
11:10:07 AM       all     30.26      0.93     49.48      0.83      0.00     18.50
11:20:02 AM       all     29.83      0.81     48.51      1.32      0.00     19.52
11:30:06 AM       all     31.18      0.88     51.33      1.15      0.00     15.47
Average:          all     26.21      1.15     42.62      0.48      0.00     29.54

以下是在我碰巧运行top -c的特定时间列出的少数几个进程:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                      
 8180 mysql     16   0 57448  19m 2948 S 26.6  0.7   4702:26 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/bristno.pid --skip-external-locking                          
26956 brristno  17   0     0    0    0 Z  8.0  0.0   0:00.24 [php] <defunct>                                                                                                                                                               
26958 brristno  17   0 94408  43m  37m R  5.0  1.4   0:00.15 /usr/bin/php /home/brristno/public_html/dbv.php                                                                                                                               
22852 nobody    16   0  9628 2900 1524 S  0.7  0.1   0:00.17 /usr/local/apache/bin/httpd -k start -DSSL                                                                                                                                    
 8591 brristno  34  19 96896  13m 6652 S  0.3  0.4   0:29.82 /usr/local/bin/php /home/brristno/bin/mailer.php 1qwqyb6 i0gbor                                                                                                               
24469 nobody    16   0  9628 2880 1508 S  0.3  0.1   0:00.08 /usr/local/apache/bin/httpd -k start -DSSL                                                                                                                                    
25495 nobody    15   0  9628 2876 1500 S  0.3  0.1   0:00.06 /usr/local/apache/bin/httpd -k start -DSSL                                                                                                                                    
26149 nobody    15   0  9628 2864 1504 S  0.3  0.1   0:00.04 /usr/local/apache/bin/httpd -k start -DSSL      

谢谢你,德米特里!

1)我已经有一个脚本取消订阅过去一个月内至少退回五次的电子邮件地址,所以希望这会使我的列表相对受限于活动的电子邮件地址.

2)我正在使用exim 4.69.我的配置文件是

/etc/exim.conf

我的日志文件位于:

在/ var /日志/ exim_mainlog
在/ var /日志/ exim_paniclog
在/ var /日志/ exim_rejectlog

另外,当我查看/etc/syslog.conf时,我看到以下内容:

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog

我不知道 – / var / log / maillog开头的“ – ”是什么意思,但是当我查看该文件时,很明显很多东西都被记录在那里.

此外,此文件中还记录了很多内容:

在/ var /日志/ exim_mainlog

我之后添加到/etc/exim.conf这一行:

no_message_logs

我认为这会禁用邮件日志记录(我确实重启了exim),但是当我查看/ var / log / maillog和/ var / log / exim_mainlog时,两个文件仍然在接收新的日志条目.

问题:如何禁用大多数/所有exim日志记录?

3)当我查看/ var / log / exim_paniclog时,我看到很多像这样的条目:

2010-12-19 04:03:32 1PUFB1-0006xZ-GF User 0 set for local_delivery transport is on the never_users list

环顾四周后,似乎这意味着exim正在尝试传递到根电子邮件地址.在尽可能少地使用CPU资源的情况下,将这些邮件传递到root的最佳方法是什么?

最佳答案
如上所述,负载平均值与运行队列中的等待进程数相关.如果这些进程中的每一个都没有什么工作要做,并且可以快速释放处理器,那么您可以处理比每个CPU经验法则更大的负载平均值.

邮件就是这个的完美例子,每个进程都需要CPU发送消息,但非常非常少.我见过邮件系统运行sendmail的平均负载在25到35之间,系统仍然是交互式的,工作正常.

标记

转载注明原文:php – 我的服务器发生了什么?高负载,大量空闲CPU时间,低磁盘利用率 - 代码日志