FULL GC有可能导致JVM暂停1分钟以上吗?
qianhd
2011-12-30
与另外个程序交互有个心跳检测, 15s/次, 31s没有收到心跳检测的返回消息就认为连接断了,
现在遇到一个诡异问题, 不知什么原因 导致程序中1分多钟内日志无任何输出, 接着就是检测到超时, 可是接着连续输出多次发送keepalive. 发送keepalive就是很简单的java.util.Timer, 速率固定 启动参数 -Xms16m -Xmx128m -XX:+HeapDumpOnOutOfMemoryError 程序启动时间[15:55:10.225] [23.12.2011] 第一次 [09:51:16.288] [26.12.2011] [Thread-14][DEBUG] Keepalive receiver started or reseted. [09:53:26.819] [26.12.2011] [Timer-9197][ERROR] Keepalive timeout reached [09:53:26.819] [26.12.2011] [Timer-9][DEBUG] Keepalive sent [09:53:26.819] [26.12.2011] [Timer-9][DEBUG] Keepalive sent [09:53:26.819] [26.12.2011] [Timer-9][DEBUG] Keepalive sent [09:53:26.819] [26.12.2011] [Timer-9][DEBUG] Keepalive sent [09:53:26.819] [26.12.2011] [Timer-9][DEBUG] Keepalive sent [09:53:26.819] [26.12.2011] [Timer-9][DEBUG] Keepalive sent [09:53:26.819] [26.12.2011] [Timer-9][DEBUG] Keepalive sent [09:53:26.819] [26.12.2011] [Timer-9][DEBUG] Keepalive sent [09:53:26.819] [26.12.2011] [Timer-9197][DEBUG] Sent <Disconnect/> 重连启动后第二次 [09:57:17.053] [26.12.2011] [Thread-9207][DEBUG] Keepalive receiver started or reseted. [09:58:29.381] [26.12.2011] [Timer-9259][ERROR] Keepalive timeout reached [09:58:29.381] [26.12.2011] [Timer-9259][DEBUG] Sent <Disconnect/> [09:58:29.397] [26.12.2011] [Timer-9200][DEBUG] Keepalive sent [09:58:29.397] [26.12.2011] [Timer-9200][DEBUG] Keepalive sent [09:58:29.397] [26.12.2011] [Timer-9200][DEBUG] Keepalive sent [09:58:29.397] [26.12.2011] [Timer-9200][DEBUG] Keepalive sent |
|
qianhd
2011-12-30
另外 -Xloggc 这个jvm的gc日志能以压缩的形式输出吗? 或者过滤一些.
|
|
RednaxelaFX
2011-12-30
GC暂停超过1分钟的情况不是没有,但以-Xmx128m的配置来看这个很诡异。
请问能使用 -XX:+PrintSafepointStatistics 来看看VM暂停的统计信息么? 一共是这几个参数: product(bool, PrintSafepointStatistics, false, \ "print statistics about safepoint synchronization") \ \ product(intx, PrintSafepointStatisticsCount, 300, \ "total number of safepoint statistics collected " \ "before printing them out") \ \ product(intx, PrintSafepointStatisticsTimeout, -1, \ "print safepoint statistics only when safepoint takes" \ " more than PrintSafepointSatisticsTimeout in millis") \ |
|
qianhd
2011-12-30
应该可以
但是这问题也就遇到过这一次 未必能重现 这地方只要出现过一次的问题 都能报bug 就连temp目录垃圾文件太多 导致程序里创建临时文件太慢 使得程序响应变慢 都能报个bug. |
|
william_ai
2011-12-30
3分钟以内,但是频率不能太高了。
|
|
xiaoyu
2011-12-31
Threaddump 一下. 先看看有没有其他东西在block住... 对于2边网络, 也最好使用tcpdump看一下是否出现什么问题(是不是ARP失效等, 是不是发送, 接收缓冲区满了等等)...
|
|
x_root
2012-01-01
你可以将readTimeout时间设大点,这个问题我以前也遇到过,GC时间过长,导致服务端以为连接无效而关闭了。
不过你的设置-Xmx128m却导致GC要一分多钟却有点不可思议。 |
|
iaimstar
2012-01-04
Xmx128m 也能一分钟以上?你这fullgc是坑爹啊
|
|
moonese
2012-02-27
会不会是对方程序的问题? 最后查出原因了?
|
|
qianhd
2012-02-29
最终没有查出原因, 因为很难复现
这破烂货一般来说只要开3天以上, 就会有很多莫名其妙的问题. 所以建议用户不用就关掉 从上面的[Timer-9200]就可以看出代码质量有多少差 当然这破烂货不是我写的. |
相关讨论
相关资源推荐
- JVM的三种常见GC:Minor GC、Major GC与Full GC
- FULL GC有可能导致JVM暂停
- JVM优化-如何减少FullGC
- java full gc 时间_游戏服务器JVM Full GC长时间暂停导致数万玩家掉线问题诊断
- 「JVM」Full GC和Minor GC、Major GC
- 详解JVM垃圾回收(Minor GC和Full GC有什么不同?、CMS收集器、G1收集器、垃圾回收算法)
- 一次性能测试中JVM频繁Full GC的解决经验总结
- JVM出现连续的FullGC该怎么办?
- JVM系列-调优实战案例:频繁FullGC和OOM案例
- [jvm]频繁full gc怎么优化