Pertanyaan Atas - berapa ukuran memori virtual? ... linux / ubuntu


saya sedang berlari top untuk memantau kinerja server saya dan 2 dari proses java saya menunjukkan memori virtual hingga 800MB-1GB. Itu adalah hal yang buruk?

Apa arti memori virtual?

Dan oh btw, saya memiliki swap 1GB dan itu menunjukkan 0% digunakan. Jadi saya bingung.

Proses Java = 1 Tomcat server + java daemon Server saya sendiri = Ubuntu 9.10 (karma)


99
2018-05-04 15:37




Lihat: serverfault.com/questions/48582/… - Juliano


Jawaban:


Memori virtual bahkan tidak perlu memori. Misalnya, jika memori proses memetakan file besar, file sebenarnya disimpan di disk, tetapi masih membutuhkan "ruang alamat" dalam prosesnya.

Ruang alamat (mis. Memori virtual dalam daftar proses) tidak memerlukan biaya apa pun; itu tidak nyata. Yang nyata adalah kolom RSS (RES), yang merupakan memori penduduk. Itulah seberapa banyak memori aktual Anda yang sedang diduduki proses.

Tetapi bahkan itu bukanlah seluruh jawaban. Jika sebuah proses memanggil fork (), itu terbagi menjadi dua bagian, dan keduanya awalnya berbagi semua RSS mereka. Jadi bahkan jika RSS awalnya 1 GB, hasilnya setelah forking akan menjadi dua proses, masing-masing dengan RSS sebesar 1 GB, tetapi Anda masih hanya menggunakan 1 GB memori.

Bingung belum? Inilah yang benar-benar perlu Anda ketahui: gunakan free perintah dan periksa hasil sebelum dan sesudah memulai program Anda (di +/- buffers/cache baris). Perbedaan itu seberapa banyak baru memori program yang baru Anda mulai digunakan.


119
2018-05-05 01:17



"Periksa hasil sebelum dan sesudah memulai program Anda", sebagai alternatif, gunakan USS (Unique Set Size) sebagaimana dikembalikan oleh smem. - Hubert Kario
Jadi apakah ada alat yang memberikan jumlah sebenarnya dari memori yang digunakan, alat yang bukan pihak ketiga. - CMCDragonkai
@ CMCDragonkai Ya, gratis. - deviantfan
Jika saya memulai proses java via java -Xmx16g RunLong, yang akan menyimpan memori 16Gb untuk proses java, lalu masuk VIRT dari atas, tampaknya 16Gb dihitung. Dalam hal ini, apa jenis memori 16Gb ini, apakah itu memori yang dipetakan atau ..? - Eric Wang


Dari bagian atas (1) halaman manual:

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.

      VIRT = SWAP + RES.

Dimana RES berarti Resident memory (memori fisik yang digunakan).

Sebenarnya itu tidak benar (lagi). Ketika ia mengatakan "swap," itu juga termasuk file yang program telah dipetakan ke dalam ruang alamatnya, yang mungkin atau mungkin tidak benar-benar mengkonsumsi RAM sebenarnya. Memori ini didukung oleh file tetapi tidak benar-benar swap.

VIRT juga termasuk halaman yang telah dialokasikan tetapi belum digunakan untuk apa pun. Setiap halaman dalam keadaan ini dipetakan ke kernel Zero Page (konsep brilian - Anda harus mencarinya) sehingga muncul di VIRT tetapi sebenarnya tidak mengkonsumsi memori apa pun.


22
2018-05-04 15:43



well thats menarik, begitu juga VIRT = SWAP + RES, kenapa penggunaan SWAP saya adalah nol, sedangkan memori virtual untuk 2 proses java mendekati 1GB ?? - kapso
pada dasarnya menunjukkan Top .... Swap: total 1048568k, 0k digunakan, 1048568k gratis, 505728k cache - kapso
@ user42159 Jawaban ini SALAH! TIDAK ADA 'VIRT = SWAP + RES' di man top! -m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT. Sangat disayangkan bahwa saya tidak bisa menolak jawaban ini. - duleshi
Jawaban ini salah. USED ​​= Res + Swap Size (dari atas Fields Management, diakses dengan menekan tombol f ketika di atas. Juga dari halaman manual teratas). - Jason S


aku menemukan ini penjelasan dari Mugurel Sumanariu sangat jelas:

VIRT adalah ukuran virtual dari suatu proses, yang merupakan jumlah dari   memori itu benar-benar menggunakan, memori itu telah dipetakan ke dalam dirinya sendiri (untuk   Misalnya RAM kartu video untuk server X), file di disk itu   telah dipetakan ke dalamnya (terutama perpustakaan yang dibagikan), dan memori   dibagikan dengan proses lain. VIRT merepresentasikan berapa banyak memori   program dapat diakses pada saat ini.

RES singkatan ukuran penduduk, yang merupakan representasi akurat   berapa banyak memori fisik yang sebenarnya yang sedang dikonsumsi suatu proses. (Ini juga   berhubungan langsung dengan kolom MEM%.) Ini akan hampir selalu   lebih kecil dari ukuran VIRT, karena sebagian besar program bergantung pada C   Perpustakaan.

