Apache/MySQL 服务器块

Apache/MySQL 服务器块

我管理一台运行 Ubuntu 12.04 的服务器。

在过去的几周里,服务器开始出现故障,我想不出有什么重大的变化。

模式如下:服务器开始报告 MySQL 错误。这些错误可能是以下一种或多种:

  • ADODB 错误:在“等待初始通信包”时与 MySQL 服务器失去连接,系统错误:95
  • mysqli::mysqli():(HY000/2013):在“发送身份验证信息”时与 MySQL 服务器失去连接,系统错误:32
  • 太多联系

这种情况通常(但并非总是)发生在晚上,最终服务器变得完全无法访问,我唯一的选择就是粗暴地重新启动它。

我现在添加了一个 cron 作业,每 15 分钟运行一次“ps -elf”来显示正在发生的事情,这就是问题开始时它所显示的内容:

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 -  6051 poll_s Nov05 ?        00:00:00 /sbin/init
1 S root         2     0  0  80   0 -     0 kthrea Nov05 ?        00:00:00 [kthreadd]
1 S root         3     2  0  80   0 -     0 run_ks Nov05 ?        00:00:03 [ksoftirqd/0]
1 S root         4     2  0  80   0 -     0 worker Nov05 ?        00:00:03 [kworker/0:0]
1 S root         6     2  0 -40   - -     0 cpu_st Nov05 ?        00:00:00 [migration/0]
5 S root         7     2  0 -40   - -     0 watchd Nov05 ?        00:00:01 [watchdog/0]
1 S root         8     2  0 -40   - -     0 cpu_st Nov05 ?        00:00:00 [migration/1]
1 S root        10     2  0  80   0 -     0 run_ks Nov05 ?        00:00:04 [ksoftirqd/1]
1 S root        11     2  0  80   0 -     0 worker Nov05 ?        00:00:05 [kworker/0:1]
5 S root        12     2  0 -40   - -     0 watchd Nov05 ?        00:00:01 [watchdog/1]
1 S root        13     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [cpuset]
1 S root        14     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [khelper]
5 S root        15     2  0  80   0 -     0 devtmp Nov05 ?        00:00:00 [kdevtmpfs]
1 S root        16     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [netns]
1 S root        17     2  0  80   0 -     0 worker Nov05 ?        00:00:00 [kworker/u:1]
1 S root        18     2  0  80   0 -     0 bdi_sy Nov05 ?        00:00:00 [sync_supers]
1 S root        19     2  0  80   0 -     0 bdi_fo Nov05 ?        00:00:00 [bdi-default]
1 S root        20     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [kintegrityd]
1 S root        21     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [kblockd]
1 S root        22     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [ata_sff]
1 S root        23     2  0  80   0 -     0 hub_th Nov05 ?        00:00:00 [khubd]
1 S root        24     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [md]
1 S root        25     2  0  80   0 -     0 worker Nov05 ?        00:00:02 [kworker/1:1]
1 S root        26     2  0  80   0 -     0 watchd Nov05 ?        00:00:00 [khungtaskd]
1 D root        27     2  0  80   0 -     0 get_re Nov05 ?        00:00:08 [kswapd0]
1 S root        28     2  0  85   5 -     0 ksm_sc Nov05 ?        00:00:00 [ksmd]
1 S root        29     2  0  99  19 -     0 khugep Nov05 ?        00:00:00 [khugepaged]
1 S root        30     2  0  80   0 -     0 fsnoti Nov05 ?        00:00:00 [fsnotify_mark]
1 S root        31     2  0  80   0 -     0 ecrypt Nov05 ?        00:00:00 [ecryptfs-kthrea]
1 S root        32     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [crypto]
1 S root        40     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [kthrotld]
1 S root        41     2  0  80   0 -     0 scsi_e Nov05 ?        00:00:00 [scsi_eh_0]
1 S root        42     2  0  80   0 -     0 scsi_e Nov05 ?        00:00:00 [scsi_eh_1]
1 S root        44     2  0  80   0 -     0 worker Nov05 ?        00:00:00 [kworker/u:3]
1 S root        63     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [devfreq_wq]
1 S root       216     2  0  80   0 -     0 worker Nov05 ?        00:00:07 [kworker/1:2]
1 S root       222     2  0  80   0 -     0 bdi_wr Nov05 ?        00:00:05 [flush-8:0]
1 S root       223     2  0  80   0 -     0 kjourn Nov05 ?        00:00:31 [jbd2/sda1-8]
1 S root       224     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [ext4-dio-unwrit]
1 S root       331     1  0  80   0 -  4308 poll_s Nov05 ?        00:00:00 upstart-udev-bridge --daemon
5 S root       346     1  0  80   0 -  5400 ep_pol Nov05 ?        00:00:00 /sbin/udevd --daemon
5 S syslog     355     1  0  80   0 - 62367 poll_s Nov05 ?        00:00:05 rsyslogd -c5
5 S root       440   346  0  80   0 -  5399 ep_pol Nov05 ?        00:00:00 /sbin/udevd --daemon
5 S root       441   346  0  80   0 -  5399 ep_pol Nov05 ?        00:00:00 /sbin/udevd --daemon
1 S root       455     2  0  80   0 -     0 balloo Nov05 ?        00:00:00 [vballoon]
1 S root       458     2  0  60 -20 -     0 rescue Nov05 ?        00:00:00 [kpsmoused]
1 S root       529     1  0  80   0 -  3797 poll_s Nov05 ?        00:00:00 upstart-socket-bridge --daemon
4 S root       599     1  0  80   0 - 12508 poll_s Nov05 ?        00:00:00 /usr/sbin/sshd -D
4 S root       632     1  0  80   0 -  5859 inet_c Nov05 ?        00:00:00 /usr/sbin/vsftpd
4 S root       653     1  0  80   0 -  3993 n_tty_ Nov05 tty4     00:00:00 /sbin/getty -8 38400 tty4
4 S root       656     1  0  80   0 -  3993 n_tty_ Nov05 tty5     00:00:00 /sbin/getty -8 38400 tty5
4 S root       663     1  0  80   0 -  3993 n_tty_ Nov05 tty2     00:00:00 /sbin/getty -8 38400 tty2
4 S root       664     1  0  80   0 -  3993 n_tty_ Nov05 tty3     00:00:00 /sbin/getty -8 38400 tty3
4 S root       669     1  0  80   0 -  3993 n_tty_ Nov05 tty6     00:00:00 /sbin/getty -8 38400 tty6
1 S root       672     1  0  80   0 -  1082 poll_s Nov05 ?        00:00:00 acpid -c /etc/acpi/events -s /var/run/acpid.socket
5 S root       675     1  0  80   0 -  4778 hrtime Nov05 ?        00:00:02 cron
1 S daemon     676     1  0  80   0 -  4227 hrtime Nov05 ?        00:00:00 atd
4 S root       823     1  0  80   0 -  6277 ep_pol Nov05 ?        00:00:02 /usr/lib/postfix/master
4 S postfix    830   823  0  80   0 -  6834 ep_pol Nov05 ?        00:00:00 qmgr -l -t fifo -u
1 S root       875     1  0  80   0 - 83556 poll_s Nov05 ?        00:00:16 /usr/sbin/apache2 -k start
4 S root      1028     1  0  80   0 -  3993 n_tty_ Nov05 tty1     00:00:00 /sbin/getty -8 38400 tty1
5 D www-data  9931   875  0  80   0 - 97396 get_re Nov07 ?        00:00:13 /usr/sbin/apache2 -k start
5 S www-data 10104   875  0  80   0 - 97049 unix_s Nov07 ?        00:00:07 /usr/sbin/apache2 -k start
5 S www-data 10121   875  0  80   0 - 95995 unix_s 00:01 ?        00:00:07 /usr/sbin/apache2 -k start
5 S www-data 10197   875  0  80   0 - 94013 unix_s 00:26 ?        00:00:07 /usr/sbin/apache2 -k start
5 D www-data 10198   875  0  80   0 - 95983 get_re 00:29 ?        00:00:06 /usr/sbin/apache2 -k start
5 D www-data 10199   875  0  80   0 - 97456 get_re 00:29 ?        00:00:07 /usr/sbin/apache2 -k start
5 S www-data 10288   875  0  80   0 - 97365 unix_s 00:59 ?        00:00:05 /usr/sbin/apache2 -k start
5 S www-data 10539   875  0  80   0 - 98309 unix_s 02:26 ?        00:00:03 /usr/sbin/apache2 -k start
5 S www-data 10549   875  0  80   0 - 94254 unix_s 02:32 ?        00:00:03 /usr/sbin/apache2 -k start
5 S www-data 10583   875  0  80   0 - 95278 unix_s 02:42 ?        00:00:02 /usr/sbin/apache2 -k start
4 S postfix  10641   823  0  80   0 -  6794 ep_pol 03:03 ?        00:00:00 pickup -l -t fifo -u -c
5 D www-data 10705   875  0  80   0 - 93192 get_re 03:21 ?        00:00:01 /usr/sbin/apache2 -k start
5 D www-data 10706   875  0  80   0 - 96563 get_re 03:21 ?        00:00:01 /usr/sbin/apache2 -k start
5 S www-data 10707   875  0  80   0 - 93150 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10708   875  0  80   0 - 95042 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10709   875  0  80   0 - 96666 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10710   875  0  80   0 - 94554 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10711   875  0  80   0 - 96538 get_re 03:21 ?        00:00:01 /usr/sbin/apache2 -k start
5 D www-data 10713   875  0  80   0 - 92354 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10714   875  0  80   0 - 89009 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10715   875  0  80   0 - 93274 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10716   875  0  80   0 - 89289 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10717   875  0  80   0 - 94794 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10718   875  0  80   0 - 92354 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10719   875  0  80   0 - 92354 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10720   875  0  80   0 - 89168 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10723   875  0  80   0 - 89168 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10724   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10725   875  0  80   0 - 89168 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10726   875  0  80   0 - 89479 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10727   875  0  80   0 - 92354 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10728   875  0  80   0 - 89168 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10729   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10732   875  0  80   0 - 89077 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10733   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10735   875  0  80   0 - 89485 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10736   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10737   875  0  80   0 - 89481 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10738   875  0  80   0 - 88879 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10739   875  0  80   0 - 89289 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10740   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10741   875  0  80   0 - 89099 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10743   875  0  80   0 - 89009 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10744   875  0  80   0 - 89009 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10745   875  0  80   0 - 89481 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10746   875  0  80   0 - 89168 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10747   875  0  80   0 - 89009 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10748   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10749   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10750   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10751   875  0  80   0 - 89481 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10752   875  0  80   0 - 89481 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10753   875  0  80   0 - 92890 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10754   875  0  80   0 - 89485 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10755   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10756   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10757   875  0  80   0 - 89035 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10758   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10759   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10760   875  0  80   0 - 89481 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10761   875  0  80   0 - 89289 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10762   875  0  80   0 - 89168 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10763   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10764   875  0  80   0 - 88943 unix_s 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10765   875  0  80   0 - 88893 get_re 03:21 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10766   875  0  80   0 - 89095 get_re 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10767   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10768   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10769   875  0  80   0 - 89168 get_re 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10770   875  0  80   0 - 89168 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10771   875  0  80   0 - 88879 get_re 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10772   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10773   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10774   875  0  80   0 - 88045 get_re 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10775   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10776   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10777   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10779   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10780   875  0  80   0 - 89168 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10781   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10782   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10786   875  0  80   0 - 89035 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10787   875  0  80   0 - 89168 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10788   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10789   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10790   875  0  80   0 - 89485 get_re 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10791   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10792   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10799   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10800   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10806   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10807   875  0  80   0 - 89035 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10809   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10810   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10811   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10812   875  0  80   0 - 86561 get_re 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10813   875  0  80   0 - 87478 get_re 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10814   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10815   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10816   875  0  80   0 - 88943 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10817   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10818   875  0  80   0 - 88959 get_re 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10819   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10820   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10821   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10823   875  0  80   0 - 89009 unix_s 03:22 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10824   875  0  80   0 - 89009 unix_s 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10825   875  0  80   0 - 88567 get_re 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10831   875  0  80   0 - 89009 unix_s 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10832   875  0  80   0 - 89009 unix_s 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10833   875  0  80   0 - 88045 get_re 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10837   875  0  80   0 - 89009 unix_s 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10838   875  0  80   0 - 89009 unix_s 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10839   875  0  80   0 - 88630 get_re 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10840   875  0  80   0 - 89009 unix_s 03:23 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10841   875  0  80   0 - 87024 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10842   875  0  80   0 - 88112 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10843   875  0  80   0 - 86190 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10844   875  0  80   0 - 89009 unix_s 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10845   875  0  80   0 - 87925 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10846   875  0  80   0 - 88895 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10847   875  0  80   0 - 88381 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10849   875  0  80   0 - 88047 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10851   875  0  80   0 - 87154 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data 10852   875  0  80   0 - 89009 unix_s 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10853   875  0  80   0 - 88448 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10854   875  0  80   0 - 87480 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10855   875  0  80   0 - 87797 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10856   875  0  80   0 - 88895 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10857   875  0  80   0 - 86494 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10867   875  0  80   0 - 88112 get_re 03:24 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10868   875  0  80   0 - 85396 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
1 S root     10869   675  0  80   0 -  8461 wait   03:25 ?        00:00:00 CRON
1 S root     10870   675  0  80   0 -  8461 wait   03:25 ?        00:00:00 CRON
5 D www-data 10871   875  0  80   0 - 87284 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10872   875  0  80   0 - 86451 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10874   875  0  80   0 - 85107 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10875   875  0  80   0 - 85606 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10876   875  0  80   0 - 85993 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10877   875  0  80   0 - 84996 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10878   875  0  80   0 - 88112 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10879   875  0  80   0 - 85588 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10880   875  0  80   0 - 85943 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10881   875  0  80   0 - 85606 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10882   875  0  80   0 - 84537 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
4 S ct       10883 10869  0  80   0 -  1101 wait   03:25 ?        00:00:00 /bin/sh -c ps -elf
4 S root     10884 10870  0  80   0 -  1101 wait   03:25 ?        00:00:00 /bin/sh -c php /var/www/html/teenfaith/moodle/admin/cli/cron.php > /dev/null
5 D www-data 10888   875  0  80   0 - 84665 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10889   875  0  80   0 - 85652 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10890   875  0  80   0 - 85107 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10891   875  0  80   0 - 84119 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10892   875  0  80   0 - 84932 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10893   875  0  80   0 - 84804 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10894   875  0  80   0 - 85606 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
5 D www-data 10895   875  0  80   0 - 85878 get_re 03:25 ?        00:00:00 /usr/sbin/apache2 -k start
0 R ct       10897 10883  7  80   0 -  4587 -      03:26 ?        00:00:00 ps -elf
0 R root     10898 10884  0  80   0 -  9142 ?      03:26 ?        00:00:00 php /var/www/html/teenfaith/moodle/admin/cli/cron.php
4 S mysql    11304     1  0  80   0 - 338439 futex_ Nov05 ?       00:11:15 /usr/sbin/mysqld
4 S postfix  24152   823  0  80   0 -  9555 ep_pol Nov06 ?        00:00:00 tlsmgr -l -t unix -u -c

