Saya memiliki proses yang melaporkan di 'atas' bahwa ia memiliki 6GB memori penduduk dan 70GB memori virtual yang dialokasikan. Yang aneh adalah bahwa server khusus ini hanya memiliki 8GB fisik dan 35GB ruang swap yang tersedia.
Dari manual 'top':
o: VIRT -- Virtual Image (kb)
The total amount of virtual memory used by the task. It includes
all code, data and shared libraries plus pages that have been
swapped out. (Note: you can define the STATSIZE=1 environment vari-
able and the VIRT will be calculated from the /proc/#/state VmSize
field.)
VIRT = SWAP + RES.
Dengan penjelasan ini, saya berharap alokasi memori virutal untuk suatu proses terbatas pada memori fisik swap + saya.
Menurut 'pmap', kode, pustaka bersama, dan bagian memori bersama dari proses ini semuanya minimal - tidak lebih dari 300 juta.
Jelas, mesin dan prosesnya masih berfungsi dengan benar (walaupun lambat), jadi apa yang saya lewatkan di sini?
sumber
Berikut adalah diskusi tentang kebajikan vs memori penduduk:
/programming/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used
Diskusi mengacu pada proses Java, tetapi berlaku untuk apa pun yang berjalan di Linux. Poin utama sehubungan dengan kebajikan adalah bahwa total mencakup banyak hal yang mungkin tidak pernah digunakan. Virt adalah sesuatu untuk dilihat untuk OS 32-bit (karena proses akan mencapai batas pada ruang addressable), tetapi sebagian besar tidak berguna sebaliknya. Seperti dicatat, hal yang perlu diperhatikan adalah memori penduduk, yang akan terbatas pada RAM fisik yang tersedia dan swap Anda.
sumber
Ini kemungkinan karena ruang alamat proses adalah ukuran seperti yang Anda nyatakan, tetapi tidak benar-benar dialokasikan oleh OS.
Dari: http://lwn.net/Articles/428100/
Jadi itulah cara manajemen memori yang tidak sengaja dilakukan kadang-kadang - memiliki ruang alamat yang terus-menerus menyederhanakan pengeluaran memori yang tidak terpakai.
sumber
Jawabannya mungkin MMAP - data ada di disk, tetapi "di luar" swap dan tidak dapat dilihat dengan perintah "bebas" atau "atas".
Jika proses java tidak terlalu rumit, Anda dapat mencoba bermain dengan "lsof" untuk menemukan di mana file MMAP berada. Namun jika proses java ini rumit, akan sulit terlihat.
sumber
Saya juga terkejut bahwa Linux memungkinkan Anda untuk mengalokasikan lebih banyak memori virtual daripada ada memori fisik + ruang swap, tetapi ternyata itu membantu kinerja dalam situasi tertentu.
http://www.linuxjournal.com/article/10678
sumber