Java native memory usage
Solution 1
(in my case I use java 8)
add to command line: -XX:NativeMemoryTracking=summary
then launch jcmd <PID> VM.native_memory
You should get something like this:
Total: reserved=3863657KB, committed=1679977KB
- Java Heap (reserved=1843200KB, committed=824320KB)
(mmap: reserved=1843200KB, committed=824320KB)
- Class (reserved=1311974KB, committed=298726KB)
(classes #52579)
(malloc=5350KB #76340)
(mmap: reserved=1306624KB, committed=293376KB)
- Thread (reserved=263278KB, committed=263278KB)
(thread #256)
(stack: reserved=262140KB, committed=262140KB)
(malloc=839KB #1280)
(arena=299KB #510)
- Code (reserved=278521KB, committed=164773KB)
(malloc=28921KB #37983)
(mmap: reserved=249600KB, committed=135852KB)
- GC (reserved=114897KB, committed=77093KB)
(malloc=13729KB #67925)
(mmap: reserved=101168KB, committed=63364KB)
- Compiler (reserved=461KB, committed=461KB)
(malloc=330KB #1138)
(arena=131KB #3)
- Internal (reserved=13877KB, committed=13877KB)
(malloc=13845KB #72978)
(mmap: reserved=32KB, committed=32KB)
- Symbol (reserved=28871KB, committed=28871KB)
(malloc=24740KB #275452)
(arena=4131KB #1)
- Native Memory Tracking (reserved=8393KB, committed=8393KB)
(malloc=45KB #523)
(tracking overhead=8348KB)
- Arena Chunk (reserved=184KB, committed=184KB)
(malloc=184KB)
For more information see https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html
Solution 2
This article gives some good information about hunting down native memory issues and explains how you run out of native memory.
Solution 3
For those that come after, VMMap will give you your answer. It will show native memory allocations. In my experience, the -Xss is ignored at minimum amount of 124K I believe within the OS allocation chunks. The OS allocations come in ever doubling chunks until it gets to 1GB(and then you're done.) If you can't reduce your threads, then try reducing your max heap and max permgen settings or try the /3GB switch.
Comments
-
NoodleX over 4 years
Is there any tool to know how many native memory has been used from my java application ? I've experienced outofmemory from my application : Current setting is : -Xmx900m
Computer, Windows 2003 Server 32bit, RAM 4GB.
Also is changing boot.ini to /3GB on windows, will make any difference? If is set Xmx900m, how much max native memory can be allocated for this process ? is it 1100m ?
-
NoodleX about 14 yearshi Luno, jvisualvm only provide me free and used heap memory, what i need is free native memory. I'm running out of native memory.
-
NoodleX about 14 yearsSo you are saying to know maximum native memory space is : 2GB - Xmx - Xmx permgen space = Max native memory space. Is changing to 3GB will expand native memory space also? so it become : 3GB - Xmx - Xmx permgen space = Max native memory space. Is there any tool to monitor this realtime, afaik i can't find this figure in jconsole/jvisualvm. many thanks.
-
Affe about 14 yearsProcess explorer will give you some fairly detailed information: technet.microsoft.com/en-us/sysinternals/bb896653.aspx The deep internals of windows memory management are complicated. I don't know if there even exists a simple formula for getting an 'exact' number for how much space you really have free at any given time. Basically you put the app server under production load and tune down the heap until you find the spot where you get neither No Native Threads nor Out of Heap Space.
-
11101101b over 10 yearsYeah, @Mirek Pluta I have tons of free heap memory usage according to jvisualvm, but I'm getting the "out of native memory" error as well.