"Средняя нагрузка" застрял на 7,0
Я использую gentoo, и в любое время, когда я работаю в режиме безотказной работы, моя "Средняя нагрузка" застревает на уровне 7.0 по всем направлениям. При использовании top, htop или dstat загрузка процессора всегда простаивает. Компьютер используется для запуска Java-программы, которая использует много пакетов NIO и java.util.concurrent (там может быть много спин-блокировок). Может ли это привести к увеличению среднего числа ложных загрузок? Собственно, как можно начать отлаживать это? Похоже, что компьютер не находится под какой-либо нагрузкой, так как его производительность вполне нормальная. Какие-либо предложения?
uptime: " 10:56:50 up 327 days, 21:01, 4 users, load average: 7.00, 7.03, 7.00"
uname -a: "Linux host 2.6.30-gentoo-r6 #1 SMP Tue Oct 6 12:08:22 EDT 2009 i686 Intel(R) Xeon(R) CPU X5550 @ 2.67GHz GenuineIntel GNU/Linux"
1 ответ
Ваши номера, кажется, действительны и ниже чрезмерного использования. Полностью используемая система с восемью ядрами (или ЦП) будет иметь среднюю нагрузку 8,0. В настоящее время средняя загрузка составляет примерно 88%. Вот почему система не имеет проблем с производительностью.
Рекомендации:
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
http://www.linuxjournal.com/article/9001?page=0,1
Из википедии
Свободный компьютер имеет номер загрузки 0. Каждый процесс, использующий или ожидающий ЦП (очередь готовности или очередь выполнения), увеличивает номер загрузки на 1. В большинстве систем UNIX учитываются только процессы, работающие (на ЦП) или работающие (ожидающие CPU) состояния. Тем не менее, Linux также включает процессы в непрерывном спящем состоянии (обычно в ожидании активности диска), что может привести к заметно отличающимся результатам, если многие процессы остаются заблокированными в операциях ввода-вывода из-за загруженной или зависшей системы ввода-вывода [1]. Это, например, включает в себя блокирование процессов из-за сбоя сервера NFS или из-за медленного носителя (например, устройства хранения USB 1.x). Такие обстоятельства могут привести к повышению средней нагрузки, что не отражает фактического увеличения загрузки ЦП (но все же дает представление о том, как долго пользователям приходится ждать).
Это означает, что ваши потоки Java отвечают за нагрузку, потому что (угадывая) большинство вещей в util.concurrent
ОС воспринимает как блокировку ввода-вывода. Вы можете начать исследовать эти процессы с помощью инструментов, которые упоминаются в ответах на этот вопрос: как выяснить, какой процесс потребляет, ждать-процессор?