Как узнать, связан ли процесс с процессором, памятью или диском?
Это требует вуду. Это зависит. Пример:
Если памяти достаточно и диски не кажутся слишком занятыми, возможно, ограничен ЦП. Посмотрите на использование процессора и если он граничит на 100%, то он связан с процессором. Если это не так, в реализации есть искусственное узкое место. Например. на двухъядерном процессоре однопоточный процесс не превысит 50% загрузки процессора.
Если центральный процессор и память доступны, но диски очень заняты, или задержка ввода-вывода кажется высокой, вполне вероятно, что он связан с вводом-выводом. Посмотрите, поможет ли добавление дополнительных дисков (RAID?).
Ничего из вышеперечисленного? Проверьте доступную память.
Достаточно памяти? В самом процессе может быть искусственное узкое место, то есть, может быть, кто-то забыл удалить сон (1)? Наах это не так просто, как правило. ;)
Существует причина, по которой у нас есть целая лаборатория для инженеров по производительности в большинстве компаний, занимающихся чувствительными к производительности продуктами!
Используйте такие инструменты, как sar, vmstat, iostat, oprofile, lockstat, dtrace, инструменты контроля над продуктом и т. д. для устранения проблем с perf.
Инструментом, который может быть полезен для проверки в реальном времени ряда статистических данных процесса (память, загрузка ЦП, ввод-вывод и т. Д.), Является htop . Он не заменяет более специализированные инструменты, названные Судханшу, но может быть хорошим началом.
Как и другие упомянутые инструменты, запустите ps l PID
, вставив соответствующий идентификатор процесса, или посмотрите на столбцы STATE и WCHAN в top или htop.
Если он находится в состоянии D (для диска), он выполняет файловый ввод-вывод. Это может быть потому, что он либо читает много файлов, либо потому, что использует много памяти и подкачку. Колонка WCHAN скажет вам, какая функция ядра находится внутри; погуглив на них или спросив здесь, вы можете узнать, что они значат.
Если он находится в состоянии R (работа), он использует процессор в пространстве пользователя, другими словами, он в данный момент привязан к процессору.
Если он находится в состоянии S (сна), он находится внутри прерываемого системного вызова, что может означать, что он либо фактически спит, либо выполняет что-то вроде ожидания сетевого трафика или блокировки. Опять же, просмотр конкретного wchan расскажет вам больше.
См. Также Что такое «канал ожидания»; процесса?
Запустите top
и посмотрите на строку использования процессора. Высокий пользовательский% указывает, что он связан с процессором. Высокий процент ожидания указывает, что он связан с IO.
Обычно я делаю:
sudo apt install iotop htop
# Системы на основе Ubuntu/debian
или
sudo yum install iotop htop
# Redhat/RPM основанные системы
Тогда взгляните на htop
- происходит ли подкачка системы (полностью заполненная полоса памяти)? Если это так, вы хотите исправить это в первую очередь. Обмен очень дорогой с точки зрения производительности.
Если система не переключается, проверьте полоски процессора. Они почти 100% большую часть времени? Ну, тогда ваш процессор занят :)
Далее, выйдите из htop
и запустите sudo iotop
и проверьте верхние правые числа (общее и фактическое количество операций записи на диск). Насколько они высоки?
Если они примерно соответствуют максимальной разумной пропускной способности вашего диска, с которого также выполняется чтение/запись (и обычно операции записи являются узким местом, поскольку скорость записи на диск почти всегда ниже, чем скорость чтения), то ваш IO занят :)
Примечание. Я имею в виду фактическую разумную пропускную способность на вашем диске (то, что вы должны были примерно получить, если бы вы копировали набор файлов вручную, когда сервер в противном случае простаивал), а не «метку» производительности, чего часто невозможно достичь с самого начала.
Таким образом, выполнив несколько простых проверок, вы определили, связана ли ваша система с памятью, процессором или диском.Если вам нужны более подробные цифры или анализ, воспользуйтесь другими инструментами, но это дает вам общее представление, которого часто бывает достаточно для масштабирования и т. д.