如您所见,有 151 个 apache2 进程正在运行!正常数量是 8 个。在这些进程中,68 个进程的 WCHAN 为 get_re,82 个进程的 WCHAN 为 unix_s,1 个进程的 WCHAN 为 poll_s。我不知道这意味着什么。

ps命令是在今天晚上3点26分运行的,你可以看到绝大多数的apache进程都是在那个时间的几分钟内启动的。

后来发生的事情是,服务器上运行的各种 cron 作业堆积如山。大概是因为它们无法访问 MySQL。一小时后,ps 命令显示具有相同 PID 的相同 apache 进程,但列表中已添加许多运行 PHP 的 cron 作业,大概是在等待 MySQL。

这种行为是否让你们中的任何人感到警觉?你知道问题可能是什么吗?或者我该如何进一步调查?

2013年11月14日编辑:

当问题出现时,事情就会被写入mysql日志。以下是日志的前几行:

InnoDB: Warning: a long semaphore wait:
--Thread 140450733872896 has waited at dict0dict.c line 759 for 257.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
InnoDB: Warning: a long semaphore wait:
--Thread 140450751735552 has waited at dict0dict.c line 759 for 308.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
InnoDB: ###### Starts InnoDB Monitor for 30 secs to print diagnostic info:
InnoDB: Pending preads 0, pwrites 0
InnoDB: ###### Diagnostic info printed to the standard error stream
InnoDB: Warning: a long semaphore wait:
--Thread 140450733872896 has waited at dict0dict.c line 759 for 341.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
InnoDB: Warning: a long semaphore wait:
--Thread 140450751735552 has waited at dict0dict.c line 759 for 407.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
InnoDB: ###### Starts InnoDB Monitor for 30 secs to print diagnostic info:
InnoDB: Pending preads 0, pwrites 0

