why java process use much more memory than expected

主宰稳场 提交于 2020-01-05 12:16:49

问题


SystemInfo

OS: archlinux

JDK: OpenJDK (IcedTea 2.4.3) (ArchLinux build 7.u45_2.4.3-1-x86_64)

Running App: https://github.com/aemoncannon/ensime

My java options:

-Xms128m -Xmx512M -Xss1M -XX:MaxPermSize=50m 
-XX:MaxDirectMemorySize=10M  
-XX:ReservedCodeCacheSize=64m 
-Dfile.encoding=UTF-8 -XX:NativeMemoryTracking=detai

Linux top command shows, It uses 6.8G * 19.5% = 1.326GB

Natvie memory tracking shows it use 713MB

So. Which one is the actually physic memory usage, and if it use 1.3GB memory, where does the extra 600+MB physic memory go?

Top outputs

top - 09:20:37 up 48 min,  2 users,  load average: 0.31, 0.33, 0.36
Tasks: 161 total,   1 running, 159 sleeping,   0 stopped,   1 zombie
%Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 
KiB Mem:   7091684 total,  4338428 used,  2753256 free,   117044 buffers
KiB Swap:  8388604 total,        0 used,  8388604 free,  1399904 cached

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND  
 5666 jilen     20   0 3553516 1.317g  22652 S   0.3 19.5   2:27.72 java 

The native memory tracking outpus(jcmd VM.native_memory detail)

Native Memory Tracking:

Total:  reserved=731125KB,  committed=681117KB

-                 Java Heap (reserved=575488KB, committed=574976KB)
                            (mmap: reserved=575488KB, committed=574976KB)

