Solaris 10 区域的性能问题。多个 pollsyscalls

Solaris 10 区域的性能问题。多个 pollsyscalls

我们在 Solaris 10 Zone 上运行的 JAVA 程序运行缓慢。我truss在 pid 上运行了一个程序,发现即使程序没有执行任何操作,也会生成以下消息:

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 服务器上运行则要顺畅得多。

答案1

最好的办法是使用 Java 调试器,查看 JVM 线程正在做什么。从系统调用跟踪中很难判断发生了什么。

答案2

您正在查看 JVM 操作互斥锁 (锁)。等待锁可能会导致线程闲置,不会占用太多 CPU 时间,但不会取得任何进展 (!)

--戴夫

相关内容