Я был в предположении, что средняя загрузка процессора рассчитывается в зависимости от количества процессов в рабочем состоянии (состояние R) + процесс, ожидающий ввода-вывода (состояние D). Но сегодня я заметил, что сервер показывает высокую среднюю нагрузку, количество запущенных процессов равно 1, и нет процессов, ожидающих ввода-вывода.
Я проверил количество потоков также для запущенных и минимальный процесс ввода-вывода. Может ли кто-нибудь указать, откуда генерируется это более высокое среднее значение нагрузки.
Система имеет 4-ядерный процессор с ОС Ubuntu.
top - 21:10:01 up 4 days, 23:29, 0 users, load average: 32.31, 43.25, 19.64
Threads: 2077 total, 1 running, 2076 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.9 us, 2.0 sy, 0.1 ni, 92.0 id, 0.6 wa, 0.4 hi, 0.0 si, 0.0 st
KiB Mem: 16434332 total, 15447756 used, 986576 free, 1593972 buffers
KiB Swap: всего 6287356, 1259140 использовано, 5028216 бесплатно. 2754608 кэшированной памяти
Итак, здесь я ищу точную формулу для расчета средней нагрузки системы. Заранее спасибо.
Загрузка - это количество текущих потоков, которые приостановлены в ожидании системных вызовов.
Попробуйте бежать
ps -eafT
Вы можете обнаружить, что ваш единственный процесс может иметь десятки потоков.
Нагрузка на систему - это, по сути, мера выполнения расписания на тот момент. У вас есть доступное количество ядер для расписания. Если у вас есть такое количество pid или потоков, полностью загружающих планировщик, вы увидите загрузку количества ядер.
Средняя нагрузка может быть намного выше. Когда вы достигнете насыщения, вы не будете выполнять столько «работы», сколько может быть добавлено, и у вас может возникнуть «скопление» задач. Система должна пройти через накопившееся количество системных вызовов, прежде чем loadavg может снова упасть.
Во-первых, в чем проблема, есть ли проблемы со временем отклика для пользователей?
Средняя загрузка 30 или 40 означает, что запущено несколько процессов или ожидает ввод-вывод.
Ваш анализ недостаточен. Начать с Анализ производительности Linux за 60 000 миллисекунд
Укороченная версия:
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top