Khi chạy một ứng dụng Java (trong YARN) với theo dõi bộ nhớ riêng được bật (-XX:NativeMemoryTracking=detail
xem https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.html và https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html), tôi có thể xem bộ nhớ JVM đang sử dụng bao nhiêu bộ nhớ trong các danh mục khác nhau.Tại sao JVM báo cáo bộ nhớ cam kết nhiều hơn kích thước thiết lập quy trình cư trú của Linux?
Ứng dụng của tôi trên jdk 1.8.0_45 show:
Native Memory Tracking: Total: reserved=4023326KB, committed=2762382KB - Java Heap (reserved=1331200KB, committed=1331200KB) (mmap: reserved=1331200KB, committed=1331200KB) - Class (reserved=1108143KB, committed=64559KB) (classes #8621) (malloc=6319KB #17371) (mmap: reserved=1101824KB, committed=58240KB) - Thread (reserved=1190668KB, committed=1190668KB) (thread #1154) (stack: reserved=1185284KB, committed=1185284KB) (malloc=3809KB #5771) (arena=1575KB #2306) - Code (reserved=255744KB, committed=38384KB) (malloc=6144KB #8858) (mmap: reserved=249600KB, committed=32240KB) - GC (reserved=54995KB, committed=54995KB) (malloc=5775KB #217) (mmap: reserved=49220KB, committed=49220KB) - Compiler (reserved=267KB, committed=267KB) (malloc=137KB #333) (arena=131KB #3) - Internal (reserved=65106KB, committed=65106KB) (malloc=65074KB #29652) (mmap: reserved=32KB, committed=32KB) - Symbol (reserved=13622KB, committed=13622KB) (malloc=12016KB #128199) (arena=1606KB #1) - Native Memory Tracking (reserved=3361KB, committed=3361KB) (malloc=287KB #3994) (tracking overhead=3075KB) - Arena Chunk (reserved=220KB, committed=220KB) (malloc=220KB)
Điều này cho thấy 2.7GB bộ nhớ cam kết, trong đó có 1,3GB đống phân bổ và gần như 1.2 GB của phân bổ ngăn xếp chủ đề (sử dụng nhiều chủ đề).
Tuy nhiên, khi chạy ps ax -o pid,rss | grep <mypid>
hoặc top
, chỉ hiển thị 1,6 GB bộ nhớ cư trú RES/rss
. Kiểm tra hoán đổi nói không sử dụng:
free -m total used free shared buffers cached Mem: 129180 99348 29831 0 2689 73024 -/+ buffers/cache: 23633 105546 Swap: 15624 0 15624
Tại sao JVM chỉ ra bộ nhớ 2.7GB được cam kết khi chỉ có 1,6 GB là cư trú? Phần còn lại đi đâu?
có thể trùng lặp của [Có RSS theo dõi bộ nhớ được dành riêng hoặc cam kết không?] (Http://stackoverflow.com/questions/31071019/does-rss-tracks-reserved-or-commited-memory) – the8472
không. rằng câu hỏi và câu trả lời thảo luận về bộ nhớ dành riêng nhưng không cam kết cũng như nói sự khác biệt giữa cam kết và cư trú là trao đổi, mà tôi đã chỉ ra không phải là trường hợp ở đây. –
câu trả lời cũng bao gồm sự khác biệt giữa cam kết so với cư dân. – the8472