java - 按计划运行 "jmap -histo:live"来触发垃圾回收是否安全(或者是个好主意)?

标签 java performance jmap

按计划(例如每 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/

相关文章:

java - 如何设计一个系统来在 Oracle DB 中存储大型 XML?

python - 为什么我的排序代码执行时间不一致?

swift - Firebase Swift 查询在查询性能中的作用

java - 使用 Jmap 在 OutOfMemoryError 上转储 Java 堆文件

java - 将项目添加到 Java ComboBox 时不要调用 ItemListener

java - 如何使用 Maven 将 Java 项目的 python 文件包含到 .war 中?

java - Play框架1.2.5中的GSON错误

c++ - 我可以返回一个 vector 以使用 C++11 扩展现有 vector 吗?

java - jhat 抛出无法识别的魔数(Magic Number)

java - 如何将 core 文件转换为 hyprof 文件