如何避免后台IO高负载造成的长时间JVM GC停顿
译文原文:
https://www.jianshu.com/p/ce9b3f0a90f2
这里就只贴出结论总结吧:
有低延迟要求的Java应用程序需要极短的JVM GC停顿。但是,当磁盘IO压力很大时,JVM可能被阻塞一段较长的时间。
我们对该问题进行了调查,并且发现如下原因:
- JVM GC需要通过发起系统调用
write()
,来记录GC行为。 write()
调用可以被后台磁盘IO所阻塞。- 记录GC日志属于JVM停顿的一部分,因此
write()
调用的时间也会被计算在JVM STW的停顿时间内。
我们提出了一系列解决该问题的方案。重要的是,我们的发现可以帮助JVM实现来改进该问题。对于低延迟应用程序来说,最简单有效的措施是将GC日志文件放到单独的HDD或者高性能磁盘(例如SSD)上,来避免IO竞争。