为什么我的java进程使用内存Linux RES不断增加?

我有一个运行在linux(centos 6.3 x64)上的java(1.6 u25)进程,其中JAVA_OPTS =“ – server -xms128M -Xmx256M -Xss256K -XX:PermSize = 32M -XX:MaxPermSize = 32M -XX:MaxDirectMemorySize = 128M -XX: + UseAdaptiveSizePolicy -XX:MaxDirectMemorySize = 128M -XX:+ UseParallelGC -XX:+ UseParallelOldGC -XX:GCTimeRatio = 39 -XX:+ PrintGCDetails -XX:+ PrintGCDateStamps -Xloggc:gc.log“,使用的java应用程序thrift 0.8.0 LIB;

每天运行TOP命令,java进程的RES值会不断增加(从80MB到1.2GB(启动应用程序一个月后)),但是看到jvm堆大小停留在100到200MB左右,看到GC日志约1〜 PSyoungGC每分钟2次,PSOld GC每天1〜2次,无内存泄漏。

那么,为什么使用mem的java进程会不断增加,并且大大超过了JVM设置? 我觉得java过程真的用mem会等于Xmx256M + MaxPermSize32M + MaxDirectMemorySize128M + JVM自己用过的mem = 416MB左右?

关系信息: Linux下Java的虚拟内存使用情况,使用的内存太多

Windows文件:使用ReadFile和映射

OSX / iOS上的虚拟内存与Windows提交/保留行为

在qemu中打印内存地址范围

在Windows 7 64位上运行16位命令行应用程序

C ++内存debugging器?

位字段的内存pipe理在C.

Windbg <未分类>内存区域

VMA和ELF分部之间的关系

我的程序在Windows上运行MSVC和g ++编译器,但不在Linux上运行

虚拟内存:处理一个和系统的一个

我建议你看一下pmap的过程。 这将给你一个本地内存使用情况的细分。 你没有太多控制的记忆是

线程使用的总栈空间。

内存映射文件的大小

共享库的大小。

本机库内存使用情况。 例如套接字缓冲区(如果你有足够的套接字)

这些的一些组合正在使用的差异。

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...