我正在将裸机Java应用程序(jar jdk8)移至Docker容器和DC / OS.我注意到docker上的模式异常,我们将-XMX设置为32 gig,并分配了36 gig docker容器.每隔几个小时左右,应用程序就会增加旧的gen mem分配,并且在尝试进行堆转储时,GC会陷入循环(最大cpu)中.
是否有任何优化或其他方法可以用来查看为什么在1-5秒的间隔内我们如此之快?使用Docker和JVM可能需要了解一些陷阱吗?
我们正在使用默认GC
最佳答案
仅供将来参考:
我们正在使用JDK 8,似乎Oracle最近才添加了一些使用Docker的实验性标志.我相信情况可能是当GC分配线程时,它不尊重cgroup的docker线程数.实验性标志似乎已经解决了我们的“脱轨问题”
https://blogs.oracle.com/java-platform-group/java-se-support-for-docker-cpu-and-memory-limits