我们在Solaris 10区域上运行的JAVA程序运行缓慢。 我在pid上运行了一个truss ,发现即使程序没有做任何事情,也会产生下面的消息:
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
这也是之前/之后:
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
我们知道这可能意味着什么吗? 无论如何要更多地了解它? 我读过,我们可以运行dtrace ,但还有其他的工具可以运行,以获得发生缓慢的地方。 该应用程序需要花费大量的时间来运行基本查询,这在Windows服务器上运行得更顺畅。
你最好的select是使用Javadebugging器,看看JVM线程在做什么。 系统调用跟踪发生了什么真的很难说。
您正在查看操作互斥锁(锁)的JVM。 等待锁可以使一个线程坐在不占用太多的CPU时间,但没有任何进展(!)
–dave