我管理一台运行 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
是否有WARNING
或BUG
或OOPS
行,这可能表示您正在使用的内核版本或驱动程序中存在错误。除了警告和错误之外,阅读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,或者类似同样疯狂的事情。
- 网络前端:是的,从日志来看,这不太可能是问题所在。