java程序内存占用_Java进程内存使用情况(jcmd vs pmap)

我在docker容器内的

Java 8上运行了一个java应用程序.该过程启动Jetty 9服务器并部署Web应用程序.传递以下JVM选项:-Xms768m -Xmx768m.

最近我注意到这个过程耗费了大量的内存:

$ps aux 1

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

app 1 0.1 48.9 5268992 2989492 ? Ssl Sep23 4:47 java -server ...

$pmap -x 1

Address Kbytes RSS Dirty Mode Mapping

...

total kB 5280504 2994384 2980776

$jcmd 1 VM.native_memory summary

1:

Native Memory Tracking:

Total: reserved=1378791KB, committed=1049931KB

- Java Heap (reserved=786432KB, committed=786432KB)

(mmap: reserved=786432KB, committed=786432KB)

- Class (reserved=220113KB, committed=101073KB)

(classes #17246)

(malloc=7121KB #25927)

(mmap: reserved=212992KB, committed=93952KB)

- Thread (reserved=47684KB, committed=47684KB)

(thread #47)

(stack: reserved=47288KB, committed=47288KB)

(malloc=150KB #236)

(arena=246KB #92)

- Code (reserved=257980KB, committed=48160KB)

(malloc=8380KB #11150)

(mmap: reserved=249600KB, committed=39780KB)

- GC (reserved=34513KB, committed=34513KB)

(malloc=5777KB #280)

(mmap: reserved=28736KB, committed=28736KB)

- Compiler (reserved=276KB, committed=276KB)

(malloc=146KB #398)

(arena=131KB #3)

- Internal (reserved=8247KB, committed=8247KB)

(malloc=8215KB #20172)

(mmap: reserved=32KB, committed=32KB)

- Symbol (reserved=19338KB, committed=19338KB)

(malloc=16805KB #184025)

(arena=2533KB #1)

- Native Memory Tracking (reserved=4019KB, committed=4019KB)

(malloc=186KB #2933)

(tracking overhead=3833KB)

- Arena Chunk (reserved=187KB, committed=187KB)

(malloc=187KB)

正如您所看到的,RSS(2,8GB)与VM本机内存统计实际显示的内容之间存在巨大差异(提交1.0GB,保留1.3GB).

为什么会有这么大的差异?我知道RSS也显示了共享库的内存分配,但是在分析了pmap详细输出之后,我意识到它不是共享库的问题,而是内存被某些东西所消耗,称为[anon]结构.为什么JVM分配了这么多匿名内存块?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值