Средняя загрузка обычно рассчитывается ядром. Такие приложения, как top
и uptime
, могут использовать библиотечный вызов getloadavg (3)
для доступа к нему (он предназначен для переносимости между различными версиями Unix). В Linux это обычно приводит к чтению из / proc / loadavg
. В FreeBSD это системный вызов.
Например:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
double ld[3];
int i=getloadavg(ld,3);
printf("Load %.2f %.2f %.2f\n",ld[0],ld[1],ld[2]);
}
uptime
и top
оба делают одинаковые вызовы для получения своих данных.
Теперь средняя загрузка за 1/5/15 минут - это количество процессов в очереди выполнения.Различные операционные системы могут вычислять это по-разному; Самая большая разница обычно заключается в том, считаются ли процессы, ожидающие ввода-вывода (например, заблокированные на диске) работоспособными, или нет. В Linux они есть.
Таким образом, средняя загрузка 3,4 означает, что в очереди выполнения в пределах окна выборки (1, 5, 15 минут) было в среднем 3,4 процесса.
Однако высокая средняя загрузка не обязательно означает перегруженный сервер. Если у вас 16 ядер, то средняя загрузка может быть 16 без стресса. У вас также может быть много вызовов приложения fork ()
, которые могут привести к созданию / уничтожению большого количества процессов, что приведет к высокой средней нагрузке, но без значительного влияния на производительность сервера. Его следует использовать только в качестве ориентира вместе с другими показателями, такими как% загрузки ЦП.