Surto de CPU? Esses três cenários principais ajudarão você a se posicionar com precisão

1 Métodos de análise de carga comumente usados

Alta CPU, alta carga

  1. Use  top o comando para encontrar o PID do processo com maior uso de CPU;

  2. Encontrando top -Hp PIDo TID do thread que ocupa a CPU mais alta;

  3. Para javaprogramas, use jstackinformações da pilha de threads de impressão;

  4. Imprimindo printf %x tido hexadecimal do thread que mais consome CPU;

CPU baixa, carga alta

O motivo pode ser resumido em uma frase: há muitos processos aguardando a conclusão da E/S do disco, resultando em um comprimento excessivamente grande da fila de processos, mas há muito poucos processos em execução na CPU, o que reflete carga excessiva e baixo Utilização do CPU.

  • topVerifique o tempo de espera da UCP através de comandos, ou seja %wa;

  • Verificando iostat -d -x -m 1 10o status IO do disco; (comando de instalação  yum install -y sysstat)

  • Verificando sar -n DEV 1 10a situação de IO da rede;

  • Use o seguinte comando para localizar programas que ocupam IO;

ps -e -L h o state,cmd  | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr

2 Análise de situações de alta CPU e alta carga

  • Use vmstat para visualizar a carga da CPU na latitude do sistema;

  • Use para  top visualizar a carga da CPU na latitude do processo;

2.1 Use vmstat para visualizar a carga da CPU da latitude do sistema

Você pode usar vmstat para visualizar o uso de recursos de CPU na dimensão do sistema.

Formato: vmstat -n 1 -n 1 indica que os resultados são atualizados uma vez por segundo

[root@VM-1-14-centos ~]# vmstat -n 1procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 1  0      0 250304 163472 2154300    0    0     1    16    0    4  1  0 98  0  0 0  0      0 250412 163472 2154332    0    0     0     0  937 1439  1  1 99  0  0 0  0      0 250428 163472 2154332    0    0     0     4  980 1329  0  0 100  0  0 0  0      0 250444 163472 2154332    0    0     0     0  854 1227  0  0 99  0  0 0  0      0 250444 163472 2154332    0    0     0    68  832 1284  0  1 99  1  0 0  0      0 250016 163472 2154332    0    0     0     0  929 1389  1  1 99  0  0

Descrição das principais colunas de dados nos resultados retornados:

  • r : Indica os threads aguardando para serem processados ​​pela CPU no sistema. Como a CPU só pode lidar com um thread por vez, um número maior geralmente significa um sistema mais lento.

  • b : Indica um processo bloqueado. Não vou falar muito sobre isso. Todo mundo sabe que o processo está bloqueado.

  • us : Tempo de CPU do usuário. Certa vez, eu estava em um servidor que executava criptografia e descriptografia com frequência. Pude ver que us estava perto de 100 e a fila de execução atingiu 80 (a máquina estava fazendo testes de estresse e seu desempenho era ruim).

  • sy : Tempo de CPU do sistema, se for muito alto, significa que o tempo de chamada do sistema é longo, como operações IO frequentes.

  • wa : Porcentagem de tempo de CPU consumido pela espera de IO. Quando o valor é alto, indica que a espera de IO é grave, o que pode ser causado por um grande número de acessos aleatórios no disco ou pode ser um gargalo no desempenho do disco.

  • id : a porcentagem de tempo de CPU ociosa. Se o valor for continuamente 0 e sy for o dobro de nós, geralmente significa que o sistema está enfrentando falta de recursos de CPU.

Perguntas frequentes e soluções:

  • Se r costuma ser maior que 4 e id costuma ser menor que 40, isso significa que a CPU está muito carregada.

  • Se pi e po não forem iguais a 0 por muito tempo, significa memória insuficiente.

  • Se o disco geralmente não for igual a 0 e a fila em b for maior que 3, isso indica um desempenho de E/S ruim.

2.2 Use top para visualizar a carga da CPU das dimensões do processo

Você pode usar top para visualizar o uso de CPU, memória e outros recursos a partir da latitude do processo.

