Java cupando 100% da CPU

13 respostas
wagne23

Boa tarde, eu percebi que todas as vezes que eu tenho que trabalhar com arquivos textos tanto na leitura quanto na escrita o meu processo ocupa totalmente a cpu. Ja testei com FileWriter e com OutputStreamWriter e o resultado é o mesmo. Alguem tem uma solução para isso?

13 Respostas

guisantogui

Um computador melhor! :B

hehehehe!

não sei msm nunca tinha notado!

wagne23

Ta certo que meu pc não é lá de ultima geração, mas coloco muitos jogos rasuaveis que não pesam a metade que esse processo está ocupando. É um Pentium 4. 3ghz.

M

Você lê vários arquivos pequenos ou apenas alguns grandes?

Geralmente esse comportamento (alto uso de CPU) ocorre ao ler vários arquivos pequenos, pois o consumo é alto para localizar em que setor está o arquivo no sistema de arquivos (em caso de sistemas que se fragmentam o problema geralmente é maior), para disponibilizá-los para seu programa e depois para liberar os recursos disponíveis.

Se essas operações acontecem em um período muito curto (ou seja, os arquivos são lidos rapidamente, portanto pequenos) o consumo geralmente é alto.

guisantogui

To de arriação mano, nem skenta, mas tipo eu nem sabia q salvar o arquivo dava isso :?

Vlw pela curiosidade! :smiley:

M

O exemplo claro disso é que quando você acessa as propriedades de uma pasta grande o consumo de CPU é alto por alguns instantes.

Isso ocorre durante a contagem de arquivos e o tamanho deles. O conteúdo não é lido, mas o processo de localizar e contabilizar muitos arquivos leva ao alto uso do processador.

Rafael_Marques1

talvez um thread pode ajudar um pouco

wagne23

Normalmente eu leio de uma tabela em algum banco de dados ou de outro txt, ai vou salvando em uma variavel e depois mando gravar em um txt. Normalmente demora uns 5 a 10 minutos com a cpu a 100%.

B

Se for só leitura e escrita de arquivos, esse comportamento não é normal. Deve ter alguma coisa na tua arquitetura que tá errada, ou que faz muita coisa mesmo.

Ou talvez algum antivirus que esteja atrapalhando o processo.

M

Nesse caso de gravar em apenas um arquivo realmente não é normal. Além disso, 10 minutos com um P4 em 100% é muita coisa…

ViniGodoy

Se esse seu arquivo for gigante, realmente, processa-lo pode ser uma tarefa exclusivamente do processador e sua CPU ir facilmente a 100%. Mas esse não deve ser o seu caso.

Um primeiro passo é usar um profiler, e ver exatamente que ponto do seu código está consumindo tanto CPU. Provavelmente é algum erro de lógica. Sugiro que use o Visual VM, que já acompanha o próprio Java:
https://visualvm.dev.java.net/

ViniGodoy

O mais engraçado é que um sleepTime de 0 num wait faz o Java esperar para sempre. Eu achei a escolha do valor péssima, por mim, tinha que ser -1 e o 0 continuar significando “nada”.

WellingtonRamos

Uma vez, por erro de código, ocorreu o mesmo problema:

while(verificaCondicao()) { Thread.sleep(sleepTime); }

Só que a variavel sleepTime estava com valor 0 (era lido de um arquivo properties e alguém zerou o valor).
O consumo da CPU subiu muito pois era uma condição muito “atômica” (o verificaCondicao lia uma “variável booleana estática” que era alterada por outra thread que corria em paralelo, por exemplo).

Loops muito atômicos tendem a fazer isso com a CPU (especialmente se for núcleo único).

WellingtonRamos

Concordo. Tosco isso. Mas ainda tem como notificar e fazer a thread continuar. Já no caso do sleep…

Criado 15 de abril de 2010
Ultima resposta 15 de abr. de 2010
Respostas 13
Participantes 7