Как я могу узнать, связан ли процесс с процессором, памятью или диском?
Как я могу узнать, связан ли процесс с процессором, памятью или диском?
Ответы:
Это требует вуду. Это зависит. Пример:
Если памяти достаточно и диски не кажутся слишком занятыми, это может быть связано с процессором. Посмотрите на использование процессора и если он граничит на 100%, то он связан с процессором. Если это не так, в реализации есть искусственное узкое место. Например, на двухъядерном процессоре однопоточный процесс не превысит 50% загрузки процессора.
Если центральный процессор и память доступны, но диски очень заняты, или задержка ввода-вывода кажется высокой, вероятно, это связано с его вводом-выводом. Посмотрите, поможет ли добавление дополнительных дисков (RAID?).
Ни один из вышеперечисленных? Проверьте доступную память.
Достаточно памяти? Может быть искусственное узкое место в самом процессе, то есть, может быть, кто-то забыл удалить сон (1)? Наах это не так просто, как правило. ;)
Есть причина, по которой у нас есть целая лаборатория для инженеров по производительности в большинстве компаний, работающих с чувствительными к производительности продуктами!
Используйте инструменты, такие как sar, vmstat, iostat, oprofile, lockstat, dtrace, инструменты мониторинга перфорации для конкретного продукта и т. Д., Для устранения проблем перфорирования.
Как и другие упомянутые инструменты, запустите ps l PID
, вставив соответствующий идентификатор процесса, или посмотрите на столбцы STATE и WCHAN в top или htop.
Если он находится в состоянии D (для диска), он выполняет файловый ввод-вывод. Это может быть потому, что он либо читает много файлов, либо потому, что использует много памяти и подкачку. Колонка WCHAN скажет вам, какая функция ядра находится внутри; погуглив на них или спросив здесь, вы можете получить некоторое представление о том, что они имеют в виду.
Если он находится в состоянии R (запуск), он использует процессор в пространстве пользователя, другими словами, он в данный момент привязан к процессору.
Если он находится в состоянии S (сна), он находится внутри прерываемого системного вызова, что может означать, что он либо фактически спит, либо выполняет что-то вроде ожидания сетевого трафика или блокировки. Опять же, глядя на конкретный wchan скажу вам больше.
Смотрите также Что такое «канал ожидания» процесса?