Linux 跟踪高CPU平均负载

Linux 跟踪高CPU平均负载,linux,unix,amazon-ec2,cpu,devops,Linux,Unix,Amazon Ec2,Cpu,Devops,试图了解我的服务器发生了什么。 它是一个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 -

试图了解我的服务器发生了什么。 它是一个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
自由命令的结果:

             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%


我的问题:我用什么方法来追踪高负载的根源?

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

根据您的
空闲输出,有时系统内存耗尽,因此使用了交换缓冲区(请参阅
used
=60列)。使用的总内存
已使用-(缓冲区+缓存)
,结果几乎为零。这意味着有时间消耗所有物理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,这不是很好。

您能显示
free
命令的输出吗?您使用的实例大小是多少?EC2是共享的CPU资源,因此一些工具可能会欺骗。@ZamronyP.Juhara免费添加的结果。%wa相当大-CPU:35.5%us,2.2%sy,0.0%ni,3.3%id,59.0%wa,0.0%hi,0.0%si,0.0%st,这是一个很好的方向,看看是什么导致了这种情况。谢谢iostat确实表明了这一点。Cpu并没有像我所怀疑的那样在任何进程上工作,相反,正如您所指出的,它正在等待IO。