按计划(例如每 10 分钟)运行“jmap -histo:live”来触发垃圾收集是否安全(或者是个好主意)?我们希望减少从 AWS(Amazon Web Services)收到的警报数量,这些警报会在内存消耗较高时触发。
服务器有 16GB RAM。 GC 是 G1GC(而不是 CMS)。 Xmx 设置为 12GB。 Xms 也是 12GB(但我们计划减少它)。当通过 Apache POI 处理/创建 Excel 文件时(我们使用的是 XSSFSheet),内存消耗会迅速增加。
顺便说一句,我们计划在生产环境 (SAP Hybris 5.7.0.3) 上运行预定的 jmap。
最佳答案
如果你确实想触发完整的GC,jcmd <pid> GC.run
看起来更清楚了,但这是灾难的根源。不要这样做!尤其是对于 G1,完整的 gc 是单线程(一个 CPU)并且可能需要很长时间。相反,请修复问题,即应用程序使用过多 RAM(减小堆大小并设置元空间限制)或警报过早响起。
简而言之,这既不安全也不是一个好主意,它会杀了你。
关于java - 按计划运行 "jmap -histo:live"来触发垃圾回收是否安全(或者是个好主意)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47592924/