=====================================
131114 20:11:44 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 3 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 45330 1_second, 45308 sleeps, 4112 10_second, 4353 background, 4349 flush
srv_master_thread log flush and writes: 46570
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 8091, signal count 5009
--Thread 140450733872896 has waited at dict0dict.c line 759 for 435.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
--Thread 140450751735552 has waited at dict0dict.c line 759 for 435.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
--Thread 140450762536704 has waited at row0purge.c line 680 for 101.00 seconds the semaphore:
S-lock on RW-latch at 0x7fbd571e9d60 created in file dict0dict.c line 729
a writer (thread id 140450747320064) has reserved it in mode  exclusive
number of readers 0, waiters flag 1, lock_word: 0
Last time read locked in file row0purge.c line 680
Last time write locked in file /build/buildd/mysql-5.5-5.5.31/storage/innobase/row/row0mysql.c line 3153
--Thread 140450741298944 has waited at dict0dict.c line 759 for 229.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
--Thread 140450743305984 has waited at dict0dict.c line 759 for 28.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
--Thread 140450748122880 has waited at dict0dict.c line 759 for 2.00 seconds the semaphore:
Mutex at 0x7fbd58f8d4c8 created file dict0dict.c line 716, lock var 1
waiters flag 1
Mutex spin waits 2044, rounds 95010, OS waits 3074
RW-shared spins 4025, rounds 123141, OS waits 4093
RW-excl spins 298, rounds 27978, OS waits 894
Spin rounds per wait: 46.48 mutex, 30.59 RW-shared, 93.89 RW-excl
------------
TRANSACTIONS
------------
Trx id counter 13B2C77
Purge done for trx's n:o < 13B2C50 undo n:o < 0
History list length 2208
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
InnoDB: ###### Diagnostic info printed to the standard error stream
MySQL thread id 23554, OS thread handle 0x7fbd3ce70700, query id 2153806 localhost 3bmoodle_bol checking permissions
DROP TABLE IF EXISTS `bol_bible_refs`
---TRANSACTION 13B2C61, not started
mysql tables in use 1, locked 0
MySQL thread id 23552, OS thread handle 0x7fbd3d2a6700, query id 2153830 localhost 3bmoodle_3bh
SELECT value FROM mdl_config_plugins WHERE plugin = 'qtype_randomsamatch' AND name = 'version'
---TRANSACTION 13B2C07, not started
MySQL thread id 23550, OS thread handle 0x7fbd3d42e700, query id 2153732 localhost 3bmoodle_www
---TRANSACTION 13B2B7D, not started
MySQL thread id 23548, OS thread handle 0x7fbd562d5700, query id 2153450 localhost edbi_new
---TRANSACTION 13B2A8C, not started
MySQL thread id 23525, OS thread handle 0x7fbd500ab700, query id 2153055 localhost 3bmoodle_bh

