64位Linux下JVM内存调设遇到GC问题的备忘
来源:互联网 发布:java爬虫框架nutch 编辑:程序博客网 时间:2024/06/07 15:08
问题:jar提交到64位的linux环境中执行,由于文件过大,5G左右,发现数据一致导入不了,于是设置了JVM内存,执行命令如下:
java -Xmx10240m -jar vip.jar
结果爆出GC错误:
java.lang.OutOfMemoryError: GC overhead limit exceeded
分析:
官网上对该错误的说明:
The concurrent collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option-XX:-UseGCOverheadLimitto the command line.
在JDK_1.7.0_60版本中,JVM默认启动的时候-XX:+UseGCOverheadLimit,即启用了该特性。这其实是JVM的一种推断,如果垃圾回收耗费了98%的时间,但是回收的内存还不到2%,那么JVM会认为即将发生OOM,让程序提前结束。可以使用-XX:-UseGCOverheadLimit,关掉这个特性。
执行程序加了这个设置,如下:
java -XX:-UseGCOverheadLimit -Xmx10240m -jar vip.jar
有必要总结下JVM内存调优和JVM参数设置:
-server//服务器模式
-Xmx2g //JVM最大允许分配的堆内存,按需分配
-Xms2g //JVM初始分配的堆内存,一般和Xmx配置成一样以避免每次gc后JVM重新分配内存。
-Xmn256m //年轻代内存大小,整个JVM内存=年轻代 + 年老代 + 持久代
-XX:PermSize=128m //持久代内存大小
-Xss256k //设置每个线程的堆栈大小
-XX:+DisableExplicitGC //忽略手动调用GC, System.gc()的调用就会变成一个空调用,完全不触发GC
-XX:+UseConcMarkSweepGC //并发标记清除(CMS)收集器
-XX:+CMSParallelRemarkEnabled //降低标记停顿
-XX:+UseCMSCompactAtFullCollection //在FULL GC的时候对年老代的压缩
-XX:LargePageSizeInBytes=128m //内存页的大小
-XX:+UseFastAccessorMethods //原始类型的快速优化
-XX:+UseCMSInitiatingOccupancyOnly //使用手动定义初始化定义开始CMS收集
-XX:CMSInitiatingOccupancyFraction=70 //使用cms作为垃圾回收使用70%后开始CMS收集
JVM参数大全参考:http://www.blogjava.net/bitbit/archive/2009/11/30/304247.html
后续又爆出错误:
java.lang.OutOfMemoryError: Java heap space
增加JVM参数设置:
java -XX:-UseGCOverheadLimit -Xmx10240m -Xms10240m -jar vip.jar
最好先执行下:
ulimit -c unlimited
- 64位Linux下JVM内存调设遇到GC问题的备忘
- JVM GC的各种问题
- 描述下jvm的gc机制,常用的jvm调优方法,oom如何产生,如何处理oom 问题?
- 在64位Win7下遇到的问题
- mysql在64位windows下安装遇到的问题
- centos 64位下编译遇到的问题
- 64位Linux上运行React Native遇到的问题
- JVM的内存结构和GC机制
- linux下的tomcat jvm内存
- linux下的tomcat jvm内存 .
- linux下的tomcat jvm内存
- linux下的tomcat jvm内存
- linux下的tomcat jvm内存
- linux下的tomcat jvm内存
- linux下的tomcat jvm内存
- linux下的tomcat jvm内存
- 关于遇到的JVM内存的相关问题
- weblogic11R1在64位win7和64位JVM下的问题
- linux系统开机出现Read-only file system问题
- IOS中用正则表达式判断输入的内容为8-16位且同时包含数字和字母
- C#图片截取压缩(百分比压缩/大小压缩)实现代码
- fragment静态动态使用
- JavaScript 代码规范
- 64位Linux下JVM内存调设遇到GC问题的备忘
- tar压缩命令
- 基于Android的Word文档阅读器
- 窗体部件效果之模态
- JS原型对象和原型链
- 复仇之路——我一定要学会linux系统
- Java数组的常用方法
- App Widgets 详解一 简单使用
- 在线支付代码