-                     Class (reserved=6388KB, committed=6388KB)
                            (classes #6443)
                            (malloc=6388KB, #16725)

-                    Thread (reserved=27986KB, committed=27986KB)
                            (thread #27)
                            (stack: reserved=27756KB, committed=27756KB)
                            (malloc=82KB, #114)
                            (arena=148KB, #54)

-                      Code (reserved=70523KB, committed=21059KB)
                            (malloc=3963KB, #6149)
                            (mmap: reserved=66560KB, committed=17096KB)

-                        GC (reserved=26964KB, committed=26964KB)
                            (malloc=5900KB, #158)
                            (mmap: reserved=21064KB, committed=21064KB)

-                  Compiler (reserved=176KB, committed=176KB)
                            (malloc=78KB, #238)
                            (arena=98KB, #2)

-                  Internal (reserved=5463KB, committed=5431KB)
                            (malloc=5431KB, #1492)
                            (mmap: reserved=32KB, committed=0KB)

-                    Symbol (reserved=10668KB, committed=10668KB)
                            (malloc=9765KB, #77949)
                            (arena=903KB, #1)

-           Memory Tracking (reserved=5616KB, committed=5616KB)
                            (malloc=5616KB, #120)

-        Pooled Free Chunks (reserved=1854KB, committed=1854KB)
                            (malloc=1854KB)


Virtual memory map:

[0x00000000dce00000 - 0x0000000100000000] reserved 575488KB for Java Heap
        from [JVM_handle_linux_signal+0x173dbd]
    [0x00000000dce00000 - 0x00000000fff80000] committed 574976KB from [JVM_handle_linux_signal+0x650ab]

[0x00007f53801c7000 - 0x00007f53802c8000] reserved 1028KB for Thread Stack
        from [JVM_handle_linux_signal+0x12f2ec]
    [0x00007f53801c7000 - 0x00007f53802c8000] committed 1028KB from [JVM_handle_linux_signal+0x12f2ec]

[0x00007f5381daf000 - 0x00007f5381eb0000] reserved 1028KB for Thread Stack
        from [JVM_handle_linux_signal+0x12f2ec]
    [0x00007f5381daf000 - 0x00007f5381eb0000] committed 1028KB from [JVM_handle_linux_signal+0x12f2ec]

[0x00007f53821f0000 - 0x00007f53824f3000] reserved 3084KB for Thread Stack
        from [JVM_handle_linux_signal+0x12f2ec]
    [0x00007f53821f0000 - 0x00007f53824f3000] committed 3084KB from [JVM_handle_linux_signal+0x12f2ec]

[0x00007f5382d49000 - 0x00007f5382e4a000] reserved 1028KB for Thread Stack
        from [JVM_handle_linux_signal+0x12f2ec]
    [0x00007f5382d49000 - 0x00007f5382e4a000] committed 1028KB from [JVM_handle_linux_signal+0x12f2ec]

[0x00007f538302a000 - 0x00007f538342e000] reserved 4112KB for Thread Stack
        from [JVM_handle_linux_signal+0x12f2ec]
    [0x00007f538302a000 - 0x00007f538342e000] committed 4112KB from [JVM_handle_linux_signal+0x12f2ec]

[0x00007f53b47c7000 - 0x00007f53b4aca000] reserved 3084KB for Thread Stack
        from [JVM_handle_linux_signal+0x12f2ec]
    [0x00007f53b47c7000 - 0x00007f53b4aca000] committed 3084KB from [JVM_handle_linux_signal+0x12f2ec]

[0x00007f53b4db7000 - 0x00007f53b4eb8000] reserved 1028KB for Thread Stack
        from [JVM_handle_linux_signal+0x127be9]
    [0x00007f53b4db7000 - 0x00007f53b4eb8000] committed 1028KB from [JVM_handle_linux_signal+0x127be9]

[0x00007f53b4eb8000 - 0x00007f53b52bc000] reserved 4112KB for Thread Stack
        from [JVM_handle_linux_signal+0x12f2ec]
    [0x00007f53b4eb8000 - 0x00007f53b52bc000] committed 4112KB from [JVM_handle_linux_signal+0x12f2ec]

[0x00007f53b5894000 - 0x00007f53b5a96000] reserved 2056KB for Thread Stack
        from [JVM_handle_linux_signal+0x12f2ec]
    [0x00007f53b5894000 - 0x00007f53b5a96000] committed 2056KB from [JVM_handle_linux_signal+0x12f2ec]

[0x00007f53b5a96000 - 0x00007f53b5b97000] reserved 1028KB for Thread Stack
        from [JVM_handle_linux_signal+0x17c90d]
    [0x00007f53b5a96000 - 0x00007f53b5b97000] committed 1028KB from [JVM_handle_linux_signal+0x17c90d]

[0x00007f53b5b97000 - 0x00007f53b5c98000] reserved 1028KB for Thread Stack
        from [JVM_FindSignal+0x118f1b]
    [0x00007f53b5b97000 - 0x00007f53b5c98000] committed 1028KB from [JVM_FindSignal+0x118f1b]

[0x00007f53b6e70000 - 0x00007f53b8000000] reserved 17984KB for GC
        from [JVM_handle_linux_signal+0x172529]
    [0x00007f53b6e70000 - 0x00007f53b8000000] committed 17984KB from [JVM_handle_linux_signal+0x650ab]

[0x00007f53c4000000 - 0x00007f53c8000000] reserved 65536KB for Code
        from [JVM_handle_linux_signal+0x1741a5]
    [0x00007f53c4000000 - 0x00007f53c5070000] committed 16832KB from [JVM_handle_linux_signal+0x1746f4]

[0x00007f53cc0e4000 - 0x00007f53cc1fd000] reserved 1124KB for GC
        from [JVM_handle_linux_signal+0x172529]
    [0x00007f53cc0e4000 - 0x00007f53cc1fd000] committed 1124KB from [JVM_handle_linux_signal+0x650ab]

[0x00007f53cc1fd000 - 0x00007f53cc601000] reserved 4112KB for Thread Stack
        from [AsyncGetCallTrace+0x3949c]
    [0x00007f53cc1fd000 - 0x00007f53cc601000] committed 4112KB from [AsyncGetCallTrace+0x3949c]

[0x00007f53cc601000 - 0x00007f53cc71b000] reserved 1128KB for GC
        from [JVM_handle_linux_signal+0x172529]
    [0x00007f53cc601000 - 0x00007f53cc71b000] committed 1128KB from [dlerror+0x3aad37]

[0x00007f53cc71b000 - 0x00007f53cc81b000] reserved 1024KB for Code
        from [JVM_handle_linux_signal+0x172289]
    [0x00007f53cc71b000 - 0x00007f53cc75d000] committed 264KB from [JVM_handle_linux_signal+0x1746f4]

[0x00007f53cf497000 - 0x00007f53cf4a2000] reserved 44KB for GC
        from [JVM_handle_linux_signal+0x172529]
    [0x00007f53cf497000 - 0x00007f53cf54d000] committed 728KB from [JVM_handle_linux_signal+0x650ab]

[0x00007f53cf4a2000 - 0x00007f53cf54d000] reserved 684KB for GC
        from [JVM_handle_linux_signal+0x172289]

[0x00007f53cf54d000 - 0x00007f53cf64e000] reserved 1028KB for Thread Stack
        from [JVM_handle_linux_signal+0x12c997]
    [0x00007f53cf54d000 - 0x00007f53cf64e000] committed 1028KB from [JVM_handle_linux_signal+0x12c997]

[0x00007f53cf656000 - 0x00007f53cf66f000] reserved 100KB for GC
        from [JVM_handle_linux_signal+0x172289]
    [0x00007f53cf656000 - 0x00007f53cf66f000] committed 100KB from [JVM_handle_linux_signal+0x650ab]

[0x00007f53cf66f000 - 0x00007f53cf677000] reserved 32KB for Internal
        from [JVM_handle_linux_signal+0x3c924]

Details:

[0x00007f53ce330855] JVM_handle_linux_signal+0xee085
                            (malloc=6627KB #77628)

[0x00007f53ce291061] JVM_handle_linux_signal+0x4e891
                            (malloc=5120KB #5)

[0x00007f53ce293021] JVM_handle_linux_signal+0x50851
                            (malloc=5120KB #5)

[0x00007f53ce2a19b5] JVM_handle_linux_signal+0x5f1e5
                            (malloc=5120KB #5)

[0x00007f53ce1c8c64] JVM_FindSignal+0x1188f4
                            (malloc=4040KB #1)

[0x00007f53cde99851] dlerror+0x409851
                            (malloc=3903KB #5678)

[0x00007f53cdd2dcb3] dlerror+0x29dcb3
                            (malloc=2643KB #148)

[0x00007f53cdff5b86] AsyncGetCallTrace+0x6dc46
                            (malloc=2512KB #314)

[0x00007f53ce1c0b17] JVM_FindSignal+0x1107a7
                            (malloc=1274KB #106)

[0x00007f53ce291149] JVM_handle_linux_signal+0x4e979
                            (malloc=640KB #5)

[0x00007f53ce233375] JVM_FindSignal+0x183005
                            (malloc=524KB #419)

[0x00007f53ce38c670] JVM_handle_linux_signal+0x149ea0
                            (malloc=469KB #1)

[0x00007f53cde87c53] dlerror+0x3f7c53
                            (malloc=408KB #16085)

[0x00007f53cdd2d142] dlerror+0x29d142
                            (malloc=360KB #1)

[0x00007f53cdff5186] AsyncGetCallTrace+0x6d246
                            (malloc=310KB #25)

[0x00007f53ce38c581] JVM_handle_linux_signal+0x149db1
                            (malloc=156KB #1)

[0x00007f53cdd38523] dlerror+0x2a8523
                            (malloc=127KB #681)

[0x00007f53ce1c5acb] JVM_FindSignal+0x11575b
                            (malloc=96KB #2)

[0x00007f53ce1c807e] JVM_FindSignal+0x117d0e
                            (malloc=96KB #1)

[0x00007f53ce38e0e4] JVM_handle_linux_signal+0x14b914
                            (malloc=80KB #5)

[0x00007f53ce368abd] JVM_handle_linux_signal+0x1262ed
                            (malloc=71KB #25)

[0x00007f53ce1b4c27] JVM_FindSignal+0x1048b7
                            (malloc=64KB #16)

[0x00007f53ce1b4c97] JVM_FindSignal+0x104927
                            (malloc=64KB #16)

[0x00007f53ce25c867] JVM_handle_linux_signal+0x1a097
                            (malloc=55KB #116)

[0x00007f53ce1c0584] JVM_FindSignal+0x110214
                            (malloc=51KB #1)

[0x00007f53ce1c5a15] JVM_FindSignal+0x1156a5
                            (malloc=48KB #1)

[0x00007f53cdea0fc3] dlerror+0x410fc3
                            (malloc=37KB #464)

[0x00007f53cdf169bd] dlerror+0x4869bd
                            (malloc=36KB #13)

[0x00007f53ce3b2aa7] JVM_handle_linux_signal+0x1702d7
                            (malloc=24KB #13)

[0x00007f53cdff6496] AsyncGetCallTrace+0x6e556
                            (malloc=20KB #4)

[0x00007f53cdeb2ff3] dlerror+0x422ff3
                            (malloc=17KB #180)

[0x00007f53ce27ba1b] JVM_handle_linux_signal+0x3924b
                            (malloc=15KB #255)

[0x00007f53ce368b9d] JVM_handle_linux_signal+0x1263cd
                            (malloc=10KB #1)

[0x00007f53ce367fdb] JVM_handle_linux_signal+0x12580b
                            (malloc=8KB #47)

[0x00007f53cdff2df5] AsyncGetCallTrace+0x6aeb5
                            (malloc=8KB #11)

[0x00007f53cdf5d7d4] dlerror+0x4cd7d4
                            (malloc=8KB #1)

[0x00007f53ce289bc4] JVM_handle_linux_signal+0x473f4
                            (malloc=8KB #1)

[0x00007f53ce2059d6] JVM_FindSignal+0x155666
                            (malloc=7KB #62)

[0x00007f53ce27bb04] JVM_handle_linux_signal+0x39334
                            (malloc=7KB #251)

[0x00007f53ce242453] fork1+0x52b3
                            (malloc=6KB #28)

[0x00007f53ce024918] AsyncGetCallTrace+0x9c9d8
                            (malloc=5KB #18)

[0x00007f53cdd2d333] dlerror+0x29d333
                            (malloc=2KB #57)

[0x00007f53ce36a598] JVM_handle_linux_signal+0x127dc8
                            (malloc=2KB #1)

[0x00007f53ce2d6e24] JVM_handle_linux_signal+0x94654
                            (malloc=2KB #1)

[0x00007f53ce290d96] JVM_handle_linux_signal+0x4e5c6
                            (malloc=2KB #5)

[0x00007f53ce2a1536] JVM_handle_linux_signal+0x5ed66
                            (malloc=2KB #5)

[0x00007f53ce25a49b] JVM_handle_linux_signal+0x17ccb
                            (malloc=2KB #7)

[0x00007f53cde881eb] dlerror+0x3f81eb
                            (malloc=1KB #15)

[0x00007f53ce171720] JVM_FindSignal+0xc13b0
                            (malloc=1KB #74)

[0x00007f53cdf5ef54] dlerror+0x4cef54
                            (malloc=1KB #1)

[0x00007f53cde8a8aa] dlerror+0x3fa8aa
                            (malloc=1KB #59)

[0x00007f53ce3b658d] JVM_handle_linux_signal+0x173dbd
                            (mmap: reserved=575488KB, committed=574976KB)

[0x00007f53ce3b6975] JVM_handle_linux_signal+0x1741a5
                            (mmap: reserved=65536KB, committed=16832KB)

[0x00007f53ce3b4cf9] JVM_handle_linux_signal+0x172529
                            (mmap: reserved=20280KB, committed=20280KB)

[0x00007f53ce371abc] JVM_handle_linux_signal+0x12f2ec
                            (mmap: reserved=19532KB, committed=19532KB)

[0x00007f53cdfc13dc] AsyncGetCallTrace+0x3949c
                            (mmap: reserved=4112KB, committed=4112KB)

[0x00007f53ce3b4a59] JVM_handle_linux_signal+0x172289
                            (mmap: reserved=1808KB, committed=1048KB)

[0x00007f53ce1c928b] JVM_FindSignal+0x118f1b
                            (mmap: reserved=1028KB, committed=1028KB)

[0x00007f53ce36a3b9] JVM_handle_linux_signal+0x127be9
                            (mmap: reserved=1028KB, committed=1028KB)

[0x00007f53ce36f167] JVM_handle_linux_signal+0x12c997
                            (mmap: reserved=1028KB, committed=1028KB)

[0x00007f53ce3bf0dd] JVM_handle_linux_signal+0x17c90d
                            (mmap: reserved=1028KB, committed=1028KB)

[0x00007f53ce27f0f4] JVM_handle_linux_signal+0x3c924
                            (mmap: reserved=32KB, committed=0KB)

回答1:


The RES or %MEM value is the actual usage of physical memory.

Because your system is under no memory pressure at all, no attempt is made to recover physical memory. This is because such an effort is a losing proposition. If the memory is not soon used for some other purpose, the effort to make it free is wasted. If the memory is used soon for some other purpose, the effort to make it free is worse than wasted, it has to be undone to use the memory again. Modern operating systems directly transition memory from one use to another when memory is needed without having to make that memory free. Memory is only made free when there is no other choice.

So, basically, the physical memory is temporarily being wasted until the system can find some better use for it. If you run some other tasks on the machine that consume physical memory, you will see the RES and %MEM values drop as the physical memory is transitioned to another use.



来源:https://stackoverflow.com/questions/20231395/why-java-process-use-much-more-memory-than-expected

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!