答案1

这是我的猜测,我尽可能逐字逐句地解释了日志,同时也做了一些推断:

  • 某物(可能与硬件有关,但也可能是一个软件错误或文件系统损坏)导致 MySQL 守护进程在尝试完成更新查询时死锁。
  • 您正在运行 Apache 的“prefork”MPM(多处理模块)(这是一个猜测)。这意味着每个同时的 HTTP 请求都会获得一个 Apache 进程。因此,您要么会收到大量同时的请求(啊啦DDoS),或者随着时间的推移,您会逐渐收到一些请求,但这些请求无法完成,因为 Apache 模块(可能是 mod_php、CGI 等)中的某些代码是 MySQL 客户端,并且正在调用 MySQL 执行一些更新查询。由于上述 MySQL 死锁,该查询处于“挂起”状态,因此 MySQL 永远不会回复您的代码,因此您的代码永远不会完成 HTTP 请求,因此 Apache 会保持与 Web 客户端的连接,因此 Apache 进程会堆积起来。您还可能会在 Web 前端观察到,服务器似乎需要很长时间才能回复用于获取某些页面的 HTTP 请求,也许它根本不会回复,只是超时。
  • 涉及 MySQL 的 cron 作业因与 Apache 进程类似的原因而堆积。

当我遇到类似这样的怪异问题时,我喜欢“把洋葱从里到外剥开”,这是我对“洋葱的内层”是较低级别的东西,而洋葱的外层是依赖于较低级别的东西的较高级别的东西的比喻。因此,从内到外,我们大致有这个(过于简化的)堆栈,从内到外:

  • 硬件
  • 操作系统内核及驱动、进程管理、任务调度等
  • 文件系统
  • C 库,在内核 ABI 之上实现 TCP/IP 例程的其他低级库
  • 数据库服务器
  • 用户空间配置(DNS解析/etc/hosts等)
  • 您的 Web 服务器 (Apache)
  • 您的服务器端网页代码和 HTML
  • Web 前端

