Debian

伺服器負載高

  • February 16, 2011

開發人員使用的 Hudson 伺服器存在一些超時問題。

每當 Java 編譯時(git 正在檢查模組,java 類被編譯、測試並複製到 Nexus),過程中出現問題,一切都變得無響應。

例如,我可以在前 15-30 秒內觀看 iotop,它最多以 3Mb/s 的速度達到峰值,然後突然之間,top 停止刷新,我無能為力。SNMP 同上,每個 SNMP 請求都會導致超時。

我也無法登錄 ssh,並且在打開的終端中輸入一個簡單的命令(如“w”)需要很長時間(5 分鐘以上)才能得出輸出。

這是一個 Debian 伺服器(非常預設的安裝,沒有什麼奇怪的執行在上面)。

這是在 XenServer 主機上執行的 VM。它分配了 4Gb 記憶體和 8 個核心(4 個物理核心 + HT)。

XenCenter 報告 13% 的 CPU 負載(在一個核心上為 100%)。磁碟使用率很低,記憶體也沒有達到峰值(它在使用的 4Gb 中保持在大約 3Gb,交換保持為空)。

這是再次響應後的“w”輸出:

$ w
12:02:31 up 10 days, 19:45,  4 users,  load average: 32.13, 25.42, 15.32

所以是的,平均係統負載相當高……但即使是 3200 似乎也沒有那麼高。

它似乎也不會在每次建構某些東西時發生。

我的問題:有沒有辦法對數據進行採樣,看看是什麼導致一切掛起,即使 Java 獨占一個核心,伺服器有 7 個未使用的核心,為什麼它無法響應任何輸入(因為 IO 使用率似乎很低也是,而且它沒有記憶體不足)?

編輯:

vmstat 1 輸出:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
3  0    940 725336 235388 1444280    0    0     0     0 2048  578 14  8 79  0
5  0    940 702704 235392 1444296    0    0     0   200 3088 1691  8  8 81  3
2  0    940 701480 235392 1444296    0    0     0     4 2116  658 13  7 80  0
3  0    940 699480 235392 1444296    0    0     0    68 2688 1108 10  7 82  1
2  0    940 657732 235396 1444292    0    0     0   244 4639 3412 11  5 81  2
0  2    940 648872 235408 1451840    0    0     0  6616 5283 4573 11  3 79  6
0  2    940 645696 235412 1455296    0    0     0  4436 1257 1134  3  1 74 22
1  1    940 635064 235424 1465320    0    0     0  6940 3117 2653  6  1 87  6
0  1    940 632792 235448 1466592    0    0     0  9236  610  405  2  1 81 16
1  1    940 631464 235448 1466660    0    0     0  9524 1580  852  4  3 73 20
1  1    940 633428 235448 1466660    0    0     0  9120 2931 1250  1  6 82 11
3  0    940 620844 235540 1467496    0    0     0    48 2249 1368 16  4 80  0
3  1    940 590080 235544 1467552    0    0     0  1632 2322  918  9 10 76  6
4  0    940 538072 235544 1467552    0    0     0    28 2159 2364 15  7 77  1
5  0    940 489588 235548 1467836    0    0     0  1412 1745  663 16  5 76  2
7  0    940 402368 235548 1467996    0    0     0     0 2573  882 16  7 77  0
3  0    940 371424 235560 1468128    0    0     0    20 2235  744 14  7 79  0
4  0    940 265660 235568 1467840    0    0     0     0 2181  826 13  6 82  0
4  0    940 257360 235604 1468588    0    0     0     0 1718  705 14  6 81  0
3  0    940 193800 235628 1468124    0    0     0  1312 2164 1096 12  5 80  3

** 在此之後掛起 **

PS就在它再次響應時。

