遭遇OutOfMemoryError
这几天,网店系统基础架构进行了一次大的升级,升级之后例行的进行了压力测试,以前几次大的项目发布压力测试都没有任何问题,没想到这次出事故啦,而且是内存泄露?
系统运行环境:
硬件: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?后续还需要进一步研究此事;
遭遇OutOfMemoryError的更多相关文章
- java head space/ java.lang.OutOfMemoryError: Java heap space内存溢出
上一篇JMX/JConsole调试本地还可以在centos6.5 服务器上进行监控有个问题端口只开放22那么设置的9998端口 你怎么都连不上怎么监控?(如果大神知道还望指点,个人见解) 线上项目出现 ...
- Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm ...
- DBCC CHECKDB 遭遇Operating system error 112(failed to retrieve text for this error. Reason: 15105) encountered
我们一个SQL Server服务器在执行YourSQLDBa的作业YourSQLDba_FullBackups_And_Maintenance时遇到了错误: Exec YourSQLDba.Maint ...
- 如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码
程序小白在写代码的过程中,经常会不经意间写出发生内存溢出异常的代码.很多时候这类异常如何产生的都傻傻弄不清楚,如果能故意写出让jvm发生内存溢出的代码,有时候看来也并非一件容易的事.最近通过学习< ...
- java.lang.OutOfMemoryError: PermGen space及其解决方法
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...
- [java]OutOfMemoryError 原因及解决办法
导致OutOfMemoryError异常的常见原因有以下几种: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 代码中存在死循环 ...
- Android OutOfMemoryError的理解
最近写了个测试demo调试网络优化,发现下载20M的文件时我直接申请了20M的空间,然后就OOM导致crash了~~ 典型的错误信息如下: OutOfMemoryError:Out of memory ...
- 在.NET Core中遭遇循环依赖问题"A circular dependency was detected"
今天在将一个项目迁移至ASP.NET Core的过程中遭遇一个循环依赖问题,错误信息如下: A circular dependency was detected for the service of ...
- Tomcat报java.lang.OutOfMemoryError: Java heap space错误停止运行如何解决
最近开发的一个商业项目,部署完成后,经常出现Tomcat挂掉的现象,报的异常是:java.lang.OutOfMemoryError: Java heap space,上网google了一下,了解了一 ...
随机推荐
- Django~queries
API queries create, retrieve, update and delete
- ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)
*********************************************************************** * Title : ZSDF003 ...
- windows编程中c语言知识回顾
1.include: #include表示只在系统提供的头文件中查找: #include "Head File"表示先在当前目录中搜索,若不存在,再到系统目录中查找: vs环境中, ...
- Navicat连接oracle,出现Only compatible with oci version 8.1 and&nb (转)
与本地oracle连接的时候,一般没问题,sqlplus和oci都是本地oracle自带的,(设置: 工具->选项->oci) 分别为: oci:D:\app\pcman\produc ...
- Gym 100703K Word order 贪心
题目链接 题意:给定一个长度为n的字符串,字符串仅由"F","N","A"三种字符组成,现有一种操作P,即把两个相邻的字符调换位置.要求把所 ...
- 微信支付官方.net版之坑你没商量
最近开始弄支付这块,先是支付宝手机网站支付,也是坑了我许久,不过还好,问题不大. 让我们看看微信支付有多少坑 微信商户平台,你们知道么(我前天才知道,别笑我) 登录地址:https://mch.wei ...
- balabalabala
[微分享]:种子不落在肥土而落在瓦砾中,有生命力的种子决不会悲观和叹气,因为有了阻力才有磨炼.
- 学习JNDI
既然datasource对象有tomcat提供,那么我们如何在应用程序中获得它呢,tomcat把这个对象放在JNDI服务中, 并用一个名字把它关联起来,我们在应用程序中,只需通过JNDI搜索这个名字, ...
- 20145206邹京儒《Java程序设计》第一周学习总结
20145206 <Java程序设计>第1周学习总结 教材学习内容总结 1.三大平台:Java SE.Java EE与Java ME.Java SE是各应用平台的基础,分为四个主要的部分: ...
- C#集合类型
using System; using System.Collections; using System.Collections.Generic; namespace codeTest { class ...