我的机器负载非常高,不知道什么是负责任的或如何找出答案。
在机器上运行一个jboss appserver和mysql。 这是用户在高峰时段的顶端:
top - 16:23:01 up 101 days, 6:50, 1 user, load average: 23.42, 21.53, 24.73 Tasks: 9 total, 1 running, 8 sleeping, 0 stopped, 0 zombie Cpu(s): 17.2%us, 1.6%sy, 0.0%ni, 80.4%id, 0.1%wa, 0.1%hi, 0.7%si, 0.0%st Mem: 16440784k total, 16263720k used, 177064k free, 151916k buffers Swap: 16780872k total, 30428k used, 16750444k free, 8963648k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27344 b 40 0 16.0g 6.5g 14m S 169 41.7 1184:09 java 6047 b 40 0 11484 1232 1228 S 0 0.0 0:00.01 mysqld_safe 6192 b 40 0 604m 182m 4696 S 0 1.1 93:30.40 mysqld 7948 b 40 0 84036 1968 1176 S 0 0.0 0:00.07 sshd 7949 b 40 0 14004 2900 1608 S 0 0.0 0:00.03 bash 7975 b 40 0 8604 1044 840 S 0 0.0 0:00.44 top
java进程的CPU使用情况正常。 当我部署一个特定的Web应用程序时,峰值只显示出来。 由此产生的networkingstream量能否以这样的方式提升负载,以至于我看不到它呢?
所以平均负载实际上是相当复杂的 ,但是我的理解是,它基本上就是在运行队列中等待什么。 所以我的猜测是,你可能有IO等待的东西。 这里是一个很好的偷窃片段 ,看看还在等什么:
ps -eo stat,pid,user,command | egrep "^STAT|^D|^R" D : Uninterruptible sleep (usually IO) R : Running or runnable (on run queue)
正如指出的那样, iostat运行良好,看看它是否可能是磁盘。
很难从一个单一的顶部快照。 需要更多信息。
假设你说的CPU使用率是正常的,它看起来像你有空闲的CPU,看起来你不是内存不足,所以接下来我要看的是IO。
IOWait(%wa)总是很低,还是从IOWait的angular度来看,这个快照并不典型?
vmstat 1会显示你的记忆,随着时间的推移。
iostat -x 1还会显示正在写入的磁盘/分区。
对于在同一个机器上托pipeWeb应用程序和数据库的主机,我曾经在不止一次看到的一件事情是,Web应用程序和数据库数据目录的日志通常最终在相同的磁盘/分区/文件系统上引起争议。 我见过的许多发行版将mysql数据放在/ var / lib / mysql和tomcat webapps中/ var / lib / tomcat / webapps中,当然还有/ var / log / tomcat中的日志。
即您的web应用程序正在采取大量的命中,并试图将这些命中logging到分区,但同时它正试图从同一分区读取数据库的数据。
如果我怀疑争用,我通常会发现utilisation等待时间和服务时间从iostat最有用的统计信息。
如果可能的话,简单快捷的方法是将tomcat日志位置移动到不同的分区/磁盘。
在这种情况下通常的答案 – 开始收集一些与munin或仙人掌统计,因为现在你是非常盲目的。 事情阴谋:
在我们的例子中,这是由于底层的Ubuntu服务器运行了do-release-upgrade而导致的,但是之后没有重新启动。 看着虚拟机转储,这是虚拟机本身,而不是在它上面的操作系统库奇怪的软件。 重启操作系统解决了这个问题。