Gostaria de saber se a saída de um Linux baseado em Red-Hat pode ser interpretada de maneira diferente por um Linux baseado em Debian.
Para tornar a questão ainda mais específica, o que pretendo é entender como a "média de carga" da primeira linha do top
comando em um sistema Red-Hat é interpretada e como verificar isso pelo código oficial da documentação ro.
[Há muitas maneiras de abordar esse assunto, todas as quais são respostas aceitáveis para a pergunta]
Uma abordagem potencial seria descobrir onde essas informações são oficialmente documentadas.
Outro seria encontrar a versão do código que top
é criada na distribuição e versão específicas em que estou trabalhando.
A saída do comando que estou recebendo é:
top - 13:08:34 up 1:19, 2 users, load average: 0.02, 0.00, 0.00
Tasks: 183 total, 1 running, 182 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 96.8%id, 2.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3922520k total, 788956k used, 3133564k free, 120720k buffers
Swap: 2097148k total, 0k used, 2097148k free, 344216k cached
Nesse caso, como posso interpretar o valor médio da carga ?
Eu consegui localizar que a carga média é de última hora, de uma fonte de documentação e que deve ser interpretada após ser multiplicada por 100, por outra fonte de documentação.
Então, a pergunta é:
é 0,02% ou 2% carregado?
Fontes e versões da documentação:
1) A primeira estrela com
TOP(1) Linux User’s Manual TOP(1)
NAME
top - display Linux tasks
Fonte: man top
na minha distribuição RedHat, o
Ubuntu também possui a versão com "tarefas" que não explica a média de carga em:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html
2) O segundo começa com
TOP(1) User Commands TOP(1)
NAME top
top - display Linux processes
Fonte:
http://man7.org/linux/man-pages/man1/top.1.htm
3) Este começa com:
TOP(1)
NAME
top - display and update information about the top cpu processes
Fonte: http://www.unixtop.org/man.shtml
O primeiro , pode ser visto por man top
in RHEL
ou in online ubuntu documentation
e não possui explicação para o formato de saída (nem sobre a média de carga em que estou interessado) .
O segundo , contém uma breve explicação, apontando que a média de carga tem a ver com o último 1 minuto, mas nada sobre a interpretação de seu valor!
Cito diretamente da segunda fonte:
2a Médias UPTIME e LOAD
Esta parte consiste em uma única linha que contém:
nome do programa ou da janela, dependendo do modo de exibição
hora atual e tempo desde a última inicialização,
número total de
cargas médias do sistema de usuários nos últimos 1, 5 e 15 minutos
Portanto, se essa explicação estiver realmente correta, basta entender que a média de carga é de aproximadamente 1 minuto.
Mas isso não explica o formato do número.
Na terceira explicação, diz o seguinte:
Ao especificar números para médias de carga, eles devem ser multiplicados por 100.
Esta explicação sugere que 0,02 significa 2% e não 0,02%. Mas isso está correto? Além disso, é correto para todas as distribuições de Linux e implementações potencialmente diferentes de top
?
Para encontrar a resposta para essa pergunta, tentei pesquisar o código pesquisando on-line. Mas eu encontrei, pelo menos, duas versões diferentes do top
relacionado ao RHEL por aí! o builtin-top.c
e o refatorado top.c
. Ambos os direitos autorais da Red-Hat, como diz o aviso no início do código, parecem lógicos, pois o RHEL usa um deles.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c
Portanto, antes de me aprofundar em tanto código, eu queria uma opinião sobre onde focar para formar um entendimento preciso sobre como a carga da CPU é interpretada?
A partir das informações fornecidas nas respostas abaixo, além de algumas pesquisas pessoais, descobri que:
1 - O top
que estou usando está contido no pacote procps-3.2.8. O que pode ser verificado usando top -v
.
2 - Na versão procps-3.2.8
que baixei do site oficial, parece que a ferramenta uptime
obtém suas informações diretamente do procfs
arquivo /proc/loadavg
(não utilizando a função linux getloadavg()
).
3 - Agora, o top
comando também não utiliza a função getloadavg()
. Eu consegui verificar se o top
faz realmente as mesmas coisas que ouptime
ferramenta para mostrar as médias de carga. Na verdade, ele chama a uptime
função da ferramenta, que obtém suas informações do procfs
arquivo /proc/loadavg
.
Então, tudo aponta para o /proc/loadavg
arquivo! Assim, para formar um entendimento preciso do load average
produzido por top
, é preciso ler o código do kernel para ver como o arquivo loadavg
é gravado.
Há também um excelente artigo apontado em uma das respostas que fornece aos leigos uma explicação dos três valores de loadavg
.
Portanto, apesar de todas as respostas terem sido igualmente úteis e úteis, vou marcar a que apontou para o artigo
http://www.linuxjournal.com//article/9001 como "a" resposta para minha pergunta. Obrigado a todos por sua contribuição!
Além da pergunta Noções básicas sobre média superior e de carga , eu encontrei um link para o código fonte do kernel que aponta para o local onde loadavg
é calculado. Como parece que há um grande comentário explicando como funciona, também esta parte do código está presente C
!
O link para o código é http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
Novamente, não estou tentando me envolver em nenhuma forma de plágio, estou apenas adicionando isso para completar. Então, estou repetindo que o link para o código do kernel foi encontrado em uma das respostas em Entendendo a média superior e de carga ...
fonte
top -v
)Respostas:
A carga da CPU é o comprimento da fila de execução, ou seja, o comprimento da fila de processos que aguardam execução.
O
uptime
comando pode ser usado para ver a duração média da fila de execução no último minuto, nos últimos cinco minutos e nos últimos 15 minutos, exatamente como o que geralmente é exibidotop
.Um valor alto de carga significa que a fila de execução é longa. Um valor baixo significa que é curto. Portanto, se a média de carga de um minuto for 0,05, significa que, em média, durante esse minuto, havia 0,05 processos aguardando para serem executados na fila de execução. Não é uma porcentagem. Isto é, AFAIK, o mesmo em todos os Unices (embora alguns Unices possam não contar processos aguardando E / S, o que eu acho que o Linux faz; o OpenBSD, por um tempo apenas, também contou os threads do kernel, de modo que a carga sempre foi 1 ou Mais).
O
top
utilitário Linux obtém os valores de carga do kernel, no qual os grava/proc/loadavg
. Observando as fontesprocps-3.2.8
, vemos que:sprint_uptime()
função é chamadatop.c
.proc/whattime.c
e chamadasloadavg()
emproc/sysinfo.c
.LOADAVG_FILE
para ler as médias de carga.LOADAVG_FILE
é definido anteriormente como"/proc/loadavg"
.fonte
top
euptime
não são utilitários POSIX e agetloadavg()
função de biblioteca também não está definida no POSIX (embora tenha uma linhagem BSD).top
ao loadavg arquivo procfs ...A média de carga é normalmente calculada pelo kernel. Aplicativos como
top
euptime
podem usar agetloadavg(3)
chamada de biblioteca para acessá-la (ela deve ser portátil em diferentes versões do Unix). No Linux, isso normalmente resulta em uma leitura de/proc/loadavg
. No FreeBSD é uma chamada do sistema.Por exemplo:
uptime
etop
ambos fazem chamadas semelhantes para obter seus dados.Agora, as médias de carga de 1/5/15 minutos são o número de processos na fila de execução. Diferentes sistemas operacionais podem calcular isso de diferentes maneiras; a maior diferença normalmente é se os processos que aguardam E / S (por exemplo, bloqueados no disco) contam como executáveis ou não. No Linux eles são.
Portanto, uma média de carga de 3,4 significa que houve uma média de 3,4 processos na fila de execução na janela de amostra (1, 5, 15 minutos).
Uma alta média de carga não significa necessariamente um servidor sobrecarregado. Se você tiver 16 núcleos, sua média de carga poderá ser 16 sem estresse. Você também pode ter muitas
fork()
chamadas de aplicativos que podem resultar na criação / destruição de um grande número de processos, levando a uma alta média de carga, mas sem afetar o desempenho do servidor. Ele deve ser usado apenas como guia, juntamente com outras métricas, como% de CPU ocupada.fonte
A média de carga não é algo específico de qualquer ferramenta ou distribuição específica; é uma medida fornecida pelo Kernel ou, mais precisamente, pelo planejador; portanto, é uma medida independente da distribuição. A medição é registrada dentro do sistema de arquivos proc
/proc
Em sua interpretação, a métrica de carga média não é uma indicação de quanto a CPU está trabalhando, mas quanto trabalho precisa ser feito. Não acho que seja realmente necessário multiplicá-lo por nada, porque é uma medida direta do número de processos em um estado executável ou ininterrupto.
Tente verificar as duas páginas de manual a seguir:
getloadavg(3)
euptime
para obter mais informações.A métrica de carga média pode ser um conceito difícil de entender a princípio, acho que muitas pessoas acham que é uma indicação de quão difícil a CPU está trabalhando, mas não é realmente isso.
fonte
getloadavg()
descrição da função é a mesma média de carga que otop
comando no rhel mostra? Estou perguntando isso porque realizei uma pesquisa de texto completo no conteúdo não tarroado do pacote procps-3.2.8 (que é indicado pelo comandotop -v
) e não há uma única menção à função getloadavg ()! Então, talvez top calcula a média de carga de uma maneira diferente ....