Preciso verificar o uso de CPU e memória do servidor em java, alguém sabe como isso poderia ser feito?
java
operating-system
cpu
ram
Johnny Bou
fonte
fonte
Respostas:
Se você estiver procurando especificamente por memória na JVM:
No entanto, estes devem ser considerados apenas como uma estimativa ...
fonte
fonte
freeMemory
aqui retorna a quantidade de memória disponível na JVM que é muito diferenteSe você estiver usando o Sun JVM e estiver interessado no uso da memória interna do aplicativo (quanto da memória alocada seu aplicativo está usando), prefiro ativar o registro de coleta de lixo integrado do JVM. Você simplesmente adiciona -verbose: gc ao comando de inicialização.
Da documentação da Sun:
Para obter mais informações, consulte: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
fonte
A partir daqui
fonte
operatingSystemMXBean.getProcessCpuLoad();
? De acordo com a documentação do Oracle, este método retorna "Retorna o" uso recente da CPU "para o processo da Java Virtual Machine." No entanto, vejo uma diferença numérica relativamente grande entre seu método e este método.OperatingSystemMXBean
classes. Uma é a interface fornecida emjava.lang
. Mas também há outra versão, que estende esta emcom.sun.management
. Esse é o método que eu estava me referindoOperatingSystemMXBean
JMX, o MXBeans (ThreadMXBean, etc) fornecido fornecerá os usos de memória e CPU.
fonte
Para uso de memória, o seguinte funcionará,
Para o uso da CPU, você precisará usar um aplicativo externo para medi-lo.
fonte
Desde o Java 1.5, o JDK vem com uma nova ferramenta: JConsole que pode mostrar o uso de CPU e memória de qualquer JVM 1.5 ou posterior. Pode fazer gráficos desses parâmetros, exportar para CSV, mostrar o número de classes carregadas, o número de instâncias, deadlocks, threads etc ...
fonte
Se você usar a solução runtime / totalMemory que foi postada em muitas respostas aqui (eu fiz muito isso), certifique-se de forçar duas coletas de lixo primeiro se quiser resultados razoavelmente precisos / consistentes.
Para eficiência, o Java geralmente permite que o lixo encha toda a memória antes de forçar um GC, e mesmo assim não é geralmente um GC completo, então seus resultados para runtime.freeMemory () sempre estarão em algum lugar entre a quantidade "real" de memória livre e 0 .
O primeiro GC não consegue tudo, ele consegue a maior parte.
A melhora é que se você apenas fizer a chamada freeMemory (), obterá um número que é absolutamente inútil e varia muito, mas se você fizer 2 gc's primeiro, é um medidor muito confiável. Também torna a rotina MUITO mais lenta (segundos, possivelmente).
fonte
O objeto Runtime do Java pode relatar o uso de memória da JVM. Para o consumo da CPU você terá que usar um utilitário externo, como o top Unix ou o Gerenciador de Processos do Windows.
fonte
Aqui está um código simples para calcular o uso de memória atual em megabytes:
fonte
Eu também adicionaria a seguinte maneira de rastrear a carga da CPU:
Você pode ler mais aqui
fonte
JConsole é uma maneira fácil de monitorar um aplicativo Java em execução ou você pode usar um Profiler para obter informações mais detalhadas sobre seu aplicativo. Gosto de usar o Perfilador do NetBeans para isso.
fonte
O profiler YourKit Java é uma excelente solução comercial. Você pode encontrar mais informações nos documentos sobre perfis de CPU e perfis de memória .
fonte
Se você estiver usando o Tomcat, verifique Psi Probe , que permite monitorar o consumo de memória interna e externa, bem como uma série de outras áreas.
fonte
Para Eclipse, você pode usar TPTP (plataforma de ferramentas de teste e desempenho) para analisar o uso de memória e etc. mais informações
fonte