Estou com problemas no funcionamento de um programa Java no meu serviço. Esse programa basicamente recebe arquivos texto de entrada, lê esses arquivos, grava informações referentes a eles num Banco de dados e grava os mesmos em disco novamente com modificações em seu conteúdo. Esse programa funcionava normalmente consumindo as vezes 80% da CPU do servidor onde ele roda. Porém, de uma hora para outra, o mesmo passou a utilizar somente 2% da CPU, fazendo com que a performance do mesmo ficasse horrível em vista do que era anteriormente. Vale lembrar que não fiz qualquer alteração no código do mesmo nem alguma configuração na JVM ou mesmo no .bat que chama o .jar do mesmo. Já pedi que trocassem o disco rígido onde o mesmo lê e grava os arquivos texto, porém não adiantou, o consumo de CPU continua muitíssimo baixo.
gostaria que vocês me sugerissem algumas tentativas que eu possa fazer para que o consumo de CPU volte a ser o normal, voltando a perfomance inicial que o programa tinha.
o que da pra se olhar considerando que vc não mexeu em nada no codigo fonte dele, é ver em que prioridade ele ta rodando no seu SO.
no windows, ctrl alt e del, vai na parte de processos, encontre o processo dele, clicando com o botão direito, vai ter a opção “definir prioridade”, e ai la vc ve qual que ta… isso eu sei q é assim no windows xp, mais creio eu que outros não sejam tão diferentes…
no linux tem comando pra isso mais eu não me lembro, dando uma googada da pra descobri numa boa…
de repente da pra olha no codigo, no que estiver mexendo com threads, as partes que usa o metodo .sleep por exemplo… sei la…
Houve alguma alteração na configuração do seu banco de dados, se ele ficar em uma outra máquina na mesma rede?
Pode ser problema no servidor DNS (ponha o hostname da máquina do banco de dados em /etc/hosts ou \windows\system32\drivers\etc\hosts, para não usar o serviço DNS para achar o endereço dessa máquina.)
Não alterou o Codigo !!!
A havia alto consumo da CPU e agora baixo consumo exporadicamente…
O que esta envolvendo é a intensão ao aplicativo ou recursos de aplicações dando start d e outros serviços, em paralelo usados pelo S.O, uma possibilidade.
Não há concorrência de processos nesse servidor onde a aplicação roda. O Servidor é dedicado somente ao processamento que a aplicação executa, portanto o problema não se deve à concorrência.
O Servidor de Banco de Dados que é utilizado pela aplicação fica na mesma rede, e o acesso que a aplicação faz ao banco via Hibernate já é pelo IP e não pelo nome do servidor.
Eu já tentei rodar a aplicação colocando a prioridade da mesma no máximo, porém o uso de CPU continua muito baixo, entre 2% e 3%.
A aplicação só utiliza threads depois que todo o processamento é efetuado, onde o consumo de CPU está baixo não utilizo threads.
Por que em vez de ficar chutando onde está o problema, você não usa um profiler e identifica onde o está o gargalo do seu sistema?
Segue uma lista de profilers: http://java-source.net/open-source/profilers