我的机器负载很高,不知道是什么原因造成的,也不知道该如何找出原因。
机器上运行着 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
答案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
答案4
在我们的案例中,这是由于底层 Ubuntu 服务器运行了 do-release-upgrade,但是不是之后还没有重新启动过。查看虚拟机转储,是虚拟机本身,而不是其上的软件对操作系统库做了一些奇怪的事情。重新启动操作系统解决了这个问题。