1

Я управляю сервером под управлением Ubuntu 12.04.

В последние пару недель сервер начал плохо себя вести, и я не могу придумать ничего важного, что изменилось.

Это шаблон: сервер начинает сообщать об ошибках MySQL. Они могут быть одним или несколькими из следующих:

  • Ошибка ADODB: потеря соединения с сервером MySQL при «ожидании начального пакета связи», системная ошибка: 95
  • mysqli:: mysqli(): (HY000/2013): потеря соединения с сервером MySQL при «отправке аутентификационной информации», системная ошибка: 32
  • слишком много подключений

Это обычно (но не всегда) происходит ночью, и в конце концов сервер становится полностью недоступным, и мой единственный вариант - его перезапустить.

Теперь я добавил задание cron, которое запускает «ps -elf» каждые 15 минут, чтобы показать, что происходит, и это то, что он показывает, когда начинаются проблемы:

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 показывает те же процессы apache с теми же PID, но в список было добавлено несколько заданий cron, работающих на PHP, предположительно ожидающих MySQL.

Это поведение звонит в колокол для любого из вас? Есть ли у вас какие-либо идеи, в чем может быть проблема или как я могу продолжить расследование?

РЕДАКТИРОВАТЬ 14 ноября 2013 г .:

Когда начинаются проблемы, все записывается в журнал 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 ответ1

1

Вот мое предположение, интерпретировав журналы буквально, насколько я могу, и при этом немного экстраполируя:

  • Что-то (возможно, связанное с аппаратным обеспечением, хотя это может быть программная ошибка или повреждение файловой системы) приводит к тому, что демон MySQL блокируется, пытаясь выполнить запрос на обновление.
  • Вы используете Apache "prefork" MPM (Multi-Processing Module) (это предположение). Это означает, что вы получаете один процесс Apache для каждого одновременного HTTP-запроса. Таким образом, вы либо получаете тонну одновременных запросов (в виде DDoS), либо постепенно получаете несколько запросов с течением времени, но эти запросы не завершаются, потому что некоторый код в модуле Apache (может быть, mod_php, или CGI, или что-то) является клиентом MySQL и вызывает MySQL, выполняя некоторый запрос на обновление. Этот запрос "зависает" из-за вышеупомянутой тупиковой ситуации в MySQL, поэтому MySQL никогда не отвечает обратно на ваш код, поэтому ваш код никогда не завершает HTTP-запрос, поэтому Apache поддерживает соединение с веб-клиентом, поэтому процессы Apache складываются. Вы также, вероятно, заметите в веб-интерфейсе, что серверу, похоже, требуется очень много времени, чтобы ответить на HTTP-запросы для извлечения определенных страниц, и, возможно, он вообще никогда не отвечает, а просто истекает время ожидания.
  • Задания cron, включающие MySQL, складываются по той же причине, что и процессы Apache.

Когда у меня возникает странная проблема, подобная этой, мне нравится "чистить лук наизнанку", что является моей метафорой идеи о том, что "внутренние" слои лука - это вещи более низкого уровня, а внешние слои лука - это вещи более высокого уровня, которые зависят от вещей более низкого уровня. Итак, изнутри наружу мы имеем примерно такой (упрощенный) стек, от входа к выходу:

  • аппаратные средства
  • Ядро и драйверы ОС, управление процессами, планировщик задач и т.д.
  • Файловая система
  • Библиотека C, другие низкоуровневые библиотеки, которые реализуют процедуры TCP/IP поверх ядра ABI
  • Сервер базы данных
  • Настройка пользовательского пространства (разрешение DNS, /etc/hosts и т.д.)
  • Ваш веб-сервер (Apache)
  • Ваш серверный веб-код и HTML
  • Веб-интерфейс

Итак, давайте посмотрим, как подойти к кажущемуся тупику на каждом из этих уровней:

  • Аппаратное обеспечение: Прежде всего, выполните тестирование ОЗУ, запустите что-то вроде smartctl и проверьте, считает ли SMART, что ваши диски исправны. Если вы видите признаки аппаратного сбоя, это, вероятно, виновник.

  • Ядро ОС: проверьте dmesg наличие строк WARNING BUG или OOPS , которые могут указывать на ошибку в используемой вами версии ядра или, возможно, в одном из ваших драйверов. Даже за исключением предупреждений и ошибок, чтение dmesg в целом может быть полезным; поищите что-нибудь аномальное и, если сомневаетесь, отправьте сообщение об ошибке в Google, удалив информацию о системе, такую как IP-адреса.

  • Файловая система: Запустите fsck только для чтения в файловой системе, где находится база данных MySQL. Если вы не уверены, /var - это хорошее место для начала - выясните, где /var монтируется с помощью sudo mount , затем fsck этого тома, выполнив соответствующую команду fsck чтобы указать проверку работоспособности только для чтения.

  • Библиотека C: Иногда вы можете столкнуться с ошибкой в низкоуровневом промежуточном программном обеспечении пользовательского пространства, например, в библиотеке C, хотя это довольно редко, если вы не скомпилировали много вещей. Несовпадение версий более вероятно, но если вы запускаете пакеты из ванильных репозиториев Ubuntu, это также вряд ли будет причиной.

  • Сервер базы данных: вполне возможно, что MySQL имеет ошибку в управлении файлами базы данных и случайно записал поврежденные данные в файл БД на диске. Это может иметь место, даже если с вашим жестким диском все в порядке, а файловая система исправна. Например, может быть состояние гонки, возможно, даже такое, которое было исправлено с момента выпуска Ubuntu 12.04 (или, возможно, условие гонки все еще существует, и вам просто не повезло столкнуться с этой нагрузкой). Здесь нужно проверить несколько хитростей, предложенных здесь , которые, по сути, включают запись всех ваших таблиц в файлы SQL, а затем их повторный импорт. Если файл данных для базы данных очень плохо подключен, возможно, вам придется удалить базу данных и заново инициализировать ее с нуля; будьте осторожны с этим, так как вы можете потерять разрешения и т. д. Кроме того, если ваша БД находится в поврежденном состоянии, SQL, который получает выходные данные, может не содержать все ваши данные, поэтому, если вы не создадите резервную копию исходного файла БД, вы можете потерять данные, выполнив это Так что будьте осторожны.

  • Конфигурация пользовательского пространства: я не могу думать о том, что могло бы пойти не так на этом конкретном уровне, что вызвало бы проблему "семафора", о которой вы сообщаете в своих журналах mysqld. Вероятно, безопасно предположить, что этот слой работает правильно.

  • Веб-сервер: Если бы Apache был виноват, то вы бы не увидели аномального поведения в своих скриптах cron , и простой /etc/init.d/apache2 restart бы проблему. Это не тот случай, правда?

  • Ваш код: учитывая вывод логов, которые вы опубликовали до сих пор, это маловероятно, чтобы быть виновником, если вы не обходите MySQL и не пишете напрямую в его базу данных, или не выполняете ввод-вывод на уровне блоков на сыром диске устройство в обход файловой системы, или что-то такое же безумное, как это.

  • Веб-интерфейс: Да, это не проблема, судя по журналам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .