1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Falta de Memória JVM KingHost

Seguinte, estou colocando um sistema na KingHost, porém, o mesmo rapidamente consome toda a memória, dando erro:

503 - Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

Já acompanhei e testei o sistema localmente utilizando o jconsole e o mesmo não ultrapassa 50 MB no consumo, porém, mesmo a hospedagem da KingHost dizer que são 128 MB ocorre o problema acima.

Coloquei um código no início da página, para monitorar a memória:

// tem memória?
        long totalMemory = Runtime.getRuntime().totalMemory();
        long freeMemory = Runtime.getRuntime().freeMemory();

        out.print(" TotalMemory: " + totalMemory / 1024);
        out.print(" FreeMemory: " + freeMemory / 1024);
        out.print(" %: " + (double) freeMemory / (double) totalMemory * 100);

        if (((double) freeMemory / (double) totalMemory * 100) <= 15) {
            // chamo o GC
            out.print("GC");
            Runtime.getRuntime().gc();
        }

        if (((double) freeMemory / (double) totalMemory * 100) <= 7) {
            // travo a página (memória muito baixa)
            out.print("Memória muito baixa!!!");
            out.close();
        }

Mesmo assim, antes de chamar o GC, já dá o erro, alguma dica de como evitar que o sistema "derrube" a VM, porque a quantidade de memória que a KingHost informa não coincide com a memória exibida?

Resultado de rodar o código acima:

TotalMemory: 64356352 FreeMemory: 48775440 %: 75.7896283493508

Mensagem no log do painel da Kinghost:

1544 18176 0.1 1.0 673748 178252 ? Sl Jun06 1:11 /usr/java/j2sdk//bin/java -Dnop -server -Duser.dir=/home/redefacilcred -Xmx128M -Xms64M -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/tomcat//endorsed -classpath :/home/tomcat//bin/bootstrap.jar -Dcatalina.base=/home/redefacilcred -Dcatalina.home=/home/tomcat/ -Djava.io.tmpdir=/home/redefacilcred/temp org.apache.catalina.startup.Bootstrap start

Já revisei o código para consumir o mínimo de memória, agora estou tentando evitar que o programa "derrube" a VM, mas não consegui, se alguém tiver mais alguma dica de como fazer isso.

Obrigado.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java jsp jvm memória ou faça a sua própria pergunta.