SHR menunjukkan berapa banyak ukuran VIRT yang sebenarnya dapat dibagikan (memori   atau perpustakaan). Dalam hal perpustakaan, itu tidak selalu berarti   bahwa seluruh perpustakaan adalah penduduk. Misalnya, jika hanya sebuah program   menggunakan beberapa fungsi di pustaka, seluruh pustaka dipetakan dan   akan dihitung dalam VIRT dan SHR, tetapi hanya bagian dari perpustakaan   file yang berisi fungsi yang digunakan akan benar-benar dimuat   dan dihitung berdasarkan RES.


8
2018-01-27 17:53





Kolom VIRT di output ps / atas hampir tidak relevan untuk mengukur penggunaan memori. Jangan khawatir tentang itu. Beban berat Apache VIRT vs RES memori

https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used


5
2018-05-04 15:41



Terima kasih, saya khawatir dan bingung, karena saat penggunaan swap 0%, kolom memori virtual sangat tinggi. Dan juga saya hanya memiliki 1,7GB dari total memori fisik 2,7GB yang digunakan, sedangkan memori virtual tinggi? - kapso


Linux mendukung memori virtual, yaitu, menggunakan disk sebagai perpanjangan dari RAM sehingga ukuran efektif dari memori yang dapat digunakan tumbuh secara bersamaan. Kernel akan menulis isi dari blok memori yang tidak terpakai ke hard disk sehingga memori dapat digunakan untuk tujuan lain. Ketika isi asli diperlukan lagi, mereka dibaca kembali ke dalam memori. Ini semua dibuat transparan sepenuhnya bagi pengguna; program yang berjalan di Linux hanya melihat jumlah memori yang lebih besar yang tersedia dan tidak memperhatikan bahwa sebagian dari mereka berada di disk dari waktu ke waktu. Tentu saja, membaca dan menulis hard disk lebih lambat (pada urutan seribu kali lebih lambat) daripada menggunakan memori nyata, sehingga program tidak berjalan dengan cepat. Bagian dari hard disk yang digunakan sebagai memori virtual disebut ruang swap.

Linux dapat menggunakan file normal di filesystem atau partisi terpisah untuk ruang swap. Partisi swap lebih cepat, tetapi lebih mudah untuk mengubah ukuran file swap (tidak perlu melakukan partisi ulang seluruh hard disk, dan mungkin menginstal semuanya dari awal). Ketika Anda tahu berapa banyak ruang swap yang Anda butuhkan, Anda harus pergi untuk partisi swap, tetapi jika Anda tidak yakin, Anda dapat menggunakan file swap terlebih dahulu, gunakan sistem untuk sementara waktu sehingga Anda bisa merasakan berapa banyak swap Anda perlu, dan kemudian membuat partisi swap ketika Anda yakin tentang ukurannya.

Anda juga harus tahu bahwa Linux memungkinkan seseorang untuk menggunakan beberapa partisi swap dan / atau menukar file pada saat yang bersamaan. Ini berarti bahwa jika Anda hanya sesekali memerlukan jumlah ruang swap yang tidak biasa, Anda dapat mengatur file swap ekstra pada waktu seperti itu, daripada menyimpan seluruh jumlah yang dialokasikan sepanjang waktu.

Catatan tentang terminologi sistem operasi: ilmu komputer biasanya membedakan antara swapping (menulis seluruh proses ke ruang swap) dan paging (menulis hanya bagian ukuran tetap, biasanya beberapa kilobyte, pada suatu waktu). Pager biasanya lebih efisien, dan itulah yang dilakukan Linux, tetapi terminologi Linux tradisional berbicara tentang swapping.

Sumber: http://www.faqs.org/docs/linux_admin/x1752.html


2
2018-05-04 15:43



Jawaban ini menyebarkan kesalahpahaman bahwa memori virtual sama dengan swapping atau paging. Menggunakan disk sebagai perpanjangan RAM mendahului memori virtual. Dan ada banyak sistem (seperti kebanyakan router SoHo) yang memiliki memori virtual tetapi tidak menggunakan disk sebagai perpanjangan dari RAM. (Dan ini bukan jawaban atas pertanyaan OP juga, karena dia tidak menggunakan swap apa pun.) - David Schwartz


VIRtual kolom atas, mengacu pada ruang super (ruang konsumsi super) dari proses, yang prosesnya mungkin tidak benar-benar terjadi pada waktu proses. Ada kolom lain RESident, yang mengacu pada memori / ruang fisik aktual yang dialokasikan oleh proses, pada waktu proses.

Alasan perbedaan, di antara keduanya, dapat dipahami oleh contoh: jika prosesnya menggunakan pustaka tertentu, maka ukuran pustaka, juga akan membantu ke virtual-size. Namun, karena hanya sebagian dari pustaka yang akan digunakan (yaitu beberapa metode yang digunakan), sehingga akan membantu resident-size.

Lihat Info lebih lanjut


2
2018-02-26 14:27





"VIRT" hanya ruang alamat, RES adalah "nyata" memori, tetapi "SHR" (= berbagi) jumlah "RES" adalah bagian dari RES yang dibagikan dengan proses lain. Jadi untuk sebagian besar proses, saya percaya bahwa dengan mengurangi SHR dari RES memberi Anda jumlah memori yang benar-benar disebabkan proses khusus ini.


0
2018-04-18 23:03