我们的JVM中的安全点操作有时需要很长时间才能同步线程。但是,在这些情况下,旋转和阻塞时间非常短。 常见原因显示为<100ms旋转,但超过30秒长达4分钟的同步时间。
到目前为止,无论是在Safepointtimeout上转储线程,还是尝试对当时发生的情况进行日志分析都没有帮助。
该系统是在Windows Server VM上使用JMF(和JDK 1.7)的实时RTP流应用程序。
使用的JVM标志:
-server
-Xloggc:./Log/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xmx2G
-XX:-OmitStackTraceInFastThrow
-XX:+PrintSafepointStatistics
–XX:PrintSafepointStatisticsCount=1
-XX:+SafepointTimeout
-XX:SafepointTimeoutDelay=20
安全点的日志如下(包括一些周围的日志)
55577.063: RevokeBias [ 2122 0 3 ] [ 0 0 0 0 0 ] 0
55577.066: BulkRevokeBias [ 2126 168 4 ] [ 49 0 94867 2 13 ] 0
55671.953: RevokeBias [ 2111 1 0 ] [ 0 0 15 1 16 ] 0
56867.883: RevokeBias [ 1742 0 1 ] [ 0 0 0 0 0 ] 0
56868.738: RevokeBias [ 1746 457 1 ] [ 88 0 39473 2 0 ] 0
56908.219: RevokeBias [ 1755 0 5 ] [ 0 0 0 1 0 ] 0
我想知道什么样的情况会导致这些大量的同步时间,而又不算为旋转或阻塞时间。
提前谢谢