Что это значит, если iostat показывает ожидание 100% занятости, но процессор полностью простаивает? Мое приложение работает какое-то время, а затем периодически переходит в это состояние примерно на 10-20 секунд.
Это приложение C ++ для обработки транзакций на Solaris 10.
IO stat output:
extended device statistics cpu
device r/s w/s kr/s kw/s wait actv svc_t %w %b us sy wt id
c0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 100
sd1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
c1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
c6 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0 100
sd19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd19.fp2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd19.fp4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd20 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd23 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0 100
sd24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd26 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd27 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
вывод vmstat:
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s2 s3 in sy cs us sy id
0 0 0 10842364 33093436 30 188 0 0 0 0 65 -0 2 3 -0 1327 843 709 0 1 99
0 0 0 3406728 28181464 71 3601 0 0 0 0 0 0 0 0 0 1372 23009 1584 4 0 96
0 0 0 2702996 28030080 0 740 0 0 0 0 0 0 0 0 0 1414 15002 2065 6 0 93
0 0 0 2699448 28016628 0 3 0 0 0 0 0 0 0 0 0 1747 3012 2193 9 1 90
0 0 0 2691728 28009844 0 1 0 0 0 0 0 0 10 10 0 2315 1300 2877 2 0 97
0 1 0 2679788 27957836 0 5033 0 0 0 0 0 0 1 1 0 1895 1945 2658 10 0 90
0 2 0 2654188 27907196 0 0 0 0 0 0 0 0 1 1 0 3566 3788 5495 2 0 98
Это означает, что нагрузка вызвана ожиданием ввода-вывода, а не конфликтом ЦП. Итак, доступ к жесткому диску, доступ к общему ресурсу NFS, доступ к пространству подкачки (и, следовательно (обычно) к локальному жесткому диску ... Я не уверен, что чистый сетевой доступ способствует этому, но мое чутье говорит нет. NFS просто добавляет к нему, потому что он использует слой FS. "top" обычно имеет процент "ожидания" или "iowait", который обычно показывает это.
Статистика IO не должна быть 100%. Если у вас большой объем дискового ввода-вывода, он может быть высоким, выше 50%, но ровно 100% обычно означает, что в вашей подсистеме ввода-вывода что-то не так. Это случилось со мной, когда у меня был жесткий диск на ранних стадиях отказа, когда диск все дольше и дольше отвечает на запросы, но все равно отвечает.
Или это может быть просто очень плохо написанное приложение. Простой сценарий DTrace должен сказать вам, что это такое.
Одна вещь, которая может очень сильно увеличить нагрузку на ввод-вывод, - это подкачка. Ваше приложение потребляет всю физическую память и заставляет машину загружать страницы?
vmstat 5
Если si
и so
столбцы показывают что-либо кроме 0
тогда ваша машина выполняет подкачку (возможно, много).