Sua melhor aposta é usar o depurador Java e ver o que os encadeamentos da JVM estão fazendo. É realmente difícil dizer, a partir de uma chamada do sistema, o que está acontecendo.
Temos um programa JAVA lento em uma zona do Solaris 10. Eu corri um truss
no pid e notei que as seguintes mensagens são geradas mesmo quando o programa não está fazendo nada:
pollsys(0x00000000, 0, 0xFFFFFFFE14DFEEC0, 0x00000000) = 0^M
/51: timeout: 0.010000000 sec^M
/51: pollsys(0x00000000, 0, 0xFFFFFFFE14DFEEC0, 0x00000000) = 0^M
/51: timeout: 0.010000000 sec^M
/29: pollsys(0x00000000, 0, 0xFFFFFFFE242FF970, 0x00000000) = 0^M
/29: timeout: 0.050000000 sec^M
/51: pollsys(0x00000000, 0, 0xFFFFFFFE14DFEEC0, 0x00000000) = 0^M
/51: timeout: 0.010000000 sec^M
/51: pollsys(0x00000000, 0, 0xFFFFFFFE14DFEEC0, 0x00000000) = 0^M
/51: timeout: 0.010000000 sec^M
/51: pollsys(0x00000000, 0, 0xFFFFFFFE14DFEEC0, 0x00000000) = 0^M
/51: timeout: 0.010000000 sec^M
/29: pollsys(0x00000000, 0, 0xFFFFFFFE242FF970, 0x00000000) = 0^M
/29: timeout: 0.050000000 sec^M
/22: lwp_cond_wait(0x101585840, 0x101585828, 0xFFFFFFFE250FE960, 0) Err#62 ETIME^M
/63: pollsys(0xFFFFFFFE135FE458, 1, 0xFFFFFFFE135FE380, 0x00000000) = 0^M
/63: fd=46 ev=POLLIN rev=0^M
/63: timeout: 0.100000000 sec^M
Também é precedido / seguido por:
lwp_mutex_timedlock(0xFFFFFFFF7EAF2AE0, 0x00000000) = 0^M
/62: pollsys(0xFFFFFFFE137FE4D8, 1, 0xFFFFFFFE137FE400, 0x00000000) = 0^M
/62: fd=32 ev=POLLIN rev=0^M
/62: timeout: 0.100000000 sec^M
/63: lwp_mutex_wakeup(0xFFFFFFFF7EAF2AE0, 0) = 0^M
/51: pollsys(0x00000000, 0, 0xFFFFFFFE14DFEEC0, 0x00000000) = 0^M
/51: timeout: 0.010000000 sec^M
/37: lwp_mutex_timedlock(0xFFFFFFFF7EAF2AE0, 0x00000000) = 0^M
/37: lwp_mutex_wakeup(0xFFFFFFFF7EAF2AE0, 0) = 0^M
/61: lwp_mutex_timedlock(0xFFFFFFFF7EAF2AE0, 0x00000000) = 0^M
Nós saberíamos o que isso pode significar? De qualquer forma para descobrir mais sobre isso? Eu li que podemos executar dtrace
, mas existe algum outro utilitário que possamos executar para chegar onde a lentidão está acontecendo. O aplicativo leva muito tempo para executar consultas básicas, o que funciona muito mais facilmente em um servidor Windows.
Sua melhor aposta é usar o depurador Java e ver o que os encadeamentos da JVM estão fazendo. É realmente difícil dizer, a partir de uma chamada do sistema, o que está acontecendo.
Você está vendo os mutexes de manipulação da JVM (bloqueios). Esperar por um bloqueio pode fazer com que um thread fique parado sem usar muito tempo de CPU, mas sem fazer nenhum progresso (!)
- dave
Tags performance java solaris dns-zone