เราพยายามตรวจสอบการใช้หน่วยความจำของกระบวนการ Java ภายใต้การโหลดปานกลาง
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12663 test 20 0 8378m 6.0g 4492 S 43 8.4 162:29.95 java
อย่างที่คุณเห็นเรามีหน่วยความจำภายในขนาด 6Gb ตอนนี้ส่วนที่น่าสนใจคือ: กระบวนการถูกดำเนินการกับ params เหล่านี้:
- -Xmx2048m
- -Xms2048m
- -XX: NewSize = 512m
- -XX: MaxDirectMemorySize = 256m
- ... บางรายการสำหรับ GC และรายการอื่น ๆ
เมื่อดูการตั้งค่าเหล่านี้และการใช้งานหน่วยความจำจริงเราจะสะดุดเพื่อดูความแตกต่างของสิ่งที่เราคาดว่ากระบวนการนี้จะใช้และสิ่งที่ใช้จริง
โดยปกติแล้วปัญหาหน่วยความจำของเราจะได้รับการแก้ไขโดยการวิเคราะห์การถ่ายโอนข้อมูลกอง แต่ในกรณีนี้หน่วยความจำของเราจะใช้ที่ไหนสักแห่งนอกกอง
คำถาม: ขั้นตอนในการลองและค้นหาสาเหตุของการใช้หน่วยความจำสูงเช่นไร? เครื่องมือใดที่สามารถช่วยเราระบุสิ่งที่ใช้หน่วยความจำในกระบวนการนั้น
แก้ไข 0
ดูเหมือนว่านี่จะเป็นปัญหาที่เกี่ยวข้องกับกองเนื่องจากเรายังมีพื้นที่ค่อนข้างบาง:
jmap -heap 12663
ผลลัพธ์ใน (แก้ไขเพื่อประหยัดพื้นที่)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 536870912 (512.0MB)
MaxNewSize = 536870912 (512.0MB)
OldSize = 1610612736 (1536.0MB)
NewRatio = 7
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 85983232 (82.0MB)
New Generation: 45.7% used
Eden Space: 46.3% used
From Space: 41.4% used
To Space: 0.0% used
concurrent mark-sweep generation: 63.7% used
Perm Generation: 82.5% used
แก้ไข 1
ใช้ pmap เราจะเห็นว่ามีการจัดสรร 64Mb ค่อนข้าง:
pmap -x 12663 | grep rwx | sort -n -k3 | less
ผลลัพธ์ใน:
... a lot more of these 64Mb chunks
00007f32b8000000 0 65508 65508 rwx-- [ anon ] <- what are these?
00007f32ac000000 0 65512 65512 rwx-- [ anon ]
00007f3268000000 0 65516 65516 rwx-- [ anon ]
00007f3324000000 0 65516 65516 rwx-- [ anon ]
00007f32c0000000 0 65520 65520 rwx-- [ anon ]
00007f3314000000 0 65528 65528 rwx-- [ anon ]
00000000401cf000 0 241904 240980 rwx-- [ anon ] <- Direct memory ?
000000077ae00000 0 2139688 2139048 rwx-- [ anon ] <- Heap ?
ดังนั้นวิธีการค้นหาชิ้น 64Mb เหล่านั้นคืออะไร ใช้อะไร มีข้อมูลประเภทใดอยู่ในนั้น
ขอบคุณ