Java processo comendo CPU; Por quê?

1

Eu tenho um servidor Linux no qual instalei o Java.

Às vezes, e apenas algumas vezes, quando um grande número de visitantes visita meu site, o site trava.

Quando abro o terminal e entro no comando "top" para ver o que está acontecendo, vejo que o processo " Java " está comendo CPU! Como 400%.

Eu também tentei o comando ps aux , e posso ver que o comando é de usr / bin / java

Eu tenho pouca experiência em solucionar esse tipo de problema, por isso recorro a vocês em busca de ajuda.

Eu tenho um contêiner de java instalado ( Jetty ) que devo ter para usar o SOLR (mecanismo de pesquisa) que é integrado ao meu site.

Eu posso começar e parar o SOLR por:

  etc/init.d/solr stop

Mas isso não removeu o processo java do comando "Top". Ainda java estava comendo 400% da CPU.

Existem outros métodos para reiniciar apenas o java?

Isso aconteceu duas vezes para mim e, a cada vez, reiniciei todos os meus servidores e está tudo bem.

Se você precisar de mais informações, avise-me!

    
por Anonymous12345 04.01.2011 / 19:50

3 respostas

3

Se você parar o processo solr e um processo java ainda estiver em execução, haverá outro processo java em seu servidor. A primeira etapa é documentar todos os processos Java em execução. Uma boa ferramenta para isso no Unix é a ferramenta ps . Tente isto:

$ ps auxwww | grep java

Essa saída deve mostrar todos os processos Java em execução e os comandos que estão sendo executados. Tente isso antes e depois de parar o sol.

A segunda questão é "qual desses processos java está consumindo tanto CPU"? Você pode precisar interromper o processo de jetty além do processo de solr. Além disso, você nunca precisa realmente reiniciar um servidor Linux apenas porque um único processo está se comportando mal. Você também pode usar o comando kill para interromper um processo se agora for o ID do processo, que pode obter em top ou ps .

A curto prazo, pode ser uma boa ideia instalar algum tipo de script "watchdog" em sua máquina para ajudar nessas situações. Por exemplo, monit pode ser usado para reiniciar automaticamente um serviço ou processo quando ele consome uma certa quantidade de recursos da CPU.

A longo prazo, lamento dizer que você tem um problema de desempenho. Você precisa olhar para reconfigurar solr e jetty no mínimo. Você também pode precisar examinar o ajuste da coleta de lixo e, possivelmente, adicionar mais hardware. Há muitas informações sobre esses tópicos on-line e lamento dizer que esse processo pode ser um pouco difícil.

Boa sorte!

Tom Purl

    
por 04.01.2011 / 22:08
2

Se a CPU está sendo maximizada enquanto os tempos de resposta estão caindo, então o primeiro lugar que estou procurando é o gerenciamento de heap dentro do java - provavelmente está fazendo muitas coleções importantes - e a maneira mais rápida de resolver o problema é para apenas dar ao contêiner mais memória para ser executado.

    
por 05.01.2011 / 01:50
-1

Este não é o lugar certo para fazer a pergunta de depuração do programa. Se o Solr for o único aplicativo Java em execução, você deve verificar com que frequência o índice do Lucene está sendo atualizado e quantas consultas de pesquisa você está executando por segundo quando o servidor é iniciado fica sobrecarregado.

    
por 04.01.2011 / 20:23