1

Я заметил, что в системе (linux), если в состоянии "D" (бесперебойного) много процессов, система начинает "зависать". Состояние D в основном связано с ожиданием процесса ввода-вывода.

Под "зависанием" я подразумеваю, что я не могу набирать команды на консоли, или запуск новых процессов происходит очень медленно, что наводит меня на мысль, что процессор "занят" выполнением чего-либо. Но я понимаю, что процесс в состоянии D ничего не делает, а просто ждет. Это должно потребовать каких-либо вычислений процессора и фактически освободить процессор и позволить ему планировать другие задачи.

Я определенно что-то упускаю, потому что процессы состояния D также увеличивают среднюю загрузку системы. Я не понимаю, почему это делается, как процесс в непрерывном сне способствует нагрузке?

2 ответа2

2

D - это бесперебойный сон. Да, в теории процессы в состоянии D спят, а не напрямую, используя ввод / вывод. Но из моего опыта работы с процессами в этом состоянии это, скорее всего, означает, что в драйвере устройства что-то происходит. Если у вас много процессов состояния «D», то с вашей ОС происходит что-то очень плохое (tm). Это могут быть циклы вращения в драйвере (тратить впустую циклы процессора), буферы, читаемые и выбрасываемые, что угодно. Я бы проверил ваши системные журналы и dmesg на любые ошибки устройства или драйвера устройства.

В заключение, D не является естественным состоянием, случайный процесс может быть проигнорирован, но если у вас много D-процессов и вы испытываете медлительность, у вас есть кое-что, что нужно сделать.

1

Когда вы вводите команду в консоли, эта "команда" - если не встроенная команда оболочки - также является системным файлом, исполняемым. Когда вы набираете "ls", ВСЕ каталоги в переменной PATH ищутся для поиска исполняемого файла с именем "ls" - по крайней мере, до тех пор, пока "ls" не хэшировался ранее.

Этот поиск означает доступ к диску несколько раз в нескольких каталогах. Если, как вы писали, у вас много процессов, ожидающих ввода-вывода, вашей оболочке также придется ждать, прежде чем она сможет выполнить поиск вашей набранной команды.

Также некоторые команды, которые вы вводите, также захотят прочитать и / или записать в некоторый файл на диске, добавив к ожидающим процессам ввода-вывода ...

Это не добавляет нагрузку на процессор, но добавляет нагрузку ввода-вывода, которая также считается в Linux как "общая нагрузка", почему? Я думаю, что это просто вопрос определения. См. Http://en.wikipedia.org/wiki/Load_%28computing%29 .

Поэтому распределение вашего ввода-вывода на несколько дисков (не разделов) может улучшить вашу производительность. Наличие системы на одном диске, а ваши данные на других дисках помогут. Также подумайте, что только запуск новой оболочки заставляет ее искать в вашем $ HOME файлы, такие как .profile, .bashrc и другие, и, если диск занят многими другими операциями ввода-вывода, это может занять некоторое время.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .