gpt4 book ai didi

java - 为什么我的 Opteron 内核每个仅以 75% 的容量运行? (25% 的 CPU 闲置)

转载 作者:行者123 更新时间:2023-12-05 00:47:51 25 4
gpt4 key购买 nike

<分区>

我们刚刚交付了功能强大的 32 核 AMD Opteron 服务器,容量为 128Gb。我们有 2 个 6272 CPU,每个 16 个内核。我们正在 30 个线程上运行一个大型的长时间运行的 java 任务。我们开启了针对 Linux 和 java 的 NUMA 优化。我们的 Java 线程主要使用该线程私有(private)的对象,有时会读取其他线程将要读取的内存,并且偶尔会写入或锁定共享对象。

我们无法解释为什么 CPU 核心有 25% 空闲。以下是“top”的转储:

top - 23:06:38 up 1 day, 23 min,  3 users,  load average: 10.84, 10.27, 9.62Tasks: 676 total,   1 running, 675 sleeping,   0 stopped,   0 zombieCpu(s): 64.5%us,  1.3%sy,  0.0%ni, 32.9%id,  1.3%wa,  0.0%hi,  0.0%si,  0.0%stMem:  132138168k total, 131652664k used,   485504k free,    92340k buffersSwap:  5701624k total,   230252k used,  5471372k free, 13444344k cached...top - 22:37:39 up 23:54,  3 users,  load average: 7.83, 8.70, 9.27Tasks: 678 total,   1 running, 677 sleeping,   0 stopped,   0 zombieCpu0  : 75.8%us,  2.0%sy,  0.0%ni, 22.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu1  : 77.2%us,  1.3%sy,  0.0%ni, 21.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu2  : 77.3%us,  1.0%sy,  0.0%ni, 21.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu3  : 77.8%us,  1.0%sy,  0.0%ni, 21.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu4  : 76.9%us,  2.0%sy,  0.0%ni, 21.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu5  : 76.3%us,  2.0%sy,  0.0%ni, 21.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu6  : 12.6%us,  3.0%sy,  0.0%ni, 84.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu7  :  8.6%us,  2.0%sy,  0.0%ni, 89.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu8  : 77.0%us,  2.0%sy,  0.0%ni, 21.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu9  : 77.0%us,  2.0%sy,  0.0%ni, 21.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu10 : 77.6%us,  1.7%sy,  0.0%ni, 20.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu11 : 75.7%us,  2.0%sy,  0.0%ni, 21.4%id,  1.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu12 : 76.6%us,  2.3%sy,  0.0%ni, 21.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu13 : 76.6%us,  2.3%sy,  0.0%ni, 21.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu14 : 76.2%us,  2.6%sy,  0.0%ni, 15.9%id,  5.3%wa,  0.0%hi,  0.0%si,  0.0%stCpu15 : 76.6%us,  2.0%sy,  0.0%ni, 21.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu16 : 73.6%us,  2.6%sy,  0.0%ni, 23.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu17 : 74.5%us,  2.3%sy,  0.0%ni, 23.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu18 : 73.9%us,  2.3%sy,  0.0%ni, 23.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu19 : 72.9%us,  2.6%sy,  0.0%ni, 24.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu20 : 72.8%us,  2.6%sy,  0.0%ni, 24.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu21 : 72.7%us,  2.3%sy,  0.0%ni, 25.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu22 : 72.5%us,  2.6%sy,  0.0%ni, 24.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu23 : 73.0%us,  2.3%sy,  0.0%ni, 24.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu24 : 74.7%us,  2.7%sy,  0.0%ni, 22.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu25 : 74.5%us,  2.6%sy,  0.0%ni, 22.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu26 : 73.7%us,  2.0%sy,  0.0%ni, 24.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu27 : 74.1%us,  2.3%sy,  0.0%ni, 23.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu28 : 74.1%us,  2.3%sy,  0.0%ni, 23.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu29 : 74.0%us,  2.0%sy,  0.0%ni, 24.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu30 : 73.2%us,  2.3%sy,  0.0%ni, 24.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu31 : 73.1%us,  2.0%sy,  0.0%ni, 24.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stMem:  132138168k total, 131711704k used,   426464k free,    88336k buffersSwap:  5701624k total,   229572k used,  5472052k free, 13745596k cached  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND13865 root      20   0  122g 112g 3.1g S 2334.3 89.6  20726:49 java27139 jayen     20   0 15428 1728  952 S  2.6  0.0   0:04.21 top27161 sysadmin  20   0 15428 1712  940 R  1.0  0.0   0:00.28 top   33 root      20   0     0    0    0 S  0.3  0.0   0:06.24 ksoftirqd/7  131 root      20   0     0    0    0 S  0.3  0.0   0:09.52 events/0 1858 root      20   0     0    0    0 S  0.3  0.0   1:35.14 kondemand/0

java 堆栈的转储确认没有线程在使用锁的少数地方附近,也不在任何磁盘或网络 i/o 附近。

我很难找到“空闲”与“等待”的“顶级”含义的明确解释,但我的印象是“空闲”意味着“不再需要运行线程”,但这并不是在我们的案例中有意义。我们正在使用“Executors.newFixedThreadPool(30)”。有大量任务待处理,每个任务持续10秒左右。

我怀疑解释需要对NUMA有很好的理解。当 CPU 等待非本地访问时,您看到的是“空闲”状态吗?如果不是,那么解释是什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com