高服务器负载

开发人员使用的Hudson服务器有一些超时问题。

每当Java正在编译(git正在检查模块,java类被编译,testing和复制到Nexus),在这个过程中出现问题,一切都变得没有反应。

例如,我可以在前15到30秒内看到iotop,最多可以达到3Mb / s,然后,突然之间,顶部停止刷新,我什么也做不了。 对于SNMP同样的dito,每个SNMP请求结果超时。

我也无法login到ssh,并在打开的terminalinput一个简单的命令,如“w”需要年龄(5+分钟)来输出。

这是一个Debian服务器(漂亮的默认安装,没有奇怪的运行)。

这是在XenServer主机上运行的VM。 它有4Gb内存分配和8个核心(4个物理核心+ HT)。

XenCenter报告13%的CPU负载(在一个核心上是100%)。 磁盘使用率低,内存也不高峰(它停留在3Gb使用的4Gb左右,交换空闲)。

这是“w”输出后,再次变得敏感:

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

所以是的,平均系统负载是相当高的…但是,即使3200似乎并不高。

这似乎也不会发生每一次build设的东西。

我的问题是:是否有一种方法可以对数据进行采样并查看是什么导致所有内容都挂起,即使Java独占一个内核,服务器也有7个未使用的内核,为什么它无法响应任何input(IO使用率似乎很低也不是内存不足)?

编辑:

vmstat 1输出:

 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb 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] 

“w”的输出在这里没有什么帮助。 请在第一个15-30秒内发布“vmstat 1”的输出,这将给我们更深刻的认识。 你的Java项目有多less个文件? 一切都可以在当地? 或者是哈德森从其他地方检查东西或从networking上复制一些东西?

你是运行Hudson作为独立的应用程序,还是在一个Web容器中,例如Tomcat?

想到的一个想法是为你的Java进程分配内存。 如果您没有为JVM指定额外的内存选项( -Xms和-Xmx选项 ),则可能是JVM以默认的65M运行,垃圾收集在这一点上运行,并导致您的系统停止运行。

如果你有可能validation你的运行时选项(上面的“ps”输出被截断了,所以我看不到自己),你可以检查这是否是根本原因。 如果是这样,您可能需要为stream程添加更多内存,并查看是否在这种情况下停滞不前。

这真的听起来像你的服务器吃掉所有的内存,并开始交换。 编译时你确定内存使用情况吗? Javac轻松地吃了一些演出…我会保持一个TOP,并检查内存使用是通过构build过程。 一旦服务器开始咀嚼磁盘,由于处于活动状态,它通常不会响应,但是您经常可以看到内存使用增加,直到服务器启动交换

另一个简单的方法来testing这是禁用交换:

 swapoff /dev/sda2 (or whatever your swap partition is called) 

然后尝试构build。 如果你的内存不足,这个版本可能会中途死亡。 另外一个进程占用大量内存的可能在Linux中被OOM Killer杀死。

这个问题似乎是由Git民意测验引起的(这是每分钟设定的)。 现在每10分钟更换一次,此时负载接近零。

检查是否有任何处于“D”状态的进程(不间断睡眠):

 # ps -eo pid,user,state,cmd | awk '$3 ~ /D/ { print $0 }'