Solução de problemas com uso elevado da CPU Sy

0

Estou executando um servidor Supermicro com o Ubuntu 14.04.4 LTS. Temos um aplicativo que está maximizando o tempo do sy cpu, enquanto mal toca no espaço do usuário. Eu corro o mesmo aplicativo em hardware mais antigo, com o Ubuntu 12.04.4 LTS e o cpu é muito mais balanceado entre usuário e sistema. Eu usei strace para obter algumas informações de desempenho sobre o processo, e vejo epoll_wait ocupando 98% do tempo de CPU do sistema. Não consigo encontrar muita informação sobre essa ligação, e o que eu acho que não estou entendendo. Alguém pode lançar alguma luz sobre isso, por favor?

    
por scott 24.02.2016 / 19:34

2 respostas

1

Você pode ver onde a CPU está sendo consumida com mais detalhes usando "perf":

Instalar o perf:

sudo apt-get install linux-tools-$(uname -r)

Em seguida, inicie o programa que consome todos os recursos da CPU

Em seguida, execute perf e capture todos os eventos de programação por 60 segundos:

sudo perf record -a sleep 60

Depois de concluído, você pode obter um registro de todos os eventos perf usando:

sudo perf script > perf.log

e você pode ver isso, ou melhor, pode-se observar interativamente os pontos de acesso da CPU usando:

sudo perf report
    
por Colin Ian King 24.02.2016 / 23:55
0

Se você puder capturar a saída do rastreamento do programa usando a opção -e epoll_wait apenas para capturar o epysc syscall e adicionar isso a essa pergunta, poderemos descobrir o que está acontecendo.

A chamada de sistema epoll_wait está basicamente esperando por alguns eventos epoll e um alto consumo de CPU em chamadas de sistema epoll_wait pode significar que um tempo limite fornecido é muito pequeno e isso está causando muitas dezenas de milhares de chamadas epoll_wait se estiver em um loop ou que existem muitos eventos ocorrendo e o epoll_wait está aguardando e o código está sendo manipulado. Alternativamente, pode ser um bug no programa e está girando em algum tipo de erro. As condições de erro típicas seriam EINVAL, em que um parâmetro inválido está sendo passado para a chamada do sistema ou EBADF, em que um descritor de arquivo inválido está sendo usado (possivelmente de uma falha na abertura)

Então, altere o programa novamente:

strace -f -e epoll_wait program-name >& strace.log

e veja que tipo de falhas epoll_wait estão ocorrendo (retorno de -1). Se não houver falhas, verifique se ocorre um tempo limite (0) ou se um descritor de arquivo está pronto para E / S (retorno > 0).

    
por Colin Ian King 24.02.2016 / 20:29