转载http://blog.csdn.net/zshake/article/details/46785469

几台服务器的JVM占用内存总是持续增长,大大超过-Xmx设定的值,服务器物理内存几乎被耗尽。

使用jmap查看JVM的内存使用,发现jvm的堆大小完全在-Xmx参数设定的范围之内,那问题只能处在别的地方了。

JVM除了堆内存之外,就只有栈内存和DirectMemory了。栈空间每个线程是固定的,线程数也没可能多到可以占用这么多内存的程序,所以怀疑的目标就在DirectMemory上了。

DirectMemory是Javanio引入的,直接以native的方式分配内存,不受jvm管理。这种方式是为了提高网络和文件IO的效率,避免多余的内存拷贝而出现的。DirectMemory占用的大小没有直接的工具或者API可以查看,不过这个在Bits类中是有两个字段存储了最大大小和已分配大小的,使用反射可以拿到这个数据:

Class<?> c = Class.forName("java.nio.Bits");
Field maxMemory = c.getDeclaredField("maxMemory");
maxMemory.setAccessible(true);
Field reservedMemory = c.getDeclaredField("reservedMemory");
reservedMemory.setAccessible(true);
Long maxMemoryValue = (Long)maxMemory.get(null);
Long reservedMemoryValue = (Long)reservedMemory.get(null);

结果证实了猜测,DirectMemory增长失控了。

原来,DirectMemory 的默认大小是64M,而JDK6之前和JDK6的某些版本的SUN
JVM,存在一个BUG,在用-Xmx设定堆空间大小的时候,也设置了DirectMemory的大小。加入设置了-Xmx2048m,那么jvm最终可分配的内存大小为4G多一些,是预期的两倍。

解决方式是设置jvm参数-XX:MaxDirectMemorySize=128m,指定DirectMemory的大小。

最新文章

  1. 书中的银行,我们一起奋斗的C#,只因乐在其中~
  2. AppFog免费云空间申请及安装wordpress(图文教程)
  3. 按要求编写Java应用程序。 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。
  4. POJ3184 Ikki&#39;s Story I - Road Reconstruction(最大流)
  5. sqlite中的replace、insert、update之前的区别
  6. caffe中的filler.hpp源码的作用:
  7. SSM-配置文件标签随笔-概要
  8. static local variable
  9. 使用Spring AOP预处理Controller的参数
  10. MySql 链接url 参数详解
  11. angularJS实战(一)
  12. 对象反序列化时,抛出java.io.StreamCorruptedException: invalid type code: AC异常
  13. [ROS]激光驱动安装
  14. c# 连接数据库SqlHelper
  15. matlab二维绘图学习摘要
  16. 【CSS】Bootstrap中select2+popover冲突
  17. 1*1的卷积核与Inception
  18. PHP开发——数据类型
  19. leetcode1012
  20. slam14讲证明构成李代数

热门文章

  1. DevExpress Add ASPxGridView template columns at runtime
  2. anu - reactIE
  3. php 无限极分类问题
  4. 37行代码实现一个简单的打游戏AI
  5. 第三周作业3——Bug Report
  6. idea_快捷键default&amp;eclipse
  7. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.3 日历
  8. 动画Completed事件里获取执行该动画的UI对象
  9. MySQL--DROP TABLE与MySQL版本
  10. CodeIgniter 安装指导