Explique as médias de carga no Solaris 10

4

Eu entendo as médias de carga no Linux, mas estou um pouco confuso com as médias de carga em uma máquina do Solaris 10 legada em que meu aplicativo é executado. As médias de carga parecem impossivelmente altas. Aqui está a saída.

[netcool1 (root)/]$ uptime
 11:49am  up 580 day(s), 10:51,  3 users,  load average: 35.50, 38.54, 39.03
[netcool1 (root)/]$ uname -a
SunOS netcool1 5.10 Generic_139555-08 sun4u sparc SUNW,Sun-Fire-V245
[netcool1 (root)/]$ psrinfo -v
Status of virtual processor 0 as of: 01/11/2012 11:52:52
  on-line since 06/10/2010 01:58:29.
  The sparcv9 processor operates at 1504 MHz,
        and has a sparcv9 floating point processor.
Status of virtual processor 1 as of: 01/11/2012 11:52:52
  on-line since 06/10/2010 01:58:27.
  The sparcv9 processor operates at 1504 MHz,
        and has a sparcv9 floating point processor.
[netcool1 (root)/]$ 

Não vejo como você pode ter uma carga média de 35 em um sistema com dois processadores. Isso parece incrivelmente alto para mim. Quando vejo os processos com top, o sistema está cerca de 60-70% ocioso. Alguém poderia ajudar a explicar isso?

vmstat 10 6

kthr      memory            page            disk          faults      cpu
r b w   swap  free  re  mf pi po fr de sr rm s0 s2 --   in   sy   cs us sy id
3 0 0 8747008 5562704 865 1866 188 63 63 0 0 -0 9 40 0 762 8588 1495 26  8 66
0 0 0 7715256 5068016 73 23 5 17 17  0  0  0 110 66 0 1135 3888 9855 59 12 30
0 0 0 7717936 5069128 0  5  0  6  6  0  0  0 100 4  0 1071 3273 4191 62  6 32
0 0 0 7717952 5027912 0 11649 0 5 5  0  0  0 115 21 0 1017 26370 3260 32 15 53
102 1 0 7717952 4979088 0 1 0  0  0  0  0  0 112 4  0  900 3464 7683 15  9 76
0 0 0 7717952 4978936 0  1  0  0  0  0  0  0 105 4  0  886 3379 8698 19  9 72
    
por coding_hero 11.01.2012 / 18:02

4 respostas

1

O "load" é normalmente uma média da primeira coluna de vmstat (coluna r , a fila de execução). A primeira carga é calculada em média por 1 minuto, a segunda por 5 minutos e a última por 15 minutos. Como você pode ver, no seu sistema o vmstat relatou em um ponto nada menos do que 102 threads acordados para usar o processador (provavelmente algum aplicativo massivamente multi-thread).

Mas não se preocupe, pois certamente essa explosão de carga de trabalho foi tratada e a fila de execução voltou a zero no próximo teste e continuou. O V245 tem dois processadores, cada single-core e single-thread, para que ele possa executar dois threads ao mesmo tempo (ou seja, r = 2 significa que nenhum thread é necessário aguardar o tempo do processador).

Estatisticamente, isso poderia traduzir para uma média de 35, mas como você pode ver, esse valor diz muito pouco sobre o uso real do sistema. Adage diz que "existem três tipos de mentiras: mentiras, mentiras e estatísticas", e acho que isso serve como uma conclusão.

    
por 11.01.2012 / 20:39
4

Em solaris mais antigos, a média de carga é o número médio de threads executáveis e executáveis. Em outras palavras, é o número de encadeamentos executados nas CPUs, mais o número de encadeamentos na fila de execução, aguardando CPUs, calculados ao longo do tempo.

Então ... uma CPU que completou o processamento de 10 threads para o último segundo ... e teve mais 5 esperando para ser processada mostraria 15.

Em contraste ...

As médias de carga do Linux são calculadas como "sobrecarga" de uma CPU ... ou seja, durante o último período de tempo, quantos encadeamentos aguardavam tempo de CPU em relação a quantos foram concluídos. (em percentagem)

Então ... uma CPU que completou o processamento de 10 threads para o último segundo ... e tinha mais 5 esperando para ser processada mostraria 0,5

