Столкнулся с интересным поведением, имеется сервер на котором крутится множество java процессов, 2 CPU 10 ядер в каждом + HyperThreading итого 40 ядер видно в Linux
Load average 75-100, при этом local io практически отсутствует, и никто не застрял в uninterruptible sleep, при всем при этом довольно значительный idle time в vmstat.
Проверим, что количество runnable потоков примерно соответствует load average:
$ ps Hh -eo stat,pid,command |egrep '^R' |wc -l
109
В разные моменты выдает разные значения понятное дело, но всегда в интервале 60-120
вывод mpstat -P ALL 1 (поймал момент, когда idle минимальный, обычно 10-13):
12:20:23 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
12:20:24 all 89.38 0.00 2.12 0.00 0.95 0.00 0.00 0.00 7.55
12:20:24 0 78.79 0.00 4.04 0.00 10.10 0.00 0.00 0.00 7.07
12:20:24 1 98.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.01
12:20:24 2 88.12 0.00 1.98 0.00 0.99 0.00 0.00 0.00 8.91
12:20:24 3 94.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 4.00
12:20:24 4 89.90 0.00 1.01 0.00 0.00 0.00 0.00 0.00 9.09
12:20:24 5 91.09 0.00 3.96 0.00 0.99 0.00 0.00 0.00 3.96
12:20:24 6 99.01 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00
12:20:24 7 97.03 0.00 0.99 0.00 0.00 0.00 0.00 0.00 1.98
12:20:24 8 98.02 0.00 0.99 0.00 0.99 0.00 0.00 0.00 0.00
12:20:24 9 97.03 0.00 0.99 0.00 0.00 0.00 0.00 0.00 1.98
12:20:24 10 90.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 9.00
12:20:24 11 94.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 3.00
12:20:24 12 86.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 12.00
12:20:24 13 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 2.00
12:20:24 14 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:20:24 15 95.96 0.00 1.01 0.00 0.00 0.00 0.00 0.00 3.03
12:20:24 16 98.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 0.00
12:20:24 17 91.92 0.00 5.05 0.00 0.00 0.00 0.00 0.00 3.03
12:20:24 18 94.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 5.00
12:20:24 19 97.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 1.00
12:20:24 20 83.00 0.00 3.00 0.00 10.00 0.00 0.00 0.00 4.00
12:20:24 21 82.83 0.00 4.04 0.00 7.07 0.00 0.00 0.00 6.06
12:20:24 22 98.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.01
12:20:24 23 88.00 0.00 2.00 0.00 9.00 0.00 0.00 0.00 1.00
12:20:24 24 94.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 2.00
12:20:24 25 77.23 0.00 2.97 0.00 0.00 0.00 0.00 0.00 19.80
12:20:24 26 77.23 0.00 3.96 0.00 0.00 0.00 0.00 0.00 18.81
12:20:24 27 63.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 36.00
12:20:24 28 91.92 0.00 1.01 0.00 0.00 0.00 0.00 0.00 7.07
12:20:24 29 83.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 15.00
12:20:24 30 84.85 0.00 1.01 0.00 0.00 0.00 0.00 0.00 14.14
12:20:24 31 95.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 2.00
12:20:24 32 88.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 9.00
12:20:24 33 97.98 0.00 2.02 0.00 0.00 0.00 0.00 0.00 0.00
12:20:24 34 76.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 22.00
12:20:24 35 83.17 0.00 2.97 0.00 0.00 0.00 0.00 0.00 13.86
12:20:24 36 73.00 0.00 3.00 0.00 1.00 0.00 0.00 0.00 23.00
12:20:24 37 86.00 0.00 5.00 0.00 0.00 0.00 0.00 0.00 9.00
12:20:24 38 83.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 16.00
12:20:24 39 92.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 4.0
что это может быть? грешу на scheduler, но непонятно как его крутить, чтобы он успевал занимать CPU под задачи. Не очень приято терять 10% CPU на задаче, которая как раз очень жадная до этого CPU.