Problema: 100% de consumo de CPU

Figura1_CapaConsumo100CPU

Quando comecei na programação o fato de um código meu consumir 100% de CPU era muito preocupante. Neste post vou falar um pouco sobre isso e descrever porque cada vez menos programadores estão se preocupando com este problema cujo principal sintoma é a lentidão.

Figura2_Consumo100CPUUm dos tópicos importantes que aprendemos quando estamos dando os primeiros passos na programação tradicional é o uso de estruturas de repetição, tais como o while ou for. Estas estruturas são relativamente independentes de linguagem de programação e, se mal utilizadas, podem causar o famoso sintoma de 100% de CPU. Geralmente isso acontece quando se há um problema do tipo loop infinito onde o fluxo de execução roda indefinidamente por algum erro no controle do índice ou da expressão lógica que faz a saída do loop. Também é comum problemas de IO relacionados a programação síncrona gerarem custo excessivo de CPU.

Quando comecei a aprender programação sempre me preocupei com os recursos computacionais, pois meu aprendizado inicial foi em uma época onde o hardware (CPU, memória, disco, IO, tela, etc) era limitado. Portanto, fazia muito sentido descobrir se algum programa meu acabou entrando em um loop infinito ou por algum outro motivo utilizava muita CPU ao ponto das ferramentas de monitoria do sistema operacional indicarem o consumo de 100%.

Figura3_TopLinux100CPUAtualmente o cenário é bem diferente: temos diversos núcleos no processador (cores) que escalonam processos, máquinas virtuais como uma camada a mais na programação (máquinas virtuais do Java e .NET framework da Microsoft), servidores completamente virtualizados e separados do hardware principal, consoles de videogame e dispositivos móveis que possuem poucos recursos para monitorar CPU e uma abundância de recursos computacionais. Isso sem contar os diferentes contextos e camadas onde é possível programar (dentro do banco de dados com SQL, no lado cliente de um browser com JavaScript, dentro de um controlador em uma placa Arduino, etc). Às vezes fico com a impressão que a técnica de programar e verificar se o que foi feito gera 100% de consumo de CPU é uma arte que está sendo perdida com o tempo….



Acredito que mesmo com tantos contextos, tecnologias e formas diferentes de se programar um profissional deve, no mínimo, saber monitorar e ver se o seu programa está consumindo muitos recursos e produzindo o famigerado 100% de consumo de CPU. A propósito, existem diversos problemas que podem ser gerados quando o a CPU é consumida a 100% por muito tempo. Além da maior demanda por refrigeração do processador ou micro controlador, o sistema operacional não terá ciclos suficientes para realizar suas tarefas e, no pior caso, o sistema ficara completamente travado gerando problemas de usabilidade em aplicações Web, banco de dados, jogos mobile e outros. Há também questões de custo se considerarmos um código que roda dentro de uma plataforma de nuvem que cobra por uso de CPU. Enfim, este não é um cenário desejado para quem desenvolve aplicações.

Figura4_MapaCalorRPI_100CPUSe um programador não ficar atendo o consumo de CPI do seu código é possível que ele atribua os problemas a outras origens. Não raro encontro programadores que culpam o hardware pela lentidão de sistemas sendo na, na verdade, algum pedaço de software foi mal escrito e está causando 100% de CPU. É verdade que atualmente existem muitos recursos automáticos do ambiente de execução e produção de código que evitam o consumo excessivo de CPU, mas mesmo assim isto ainda acontece. E nem sempre é por causa de um loop infinito.

Esta entrada foi publicada em Programação e marcada com a tag , , , , , , , , , , , . Adicione o link permanente aos seus favoritos.

2 respostas a Problema: 100% de consumo de CPU

  1. Julio Wittwer disse:

    Boa Mauro. Na era Neolítica da microinformática, 32 KB tinha que dar conta do recado. CPUS de 8 MHZ e acesso lento a disco obrigavam o programador a tomar mais cuidado ao consumir recursos, senão a aplicação abendava.

    Hoje ainda existe esta preocupação, mas ela parece mais forte em aplicações de missão crítica, embarcados e mobile.. as aplicações empresariais que não se preocupam com isso estão fadadas a não escalar direito, e super-dimensionar o hardware. Quem toma providências neste sentido fatalmente ganha um bom diferencial competitivo 😀

  2. Antonio Souza disse:

    Em alguns casos tudo roda maravilhoso até o usuário mexer nos arquivos .config e depois de um tempo de uso a CPU ficar maluca. Já passei por isso no Squid3.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *