V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lhx2008
V2EX  ›  问与答

JVM 的内存占用到底怎么看呢,为何 jmap 和 top 差这么多

  •  
  •   lhx2008 · 2018-10-20 09:19:46 +08:00 · 2951 次点击
    这是一个创建于 2015 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在 JVM 在 TOP 里面占用了 969MB,担心哪一天内存不够用了,想排查一下。

    6033 root      20   0 4839404 992584   9932 S  0.3 51.7   9:59.60 java  
    

    然后看了下 jmap

    Heap Configuration:
       MinHeapFreeRatio         = 40
       MaxHeapFreeRatio         = 70
       MaxHeapSize              = 492830720 (470.0MB)
       NewSize                  = 10485760 (10.0MB)
       MaxNewSize               = 164233216 (156.625MB)
       OldSize                  = 20971520 (20.0MB)
       NewRatio                 = 2
       SurvivorRatio            = 8
       MetaspaceSize            = 21807104 (20.796875MB)
       CompressedClassSpaceSize = 1073741824 (1024.0MB)
       MaxMetaspaceSize         = 17592186044415 MB
       G1HeapRegionSize         = 0 (0.0MB)
    
    Heap Usage:
    New Generation (Eden + 1 Survivor Space):
       capacity = 87752704 (83.6875MB)
       used     = 68565312 (65.38897705078125MB)
       free     = 19187392 (18.29852294921875MB)
       78.13469998599702% used
    Eden Space:
       capacity = 78053376 (74.4375MB)
       used     = 63509624 (60.56749725341797MB)
       free     = 14543752 (13.870002746582031MB)
       81.36691486605268% used
    From Space:
       capacity = 9699328 (9.25MB)
       used     = 5055688 (4.821479797363281MB)
       free     = 4643640 (4.428520202636719MB)
       52.12410591744088% used
    To Space:
       capacity = 9699328 (9.25MB)
       used     = 0 (0.0MB)
       free     = 9699328 (9.25MB)
       0.0% used
    tenured generation:
       capacity = 194756608 (185.734375MB)
       used     = 157623088 (150.3210906982422MB)
       free     = 37133520 (35.41328430175781MB)
       80.93337094883066% used
    
    27656 interned Strings occupying 2127192 bytes.
    

    在 jstat -gc 里面看 Meta 区的占用 是 68M

     S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
    9472.0 9472.0  0.0    0.0   76224.0  40490.7   190200.0   114119.8  70272.0 67888.9 8320.0 7522.7    923    9.428  26      4.113   13.540
    

    发现实际上也就只用了 83.68+185.73+68 = 337.4 MB 而已

    这方面没有经验,有没有大佬指点一下,内存到底跑哪去了呢。

    7 条回复    2018-10-20 11:42:06 +08:00
    lhx2008
        1
    lhx2008  
    OP
       2018-10-20 09:30:47 +08:00 via Android
    而且内存占用还一直很稳定
    tachikomachann
        2
    tachikomachann  
       2018-10-20 09:31:57 +08:00 via Android
    看下 JVM 启动参数,启动时堆预先分配了多少
    lhx2008
        3
    lhx2008  
    OP
       2018-10-20 09:35:08 +08:00 via Android
    @tachikomachann 堆空间数据上面有显示,启动 xms 是 256M
    aa6563679
        4
    aa6563679  
       2018-10-20 09:52:53 +08:00 via iPhone
    jvm 就算 gc 后释放了大量内存进程的内存使用也不会缩减
    lhx2008
        5
    lhx2008  
    OP
       2018-10-20 09:56:22 +08:00
    @aa6563679 然而堆区的 capacity 就是 200 多 M,并不是 used
    huiyifyj
        6
    huiyifyj  
       2018-10-20 10:33:57 +08:00 via Android
    题外话,个人更喜欢 htop 看。
    loveCoding
        7
    loveCoding  
       2018-10-20 11:42:06 +08:00
    xms 限制的是堆内存
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4649 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:59 · PVG 17:59 · LAX 02:59 · JFK 05:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.