No Solaris 10 ... eles mudaram um pouco a fórmula ... e eu não tenho 100% de certeza do que isso implica, mas deve ser bem próximo.

    
por 11.01.2012 / 18:30
2

Resposta bastante tardia, mas a resposta aceita ainda tem declarações incorretas, está faltando partes do ponto e sugere estatísticas, enquanto não há motivo aqui para não confiar naquelas relatadas pelo sistema operacional.

Aqui está uma explicação detalhada das estatísticas observadas.

A média de carga informada por uptime e outros comandos é uma média flutuante de 1 , 5 e 15 minutos da média número de encadeamentos aguardando uma CPU (fila de execução) mais o número médio de encadeamentos atualmente em execução em uma CPU.

A idéia é suavizar a exibição do tamanho da fila de execução e a contagem de processos em execução, que geralmente é muito irregular.

O tamanho da fila de execução é a primeira coluna da saída do vmstat ( r ). Qualquer valor diferente de zero significa que seu sistema teria rodado mais rápido se tivesse mais CPUs disponíveis.

A

vmstat primeira linha de dados mostra a média desde a última inicialização. Uma média de 3 threads estava esperando em sua máquina antes de você lançar vmstat . Este valor é geralmente insignificante sendo influenciado por longos períodos de inatividade, como finais de semana e outras horas não úteis:

r b w   swap  free  re  mf pi po fr de sr rm s0 s2 --   in   sy   cs us sy id
3 0 0 8747008 5562704 865 1866 188 63 63 0 0 -0 9 40 0 762 8588 1495 26  8 66

Todas as outras amostras mostram uma fila de execução vazia, exceto a segunda última, que mostra um número médio enorme de threads 102 :

102 1 0 7717952 4979088 0 1 0  0  0  0  0  0 112 4  0  900 3464 7683 15  9 76
                                                                          

A CPU está, todavia, 76% inativa durante essa amostra de 10 segundos, que é o que mais o intriga.

Para entender a aparente discrepância, você precisa entender que 102 é o valor médio para essa amostra. Uma maneira de obtê-lo é assumir que a fila de execução estava mantendo 1020 threads durante um segundo, depois estava vazia durante os 9 segundos restantes. Qualquer outra combinação que leve a esse número 102 também é concebível, como 204 threads durante 5 segundos e nenhum durante os outros 5, e assim por diante.

No entanto, de vmstat última coluna, sabemos que seu sistema estava 76% inativo durante esse período. Um valor plausível que acomoda a fila de execução média e a CPU inativa seria 408 encadeamentos competindo durante 2,4 segundos (CPUs ocupadas a 100%) e nenhum encadeamento ativo durante 7,6 segundos levando (0% de CPU ocupada).

Agora sabemos que definitivamente havia uma contenção de CPU. Se você tivesse mais de 408 CPUs disponíveis em vez de 2 e assumindo que todos os segmentos poderiam rodar a plena velocidade em paralelo, você teria reduzido estes 2.5 segundos para cerca de 6 ms . Isso teria um efeito dramático na aplicação interativa, mas não tanto em um trabalho em lote, pois o tempo restante não teria benefício das CPUs extras de qualquer maneira.

Linha de fundo:

Se a sua aplicação é interactiva, o seu sistema está seriamente sobrecarregado, se não estiver entre um pouco sobrecarregado e apenas "normal".

Há uma desvantagem a considerar, 6 ms é provavelmente "muito bom" para um tempo de resposta e 408 CPU é muito caro. Assumir que 60 ms é uma meta mais razoável, cerca de 40 CPUs podem funcionar e, claro, se 2.5 s estiver bem, seu sistema está se comportando corretamente.

Geralmente, uma boa prática é assumir que existe uma contenção quando o tamanho médio da fila de execução excede o número de CPUs, aqui ~ 37 vs 2. Descobrir se é um problema ou não, não pode ser feito sem analisar quais aplicativos e threads são afetados e como isso afeta a operação da plataforma.

    
por 21.03.2017 / 23:34
-1

As médias de carga > > 1 e a alta porcentagem de inatividade são geralmente um sinal de disco rígido de E / S. Isso pode ser útil para descobrir o motivo.

    
por 11.01.2012 / 18:17