jav*_*top 5 java performance garbage-collection jvm memory-management
我注意到,有时候,当内存几乎耗尽时,GC正试图以任何性能价格完成(导致程序几乎冻结,有时多分钟),而不是立即抛出OOME(OutOfMemoryError).
有没有办法在这方面调整GC?
将程序降低到接近零速度使其无响应.在某些情况下,最好是回答"我已经死了",而不是根本没有回应.
像你所追求的东西被内置到最近的JVM中.
如果你:
UseGCOverheadLimit启用该选项(默认情况下,这些收集器已启用,因此更具体地说,如果您尚未禁用它)然后你会在实际耗尽内存之前获得一个OOM:如果最近98%的时间用在GC中以恢复<2%的堆大小,那么你将得到一个抢先的OOM.
调整这些参数(特别是98%)听起来对你有用,但是据我所知,没有办法调整这些阈值.
但是,请检查您是否符合上述三点要求; 如果您没有使用带有该旗帜的收藏家,这可能有助于您的情况.
值得一读HotSpot JVM调优指南,这对这些东西有很大的帮助.
事实证明,自Java8 b92以来就有一个解决方案:
-XX:+ExitOnOutOfMemoryError
启用此选项后,JVM 将在第一次出现内存不足错误时退出。如果您更喜欢重新启动 JVM 实例而不是处理内存不足错误,则可以使用它。
-XX:+CrashOnOutOfMemoryError
如果启用此选项,则当发生内存不足错误时,JVM 会崩溃并生成文本和二进制崩溃文件(如果启用了核心文件)。
一个好主意是将上述选项之一与旧的选项结合起来-XX:+HeapDumpOnOutOfMemoryError
我测试了这些选项,它们实际上按预期工作!
| 归档时间: |
|
| 查看次数: |
1078 次 |
| 最近记录: |