java işleminin ılımlı yük altında bellek kullanımını araştırmaya çalışıyoruz.
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
Gördüğünüz gibi 6Gb'de yerleşik belleğimiz var. Şimdi ilginç olan kısım şu: süreç bu parametrelerle yürütülüyor:
- -Xmx2048m
- -Xms2048m
- XX: NewSize = 512
- XX: MaxDirectMemorySize = 256m
- ... bazıları GC ve diğer şeyler için
Bu ayarlara ve gerçek bellek kullanımına baktığımızda, bu sürecin ne kullanmasını beklediğimizin ve gerçekte ne kullandığını fark ettik.
Genellikle bellek problemlerimiz yığın dökümü analiz edilerek çözülür, ancak bu durumda belleğimiz yığın dışında bir yerde kullanılır.
Sorular: Bu kadar yüksek bellek kullanımının nedenini bulmaya yönelik adımlar ne olurdu? Hangi araçlar o süreçte hafızayı neyin kullandığını belirlememize yardımcı olabilir?
DÜZENLE 0
Hâlâ epey bir alanımız olduğu için yığınla ilgili bir sorun gibi görünmüyor:
jmap -heap 12663
sonuç (yer kazanmak için düzenlendi)
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
DÜZENLEME 1
pmap kullanarak oldukça fazla miktar 64Mb olduğunu görebiliriz:
pmap -x 12663 | grep rwx | sort -n -k3 | less
sonuç:
... 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 ?
Peki bu 64Mb parçaları nelerdir? Onları ne kullanıyor? İçlerinde ne tür veriler var?
Teşekkürler