这几天,网店系统基础架构进行了一次大的升级,升级之后例行的进行了压力测试,以前几次大的项目发布压力测试都没有任何问题,没想到这次出事故啦,而且是内存泄露?

系统运行环境:
硬件:Intel(R) Xeon(R) CPU 2.0G、4G RAM、Linux 2.6.9-42.ELsmp #1 SMP
软件:jboss-4.0.5.GA [Java HotSpot(TM) Server VM (build 1.5.0_10-b03, mixed mode)]
JAVA运行参数-server -Xms2048m -Xmx2048m -XX:NewSize=768m -XXermSize=128m -XX:MaxPermSize=128m

现象是这样的:
对系统压力测试大约4个小时左右,系统突然down掉,抛错为java.lang.OutOfMemoryError: requested 12 bytes for intptr_t in /BUILD_AREA/jdk1.5.0_10/hotspot/src/share/vm/runtime/deoptimization.cpp. Out of swap space?
由于是晚上进行,所以没有观察到任何比较奇怪的现象出现,再次压力测试,仍然抛错,但稍微有些不同 java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate. Out of swap space?
经多次压力,现象100%可以重现;

解决过程:
1、use jvmstat first
  这是SUN自己的性能跟踪工具,他占用server资源很少;监控的结果令我们失望,因为JVM表现完全正常,我们分配的2G内存还有很多剩余,并没有耗尽;GC也很正常,没有出现明显的Full GC或者是每次GC时间太长的情况;
  用top命令查看占用内存不到3G,也还算富裕;而且系统并没有JNI的使用;为什么会报OutOfMemoryError呢?未果!
2、search Out of swap space
  更多都是遭遇了相同的问题,但是好像都没有一个很可行的解决办法,甚至有人怀疑是JDK的bug,也有人说可以用-Xss参数设置stack size大小,ss默认大小为512k,但是从监控上看我们的进程也没有那么多,但还是尝试了一把,再次压力问题仍然未解决!
3、try to see heap dump
  添加参数-XX:+HeapDumpOnOutOfMemoryError,让系统出现OutOfMemoryError时将当时JVM内所有heap dump出来,使用jHAT分析;
  很可惜,1.5中对该参数的支持超级有限,记录下来的信息很少,并没有我们想象的那么多,那么有用,基本上这些信息是无用的;再次失败!
4、back to OutOfMemoryError
  由于jvmstat 能看见的JVM内部信息有限,所以我们打算用专业工具JProfiler来进行详查;环境搞定之后,再次压力,不到2小时情况就重现了,但是从 JProfiler中观察到的信息显示JVM内部的确没有任何异常,结论和Jconsole观察后完全一样,JVM内部没有任何问题!但为什么会有此错 误?想不通……
5、focus on java heap with linux
  再次search了linux环境下面java heap的相关工作原理及组成信息,有发现了!
  其实java heap由2部分组成:其一为我们熟悉的JVM heap,其二为和OS相关的Native heap;
  JVM heap完全由GC掌控,我们可以通过参数-Xms、-Xmx指定其大小,并且可以用工具对其进行监控;他管理的东西就是我们所有的Java Object;
  而Native heap是平台相关的,我们既不能设置其使用大小也不能干预他的使用状态;他管理的东西一般都是很底层的,比如JIT使用的buffer、GC的底层 data structures、JNI调用的所有相关对象、SWING/AWT调用需要的buffer和data structures……
  由此想到,是否我们分配的JVM heap太大了,于是设置参数变为-Xms1536m -Xmx1536m再次压力,问题解决了!!!

虽然问题解决了,但是我们还是没能从根本上解释此次故障,因为系统可用的内存还有很多,并没有耗尽?
难道32位的JAVA所能操作的内存只有2G?JVM heap全部占完了会导致Native heap无法allocate memory?后续还需要进一步研究此事;

转载于:https://www.cnblogs.com/qmfsun/p/5396698.html

