Como posso descobrir se um processo está vinculado à CPU, memória ou disco?
Como posso descobrir se um processo está vinculado à CPU, memória ou disco?
Respostas:
Isso requer algum vodu. Depende. Exemplo:
Se houver memória suficiente e os discos não parecerem muito ocupados, pode ser vinculado à CPU. Observe o uso da CPU e, se estiver na faixa de 100%, é vinculado à CPU. Caso contrário, há um gargalo artificial na implementação. Por exemplo, em uma CPU de núcleo duplo, um único processo encadeado não ultrapassará 50% de uso da CPU.
Se a CPU e a memória estiverem disponíveis, mas os discos estiverem muito ocupados ou a latência de E / S parecer alta, é provável que ela esteja ligada. Veja se a adição de mais discos (RAID?) Ajuda.
Nenhuma das acima? Verifique a memória disponível.
Memória suficiente? Pode haver um gargalo artificial no próprio processo, ou seja, talvez alguém tenha se esquecido de remover o sono (1)? Naah normalmente não é assim tão fácil. ;)
Há uma razão pela qual temos um laboratório inteiro para engenheiros de desempenho na maioria das empresas que lidam com produtos sensíveis ao desempenho!
Use ferramentas como sar, vmstat, iostat, oprofile, lockstat, dtrace, ferramentas específicas de monitoramento de perf, etc. para depurar problemas de perf.
Assim como as outras ferramentas mencionadas, execute ps l PID
, inserindo o ID do processo relevante ou consulte as colunas STATE e WCHAN na parte superior ou no htop.
Se estiver no estado D (para disco), estará executando o arquivo IO. Isso pode ser porque está lendo muitos arquivos ou porque está usando muita memória e troca. A coluna WCHAN lhe dirá qual função do kernel está dentro; pesquisar no Google ou perguntar aqui pode dar uma indicação do que eles significam.
Se estiver no estado R (execução), está usando a CPU no espaço do usuário, ou seja, a CPU está ligada naquele momento.
Se estiver no estado S (inativo), está dentro de uma chamada de sistema interrompível, o que pode significar que ele está realmente dormindo ou está fazendo algo como aguardar o tráfego de rede ou um bloqueio. Mais uma vez, olhar para o wchan específico lhe dirá mais.
Veja também O que é o "Canal em espera" de um processo?