top - 19:49:59 up 36 days, 23:15,  3 users,  load average: 0.11, 0.04, 0.05Tasks: 133 total,   1 running, 131 sleeping,   0 stopped,   1 zombie%Cpu(s):  3.1 us,  3.1 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem :  3880188 total,   241648 free,  1320424 used,  2318116 buff/cacheKiB Swap:        0 total,        0 free,        0 used.  2209356 avail Mem   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                1793 mysql     20   0 1608796 236708   9840 S   6.7  6.1  83:36.23 /usr/sbin/mysqld                                        1 root      20   0  125636   3920   2444 S   0.0  0.1   4:34.13 /usr/lib/systemd/systemd                                     2 root      20   0       0      0      0 S   0.0  0.0   0:00.90 [kthreadd]                                                                                                4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [kworker/0:0H]                                                                                            6 root      20   0       0      0      0 S   0.0  0.0   0:15.46 [ksoftirqd/0]                                                                                             7 root      rt   0       0      0      0 S   0.0  0.0   0:12.02 [migration/0]

A terceira linha na interface padrão exibirá o uso geral atual dos recursos da CPU e o uso de recursos de cada processo será exibido abaixo.

Você pode inserir diretamente as letras P superior e inferior na interface para classificar os resultados do monitoramento na ordem inversa do uso da CPU, localizando assim o processo que ocupa uma CPU maior no sistema. Por fim, solucione e analise ainda mais o processo correspondente com base no log do sistema e nos logs relacionados do próprio programa para determinar o motivo do uso excessivo da CPU.

3. Baixa CPU, alta carga

Descrição do Problema

Não há nenhum programa de negócios rodando no sistema Linux, observado por cima, conforme mostrado na figura abaixo, a CPU está muito ociosa, mas a média de carga é muito alta:

analise de problemas

CPU baixa e carga alta significam que há muitos processos aguardando a conclusão da E/S do disco, o que fará com que o comprimento da fila seja muito grande, o que reflete que a carga é muito grande, mas na verdade, a CPU está alocada para realizar outras tarefas neste momento ou Ocioso, os cenários específicos são os seguintes:

Cenário 1: muitas solicitações de leitura e gravação de disco levarão a muita espera de E/S

Como mencionado acima, a eficiência de funcionamento da CPU é maior que a do disco, e o processo em execução na CPU precisa acessar o arquivo do disco.Neste momento, a CPU iniciará uma solicitação ao kernel para chamar o arquivo, e deixe o kernel ir para o disco para buscar o arquivo. Neste momento, ele mudará para outros processos. Ou ocioso, a tarefa fará a transição para um estado de suspensão ininterrupto. Quando houver muitas solicitações de leitura e gravação, haverá muitos processos em estado de suspensão ininterrupto, resultando em alta carga e baixa CPU.

Cenário 2: Existem instruções sem índices ou deadlocks no MySQL

Todos nós sabemos que os dados do MySQL são armazenados no disco rígido. Se você precisar realizar consultas SQL, primeiro precisará carregar os dados do disco para a memória. Quando os dados são particularmente grandes, se a instrução SQL executada não tiver um índice, isso fará com que o número de linhas na tabela de varredura seja muito grande, causando bloqueio de E/S, ou haverá um impasse na instrução, o que também causará bloqueio de E/S, fazendo com que muitos processos de suspensão não possam ser interrompidos, resultando em carga excessiva. A solução específica pode ser executar o comando show full processlist no MySQL para verificar o status de espera do thread e retirar as instruções para otimização.

Cenário 3: O disco rígido externo está com defeito, geralmente o NFS está desligado, mas o servidor NFS está com defeito

Por exemplo, se nosso sistema montar um disco rígido externo, como armazenamento compartilhado NFS, muitas vezes haverá um grande número de solicitações de leitura e gravação para acessar arquivos armazenados no NFS. Se o servidor NFS falhar neste momento, o processo não será capaz de obter recursos para solicitações de leitura e gravação. Como resultado, o processo ficou em um estado ininterrupto, resultando em uma carga elevada.

Solução

  • A média de carga é uma avaliação da carga da CPU, quanto maior o valor, maior será a fila de tarefas e mais tarefas aguardando para serem executadas.

  • Quando isso acontece, pode ser devido a um processo morto. Você pode usar o comando ps -axjf para verificar se existe um processo de estado D.

  • O estado D refere-se a um estado de sono ininterrupto. Os processos neste estado não podem ser eliminados, nem podem sair por si próprios. Só pode ser resolvido restaurando os recursos dos quais depende ou reiniciando o sistema.

Os processos que aguardam E/S estão no estado de suspensão ininterrupta ou D; ao fornecer essas informações, podemos simplesmente encontrar o processo no estado de espera.

ps -e -L h o state,cmd  | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr

Autor: Honest1y
Fonte: https://juejin.cn/post/7016127914454286367

Acho que você gosta

Origin blog.csdn.net/LinkSLA/article/details/132467476
Recomendado
Clasificación