遭遇OutOfMemoryError相关推荐

  1. java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得

    该文章出自:http://www.cnblogs.com/hucn/p/3572384.html 分析工具:http://www.blogjava.net/jjshcc/archive/2014/03 ...

  2. java.lang.OutOfMemoryError: PermGen space及其解决方法

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...

  3. AI一分钟 | “芯片门”影响仍在,英伟达旗下多款芯片也遭遇“幽灵”漏洞影响;贾跃亭邀媒体试乘法乐第FF91,你怎么看?

    一分钟AI "芯片门"影响仍在,英伟达称旗下部分芯片也遭遇"幽灵"漏洞影响,包括GeForce.Tesla.Grid.NVS以及Quadro等. 科大讯飞首次亮 ...

  4. AI一分钟 | 阿里云放大招要揽1000名AI人才,川普AI守国论遭遇54名科学家反对

    一分钟AI 阿里云广东人才召集令发布,打造全国工业云总部 亚马逊云(AWS)面部识别系统升级,延迟在一秒以内 谷歌TensorFlow 1.4发布,增加了对Python生成器的支持 三星抢滩AI战场, ...

  5. JVM 有 Full GC,为什么还会出现 OutOfMemoryError呢?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:zhihu.com/question/38511221 平时 ...

  6. 既然 JVM 有 Full GC,为什么还会出现 OutOfMemoryError?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:R 大 zhihu.com/question/3851122 ...

  7. 深入解析Java OutOfMemoryError

    在Java中,所有对象都存储在堆中.他们通过new关键字来进行分配,JVM会检查是否所有线程都无法在访问他们了,并且会将他们进行回收.在大多数时候程序员都不会有一丝一毫的察觉,这些工作都被静悄悄的执行 ...

  8. 调整JVM堆内存解决OutOfMemoryError

    今天在用 processing(http://zh.wikipedia.org/wiki/Processing) 编写处理 midi 文件的程序的时候,遇到了一个问题.程序主要是读取分析 midi , ...

  9. java.lang.OutOfMemoryError: Java heap space错误及...

    为什么80%的码农都做不了架构师?>>>    以下是从网上找到的关于堆空间溢出的错误解决办法: java.lang.OutOfMemoryError: Java heap spac ...

最新文章

  1. Android 读取assets文件下的txt文件
  2. spring cloud+.net core搭建微服务架构:Api授权认证(六)
  3. 刚构桥的优缺点_[中交公规院]预应力连续刚构桥总体设计及主要尺寸
  4. 本周ASP.NET英文技术文章推荐[03/04 - 03/10]
  5. 【转】常见面试之机器学习算法思想简单梳理
  6. 再获国际顶级荣誉,平头哥首席科学家谢源荣获2020年度IEEE CS技术成就奖
  7. matlab 遗传算法 等式约束,关于MATLAB遗传算法工具箱不等式约束
  8. (三) 弦截法(试位法)求根
  9. css一些需要注意的东西
  10. 大数据分析师的报考条件是什么?
  11. Restricted RPS
  12. HCIA网络基础7-VRP和命令行基础
  13. c语言 英文课本词汇表的生成,【C/C++】词汇表生成
  14. 【Python画樱花源码】
  15. C# 打印调试信息到DebugView
  16. ipad iphone开发_如何在iPhone或iPad上关闭手机数据
  17. 个人作业2——英语学习APP案例分析
  18. 五、调试声卡pcm设备
  19. JAVA银企直连建设银行云直连模式超详细讲解
  20. 问题随记 —— Git 多账号配置问题

热门文章

  1. 业界谈AI赋能传统金融:精细化、数字化、个性化成三大关键词
  2. 机器学习中的基本数学知识
  3. ubuntu java sdk_ubuntu 10.10安装java sdk6过程
  4. 重新配对_郑思维和陈清晨当年配对也很强,为什么被拆开重新和黄雅琼配对
  5. 变量置换方式linux,Shell变量测试与内容置换
  6. android lint 空指针,HardwareRenderer中的NullPointerException
  7. 004_Gson树模型
  8. 007_请求返回Json
  9. 添加用户信息的方法java_添加用户的流程分析
  10. python自带的数据库_Python小白的数据库入门