A carga de um sistema, é o número médio de processos (thread) na fila de execução (isto é, executando ou esperando para ser executado) (e no Linux processos em sono ininterrupto , o estado D
abaixo) durante algum período.
No Linux, disponível em /proc/loadavg
nos últimos 1, 5 e 15 minutos.
Para ver o que esses threads atualmente (pelo menos no momento em que ps
lê os respectivos arquivos /proc/pid/task/tid/stat
), você pode fazer:
ps -eLo state,tid,args | awk '$1 ~ [RD]'
Ou:
grep -ho '.*) [RD]' /proc/[1-9]*/task/*/stat
(como uma aproximação, assumindo que os nomes dos processos não contêm nova linha ou )
caracteres. Para ser correto, para o terceiro campo e acima, você precisa começar na última ocorrência de )
no arquivo).
A carga de um processo não faz muito sentido, o que você provavelmente está pensando é o tempo gasto pelas CPUs para executar o processo durante um período.
Por exemplo, com top
imprimindo uma página a cada 1,5 segundos, quando% CPU para um processo mostra 300%, isso significa que, durante esses 1,5 segundos desde a última impressão, as CPUs estavam executando tarefas / threads desse processo por um total de 4,5 segundos.
Para obter essas informações, obtenha a soma dos campos utime
(14) e stime
(15) de /proc/pid/stat
(consulte man 5 proc
para detalhes) no início e no final do período e obtenha a razão entre a diferença e a duração.
Por exemplo, com zsh
:
zmodload zsh/zselect
period=100 # centi-seconds
((clk_tck = $(getconf CLK_TCK)))
for i (1 2) {
read -rd '' stat < /proc/$pid/stat;
t[i]=$((${(j:+:)${(s: :)stat##*\)}[12,13]}))
((i == 2)) || zselect -t $period
}
printf '%.4g%%\n' $(((t[2] - t[1]) * 100. * 100 / period / clk_tck))
Se por carga do processo , você quis dizer o número médio de threads desse processo na fila de execução (conforme a definição sugerida pelo @Patrick nos comentários), você poderia obter uma aproximação obtendo um algumas amostras como:
$ (repeat 100 grep -l ') [RD]' /proc/$pid/task/*/stat)|awk 'END{print NR/100}'
16.57
Com o tempo gasto para executar esses 100 comandos, 16,57 threads de $pid
em média foram vistos na fila de execução.