高负载无解释

高负载无解释

我的机器负载很高,不知道是什么原因造成的,也不知道该如何找出原因。

机器上运行着 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 应用程序时才会出现峰值。由此产生的网络流量是否会以某种方式增加负载,以至于我在 top 中看不到它?

答案1

因此平均负载实际上是相当复杂,但我的理解是,它基本上就是在运行队列中等待的内容。所以我猜你可能有一些东西在等待 IO。下面是一个不错的被盗片段看看正在等待什么:

ps -eo stat,pid,user,command | egrep "^STAT|^D|^R"

D : Uninterruptible sleep (usually IO)
R : Running or runnable (on run queue)

正如指出的那样,iostat运行良好,看看它是否像磁盘。

答案2

很难从单个顶部快照判断。需要更多信息。

假设正如您所说,CPU 使用率正常,那么看起来您有备用 CPU,看起来您没有内存不足,因此我接下来要看的是 IO。

IOWait(%wa)是否始终较低,或者从 IOWait 角度来看此快照是否不典型?

vmstat 1将向我们展示您的记忆,随着时间的推移。

iostat -x 1还将向我们展示正在写入的磁盘/分区。

对于将 Web 应用程序和数据库托管在同一台机器上的主机,我多次看到的一件事是,Web 应用程序和数据库数据目录的日志通常位于同一磁盘/分区/文件系统上,这可能会导致争用。我见过许多发行版将 mysql 数据放在 /var/lib/mysql 中,将 tomcat web 应用程序放在 /var/lib/tomcat/webapps 中,当然将日志放在 /var/log/tomcat 中。

即您的 Web 应用程序正在接收大量点击并尝试将这些点击记录到分区,但同时它正在尝试从同一分区读取数据库的数据。

如果我怀疑存在争用,我通常会发现利用率等待时间和服务时间是 iostat 中最有用的统计数据。

找出答案的快速而简单的方法是将 tomcat 日志位置移动到不同的分区/磁盘(如果可能)。

答案3

在这种情况下通常的答案是开始收集一些统计数据穆宁或者仙人掌,因为现在你已经很盲目了。要绘制的内容:

  • io 统计 - 磁盘读取/写入
  • 内存消耗,交换区的读写
  • 进程数和线程数[java 是否会因为某种原因在这种特定场景中产生大量进程和线程?]
  • 打开的 TCP 套接字的数量、打开的文件描述符的数量[可能......]
  • 平均负载
  • 使用常见的 nice/iowait/user/softirq 等的 CPU 使用率
  • 对于 tomcat,你还可以获得 [可能] 相当不错的 java 统计数据 - 堆大小、PermGen/Survivor/Tenured 的大小、每秒命中次数

答案4

在我们的案例中,这是由于底层 Ubuntu 服务器运行了 do-release-upgrade,但是不是之后还没有重新启动过。查看虚拟机转储,是虚拟机本身,而不是其上的软件对操作系统库做了一些奇怪的事情。重新启动操作系统解决了这个问题。

相关内容