开发人员使用的 Hudson 服务器出现了一些超时问题。
每当 Java 进行编译时(git 正在检查模块,Java 类被编译、测试并复制到 Nexus),该过程中就会出现问题,导致一切都变得无响应。
例如,在前 15-30 秒内,我能够观察 iotop,其峰值最高为 3Mb/s,然后,突然间,top 停止刷新,我无法做其他任何事情。对于 SNMP 也是如此,每个 SNMP 请求都会导致超时。
我也无法登录 ssh,并且在打开的终端中输入“w”之类的简单命令需要很长时间(5 分钟以上)才能得到输出。
这是一个 Debian 服务器(非常默认的安装,没有任何奇怪的操作在其上运行)。
这是在 XenServer 主机上运行的虚拟机。它分配了 4GB 内存和 8 个核心(4 个物理核心 + HT)。
XenCenter 报告 CPU 负载为 13%(一个核心负载为 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://[email protected]
develop 22148 22145 0 13:48 pts/1 00:00:00 ssh [email protected] g
develop 22215 22145 0 13:57 pts/1 00:00:00 [git]
答案1
“w” 的输出在这里没有太大帮助。请在前 15-30 秒内发布“vmstat 1”的输出,它能提供更深入的见解。您的 java 项目中有多少个文件?所有内容都可以在本地使用吗?或者 hudson 是从其他地方检出内容还是从网络复制内容?
答案2
您是将 Hudson 作为独立应用程序运行,还是在 Web 容器(例如 Tomcat)内运行?
我想到的是 Java 进程的内存分配。如果您没有为 JVM 指定额外的内存选项(-Xms 和 -Xmx 选项)可能是 JVM 以默认的 65M 运行,此时垃圾收集开始启动,导致系统停止运行。
如果您可以验证您的运行时选项(上面的“ps”输出在右侧被截断,因此我无法亲自查看),您可以检查这是否是根本原因。如果是,您可能需要向进程添加更多内存,并查看在这种情况下它是否仍会停滞。
答案3
听起来你的服务器确实耗尽了所有内存并开始交换。你确定编译时的内存使用情况吗?Javac 很容易消耗几 GB...我会保持 TOP 状态并检查构建过程中的内存使用情况。一旦服务器由于活动进程而开始消耗磁盘,它通常不会响应,但你经常可以看到内存使用量增加,直到服务器开始交换
测试此操作的另一种简单方法是禁用交换:
swapoff /dev/sda2 (or whatever your swap partition is called)
然后尝试构建。如果内存不足,构建可能会中途终止。另一个占用大量内存的进程也可能被OOM 杀手在 Linux 中。
答案4
检查是否有任何进程处于“D”状态(不可中断睡眠):
# ps -eo pid,user,state,cmd | awk '$3 ~ /D/ { print $0 }'