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