那么让我们看看如何处理每一层上明显的死锁:

  • 硬件:首先,进行 RAM 测试,并运行类似程序smartctl,检查 SMART 是否认为您的磁盘正常。如果您发现硬件故障的迹象,则很可能是硬件故障造成的。

  • 操作系统内核:检查dmesg是否有WARNINGBUGOOPS行,这可能表示您正在使用的内核版本或驱动程序中存在错误。除了警告和错误之外,阅读dmesg一般内容也很有用;查找任何异常情况,如果有疑问,请在 Google 上搜索错误消息,删除任何系统特定的详细信息,例如 IP 地址。

  • 文件系统:在 MySQL 数据库所在的文件系统上运行只读命令fsck。如果您不确定,/var这是一个很好的起点——/var使用 找出挂载的位置sudo mount,然后是fsck该卷,运行适当的fsck命令以指示只读完整性检查。

  • C 库:有时,您可能会遇到用户空间低级中间件(如 C 库)中的错误,但除非您自定义编译了大量内容,否则这种情况并不常见。版本不匹配的可能性更大,但如果您运行的是来自 vanilla Ubuntu 存储库的软件包,那么这也不太可能是罪魁祸首。

  • 数据库服务器:MySQL 在管理其数据库文件时完全有可能存在错误,并意外将损坏的数据写入磁盘上的 DB 文件。即使您的硬盘硬件没有问题,文件系统检查无误,也可能存在这种情况。例如,可能存在竞争条件,甚至可能自 Ubuntu 12.04 发布以来就已修复了这种竞争条件(或者竞争条件仍然存在,而您只是真的很不幸,你的工作量很大。这里要检查的是尝试一些建议的技巧这里,这实际上涉及将所有表写入 SQL 文件,然后重新导入它们。如果数据库的数据文件损坏严重,您可能必须删除数据库并从头开始重新初始化;请小心,因为您可能会丢失权限等。此外,如果您的数据库处于损坏状态,则输出的 SQL 可能不包含您的所有数据,因此,除非您备份原始数据库文件,你可能会丢失数据。所以要小心。

  • 用户空间配置:我想不出这个特定层会出什么问题,从而导致您在 mysqld 日志中报告的“信号量”问题。可以安全地假设该层运行正常。

  • Web 服务器:如果 Apache 有问题,那么您不会看到cron脚本出现任何异常行为,只需简单操作/etc/init.d/apache2 restart即可完全解决问题。但事实并非如此,不是吗?

  • 您的代码:考虑到您迄今为止发布的日志的输出,这似乎不太可能是罪魁祸首,除非您绕过 MySQL 并直接写入其数据库,或者绕过文件系统在原始磁盘设备上执行块级 I/O,或者类似同样疯狂的事情。

  • 网络前端:是的,从日志来看,这不太可能是问题所在。

相关内容