develop@Yong:/opt/develop/tomcat7-develop/bin$ ps -HAf
UID        PID  PPID  C STIME TTY          TIME CMD
root         2     0  0 Jan21 ?        00:00:00 [kthreadd]
root         3     2  0 Jan21 ?        00:00:00   [migration/0]
root         4     2  0 Jan21 ?        00:00:00   [ksoftirqd/0]
root         5     2  0 Jan21 ?        00:00:00   [watchdog/0]
root         6     2  0 Jan21 ?        00:00:00   [migration/1]
root         7     2  0 Jan21 ?        00:00:00   [ksoftirqd/1]
root         8     2  0 Jan21 ?        00:00:00   [watchdog/1]
root         9     2  0 Jan21 ?        00:00:00   [migration/2]
root        10     2  0 Jan21 ?        00:00:00   [ksoftirqd/2]
root        11     2  0 Jan21 ?        00:00:00   [watchdog/2]
root        12     2  0 Jan21 ?        00:00:00   [migration/3]
root        13     2  0 Jan21 ?        00:00:00   [ksoftirqd/3]
root        14     2  0 Jan21 ?        00:00:00   [watchdog/3]
root        15     2  0 Jan21 ?        00:00:01   [migration/4]
root        16     2  0 Jan21 ?        00:00:00   [ksoftirqd/4]
root        17     2  0 Jan21 ?        00:00:00   [watchdog/4]
root        18     2  0 Jan21 ?        00:00:02   [migration/5]
root        19     2  0 Jan21 ?        00:00:00   [ksoftirqd/5]
root        20     2  0 Jan21 ?        00:00:00   [watchdog/5]
root        21     2  0 Jan21 ?        00:00:01   [migration/6]
root        22     2  0 Jan21 ?        00:00:00   [ksoftirqd/6]
root        23     2  0 Jan21 ?        00:00:00   [watchdog/6]
root        24     2  0 Jan21 ?        00:00:00   [migration/7]
root        25     2  0 Jan21 ?        00:00:00   [ksoftirqd/7]
root        26     2  0 Jan21 ?        00:00:00   [watchdog/7]
root        27     2  0 Jan21 ?        00:00:00   [events/0]
root        28     2  0 Jan21 ?        00:01:04   [events/1]
root        29     2  0 Jan21 ?        00:00:00   [events/2]
root        30     2  0 Jan21 ?        00:00:00   [events/3]
root        31     2  0 Jan21 ?        00:00:00   [events/4]
root        32     2  0 Jan21 ?        00:00:00   [events/5]
root        33     2  0 Jan21 ?        00:00:00   [events/6]
root        34     2  0 Jan21 ?        00:00:00   [events/7]
root        35     2  0 Jan21 ?        00:00:00   [cpuset]
root        36     2  0 Jan21 ?        00:00:00   [khelper]
root        37     2  0 Jan21 ?        00:00:00   [netns]
root        38     2  0 Jan21 ?        00:00:00   [async/mgr]
root        39     2  0 Jan21 ?        00:00:00   [pm]
root        40     2  0 Jan21 ?        00:00:00   [xenwatch]
root        41     2  0 Jan21 ?        00:00:00   [xenbus]
root        42     2  0 Jan21 ?        00:00:00   [sync_supers]
root        43     2  0 Jan21 ?        00:00:00   [bdi-default]
root        44     2  0 Jan21 ?        00:00:00   [kintegrityd/0]
root        45     2  0 Jan21 ?        00:00:00   [kintegrityd/1]
root        46     2  0 Jan21 ?        00:00:00   [kintegrityd/2]
root        47     2  0 Jan21 ?        00:00:00   [kintegrityd/3]
root        48     2  0 Jan21 ?        00:00:00   [kintegrityd/4]
root        49     2  0 Jan21 ?        00:00:00   [kintegrityd/5]
root        50     2  0 Jan21 ?        00:00:00   [kintegrityd/6]
root        51     2  0 Jan21 ?        00:00:00   [kintegrityd/7]
root        52     2  0 Jan21 ?        00:00:00   [kblockd/0]
root        53     2  0 Jan21 ?        00:00:00   [kblockd/1]
root        54     2  0 Jan21 ?        00:00:00   [kblockd/2]
root        55     2  0 Jan21 ?        00:00:00   [kblockd/3]
root        56     2  0 Jan21 ?        00:00:00   [kblockd/4]
root        57     2  0 Jan21 ?        00:00:00   [kblockd/5]
root        58     2  0 Jan21 ?        00:00:00   [kblockd/6]
root        59     2  0 Jan21 ?        00:00:00   [kblockd/7]
root        60     2  0 Jan21 ?        00:00:00   [kseriod]
root        69     2  0 Jan21 ?        00:00:00   [kondemand/0]
root        70     2  0 Jan21 ?        00:00:00   [kondemand/1]
root        71     2  0 Jan21 ?        00:00:00   [kondemand/2]
root        72     2  0 Jan21 ?        00:00:00   [kondemand/3]
root        73     2  0 Jan21 ?        00:00:00   [kondemand/4]
root        74     2  0 Jan21 ?        00:00:00   [kondemand/5]
root        75     2  0 Jan21 ?        00:00:00   [kondemand/6]
root        76     2  0 Jan21 ?        00:00:00   [kondemand/7]
root        77     2  0 Jan21 ?        00:00:00   [khungtaskd]
root        78     2  0 Jan21 ?        00:00:00   [kswapd0]
root        79     2  0 Jan21 ?        00:00:00   [ksmd]
root        80     2  0 Jan21 ?        00:00:00   [aio/0]
root        81     2  0 Jan21 ?        00:00:00   [aio/1]
root        82     2  0 Jan21 ?        00:00:00   [aio/2]
root        83     2  0 Jan21 ?        00:00:00   [aio/3]
root        84     2  0 Jan21 ?        00:00:00   [aio/4]
root        85     2  0 Jan21 ?        00:00:00   [aio/5]
root        86     2  0 Jan21 ?        00:00:00   [aio/6]
root        87     2  0 Jan21 ?        00:00:00   [aio/7]
root        88     2  0 Jan21 ?        00:00:00   [crypto/0]
root        89     2  0 Jan21 ?        00:00:00   [crypto/1]
root        90     2  0 Jan21 ?        00:00:00   [crypto/2]
root        91     2  0 Jan21 ?        00:00:00   [crypto/3]
root        92     2  0 Jan21 ?        00:00:00   [crypto/4]
root        93     2  0 Jan21 ?        00:00:00   [crypto/5]
root        94     2  0 Jan21 ?        00:00:00   [crypto/6]
root        95     2  0 Jan21 ?        00:00:00   [crypto/7]
root        98     2  0 Jan21 ?        00:00:00   [khvcd]
root       408     2  0 Jan21 ?        00:00:06   [kjournald]
root       906     2  0 Jan21 ?        00:00:03   [flush-202:16]
root      1111     2  0 Jan21 ?        00:00:00   [kslowd000]
root      1112     2  0 Jan21 ?        00:00:00   [kslowd001]
root      1119     2  0 Jan21 ?        00:00:00   [cifsd]
root         1     0  0 Jan21 ?        00:00:00 init [2]      
root       480     1  0 Jan21 ?        00:00:00   udevd --daemon
daemon    1129     1  0 Jan21 ?        00:00:00   /sbin/portmap
statd     1140     1  0 Jan21 ?        00:00:00   /sbin/rpc.statd
root      1236     1  0 Jan21 ?        00:00:01   /usr/sbin/rsyslogd -c3
root      1283     1  0 Jan21 ?        00:00:27   /bin/bash /usr/sbin/xe-daemon
root     22213  1283  0 13:57 ?        00:00:00     sleep 60
root      1358     1  0 Jan21 ?        00:00:00   /usr/sbin/sshd
root     18625  1358  0 13:33 ?        00:00:00     sshd: yeri [priv]
yeri     18628 18625  0 13:33 ?        00:00:00       sshd: yeri@pts/0 
yeri     18629 18628  0 13:33 pts/0    00:00:00         -bash
root     18647 18629  0 13:33 pts/0    00:00:00           su -
root     18648 18647  0 13:33 pts/0    00:00:00             -su
root     19357 18648  0 13:45 pts/0    00:00:00               vmstat 1
root     19124  1358  0 13:44 ?        00:00:00     sshd: develop [priv]
develop  19127 19124  0 13:44 ?        00:00:00       sshd: develop@pts/1
develop  19128 19127  0 13:44 pts/1    00:00:00         -bash
develop  22174 19128  0 13:57 pts/1    00:00:00           ps -HAf
root     22163  1358  0 13:53 ?        00:00:00     sshd: andy [priv]
andy     22166 22163  0 13:54 ?        00:00:00       sshd: andy@pts/2 
andy     22167 22166  0 13:54 pts/2    00:00:00         -bash
andy     22216 22167  0 13:57 pts/2    00:00:00           -bash
andy     22217 22216  0 13:57 pts/2    00:00:00             [sed]
andy     22218 22216  0 13:57 pts/2    00:00:00             -bash
root      1677     1  0 Jan21 ?        00:00:00   nginx: master process /usr/sbi
www-data  1678  1677  0 Jan21 ?        00:00:00     nginx: worker process
snmp      1686     1  0 Jan21 ?        00:02:15   /usr/sbin/snmpd -Lsd -Lf /dev/
ntp       1700     1  0 Jan21 ?        00:00:00   /usr/sbin/ntpd -p /var/run/ntp
daemon    1718     1  0 Jan21 ?        00:00:00   /usr/sbin/atd
root      1739     1  0 Jan21 ?        00:00:02   /usr/sbin/cron
root     22159  1739  0 13:50 ?        00:00:00     /USR/SBIN/CRON
root     22161 22159  0 13:50 ?        00:00:00       /usr/bin/perl -w /usr/bin/
root     22214 22161  0 13:57 ?        00:00:00         [rateup]
daemon    1763     1  0 Jan21 ?        00:00:03   /usr/sbin/uptimed
root      1765     1  0 Jan21 tty2     00:00:00   /sbin/getty 38400 tty2
root      1766     1  0 Jan21 tty3     00:00:00   /sbin/getty 38400 tty3
root      1767     1  0 Jan21 tty4     00:00:00   /sbin/getty 38400 tty4
root      1768     1  0 Jan21 tty5     00:00:00   /sbin/getty 38400 tty5
root      1769     1  0 Jan21 tty6     00:00:00   /sbin/getty 38400 tty6
104       7240     1  0 Jan24 ?        00:00:00   /usr/bin/dbus-daemon --system
avahi     7269     1  0 Jan24 ?        00:00:00   avahi-daemon: running [Yong.lo
avahi     7270  7269  0 Jan24 ?        00:00:00     avahi-daemon: chroot helper
101        423     1  0 Jan31 ?        00:00:00   /usr/sbin/exim4 -bd -q30m
root      6799     1  0 Jan31 hvc0     00:00:00   /sbin/getty 38400 hvc0
root      1915     1  0 06:25 ?        00:00:01   /usr/bin/atop -a -w /var/log/a
root     19181     1  0 13:45 pts/0    00:00:00   /bin/sh /usr/bin/mysqld_safe
mysql    19218 19181  0 13:45 pts/0    00:00:03     /usr/sbin/mysqld --basedir=/
root     19219 19181  0 13:45 pts/0    00:00:00     logger -p daemon.err -t mysq
develop  19304     1 99 13:45 pts/1    66-17:02:10   /opt/develop/java/jdk/bin/j
develop  19457 19304 99 13:46 pts/1    373-12:31:17     /opt/develop/java/jdk1.6
develop  22219 19457  0 13:57 pts/1    00:00:00       [java]
develop  21193 19304 99 13:47 pts/1    26-16:29:39     /opt/develop/java/jdk1.6.
develop  22145 19304  0 13:48 pts/1    00:00:00     git fetch -t ssh://git@git.m
develop  22148 22145  0 13:48 pts/1    00:00:00       ssh git@git.miiatech.com g
develop  22215 22145  0 13:57 pts/1    00:00:00       [git]

“w”的輸出在這裡沒有多大幫助。請在前 15-30 秒內發布“vmstat 1”的輸出,它可以提供更深入的了解。您的 java 項目中有多少個文件?一切都在當地可用嗎?還是 hudson 是從其他地方檢查這些東西還是從網路上複製一些東西?

您是作為獨立應用程序執行 Hudson 還是在 Web 容器(例如 Tomcat)中執行?

想到的一個想法是為您的 Java 程序分配記憶體。如果您沒有為 JVM 指定額外的記憶體選項(-Xms 和 -Xmx 選項),那麼 JVM 可能會以預設的 65M 執行,並且垃圾收集會在此時啟動並使您的系統停止執行。

如果您有可能驗證您的執行時選項(您上面的“ps”輸出在右側被截斷,所以我自己看不到),您可以檢查這是否是根本原因。如果是,您可能希望向程序添加更多記憶體,並查看它是否仍然在這種情況下停止。

引用自:https://serverfault.com/questions/229571