我使用的是 gentoo,每次启动时,我的“平均负载”都停留在 7.0。使用 top 或 htop 或 dstat 时,CPU 使用率始终处于空闲状态。这台计算机用于运行一个 Java 程序,该程序使用了大量 NIO 和 java.util.concurrent 包(可能有很多自旋锁)。这会导致虚假的平均负载数字上升吗?实际上,如何开始调试这个问题?计算机似乎没有任何负载,因为它的性能非常正常。有什么建议吗?
uptime: " 10:56:50 up 327 days, 21:01, 4 users, load average: 7.00, 7.03, 7.00"
uname -a: "Linux host 2.6.30-gentoo-r6 #1 SMP Tue Oct 6 12:08:22 EDT 2009 i686 Intel(R) Xeon(R) CPU X5550 @ 2.67GHz GenuineIntel GNU/Linux"
答案1
您的数字似乎有效,并且低于过度利用率。一个具有八个核心(或 CPU)的充分利用的系统的平均负载为 8.0。目前的平均负载约为 88%。这就是系统没有出现任何性能问题的原因。
参考:
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
http://www.linuxjournal.com/article/9001?page=0,1
从维基百科
空闲计算机的负载数为 0。每个使用或等待 CPU 的进程(就绪队列或运行队列)都会使负载数增加 1。大多数 UNIX 系统仅计算处于运行(在 CPU 上)或可运行(等待 CPU)状态的进程。但是,Linux 还包括处于不间断睡眠状态(通常等待磁盘活动)的进程,如果由于 I/O 系统繁忙或停滞而导致许多进程仍阻塞在 I/O 中,则会导致截然不同的结果[1]。例如,这包括由于 NFS 服务器故障或介质速度慢(例如 USB 1.x 存储设备)而阻塞的进程。这种情况可能会导致平均负载升高,这并不反映 CPU 使用率的实际增加(但仍可以了解用户需要等待多长时间)。
这意味着您的 Java 线程负责负载,因为(猜测)大多数事情都被util.concurrent
操作系统视为 IO 阻塞。您可以使用提及此问题答案的工具开始调查这些过程:如何找出哪个进程正在消耗 wait-cpu?