跟踪高CPU平均负载



试图了解我的服务器发生了什么。这是一个2个cpu的服务器,所以:

$> grep 'model name' /proc/cpuinfo | wc -l
2

平均负载时,队列显示为~8:

$> uptime
16:31:30 up 123 days,  9:04,  1 user,  load average: 8.37, 8.48, 8.55

所以你可以假设,负载非常高,事情正在上升,系统上有一些负载,这不仅仅是一个峰值。但是,查看顶级cpu用户:

> ps -eo pcpu,pid,user,args | sort -k 1 -r | head -6
%CPU   PID USER     COMMAND
 8.3 27187 ****     server_process_c
 1.0 22248 ****     server_process_b
 0.5 22282 ****     server_process_a
 0.0 31167 root     head -6
 0.0 31166 root     sort -k 1 -r
 0.0 31165 root     ps -eo pcpu,pid,user,args

free命令的输出结果:

             total       used       free     shared    buffers     cached
Mem:          7986       7934         52          0          9       2446
-/+ buffers/cache:       5478       2508
Swap:        17407         60      17347
This is the result on an ongoing basis, e.g. not even

单个CPU正在被使用,最高消费者,总是~8.5%。

我的问题:我有什么方法可以追踪到高负载的根源?

根据您的free输出,有时系统内存耗尽,因此使用交换缓冲区(参见used = 60列)。总内存使用used - (buffers + cached),其结果几乎为零。这意味着有一段时间所有的物理RAM都会被消耗掉。

对于服务器,尽量避免可能导致从系统内存交换数据到交换缓冲区(反之亦然)的页面错误,因为访问硬盘驱动器比访问系统RAM要慢得多。

在您的top输出中,尝试调查wa列。较高的百分比值意味着CPU花费更多的时间等待来自磁盘的数据IO,而不是进行有意义的计算。

Cpu(s): 87.3%us,  1.2%sy,  0.0%ni, 27.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

尝试减少不需要的守护进程或服务,减少内存占用,并考虑为系统添加更多的RAM。

对于2个CPU的服务器,理想负载小于2.0(每个CPU负载小于1.0)。负载为8.0意味着每个CPU负载大约为4.0,这不是很好。

您试过htop命令吗?它有时以一种有用的方式显示更多的信息。

最新更新