Mengapa nilai VSIZE di atas berbeda dari nilai VSZ (ukuran set Virtual) di ps?

9

Saya tahu VSZ in psadalah untuk total ruang alamat yang dialokasikan untuk aplikasi dan kadang-kadang disebut sebagai vsize (disebutkan dalam halaman manual psdi linux), tetapi apa definisi VSIZE top? Output teratas dari iPhone ini berbeda dari yang teratas di Linux:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324
Ralph Wen
sumber
Saya tidak dapat mereproduksi ini di salah satu mesin darwin saya. Itu membuat saya berpikir shell yang mereka setup di iphone memiliki set blocksize yang aneh?
polinomial
mereka terlihat menghitung RSIZE / rss dengan cara yang sama, tetapi ps melaporkan vsz 2.5x lebih besar dari yang dilaporkan oleh top. mungkin topdi iOS tidak termasuk objek bersama dalam vsize, atau sesuatu.
Tim Kennedy
"Output teratas dari iPhone ini berbeda dari yang teratas di Linux" - bukan kejutan, bukan?
poige

Jawaban:

5

Sistem memori Linux dipenuhi dengan banyak rutinitas utilitas pengoptimalan memori dan berbagi memori, membuat gagasan tentang bagaimana memori dibagi dan dikonsumsi di antara, pendekatan yang rumit. Output dari ps dan perintah-perintah lain yang terkait semua mengerjakan output mereka dari data di bawah /procsistem file. Terutamaps, RSS (memori ukuran penduduk) dan VSIZE (ukuran memori virtual) keduanya penting, namun VSIZE tidak menunjukkan penggunaan memori yang akurat dan perbedaan antara VSIZE dan rss adalah apa yang sebenarnya dimaksudkan dan dialokasikan untuk program selama inisialisasi tetapi mungkin belum dirujuk. Seperti program, mungkin ada banyak pustaka yang ditautkan tetapi belum dimuat karena belum direferensikan dalam runtime program yang sebenarnya. RSS memberikan total memori yang benar-benar digunakan oleh program tetapi mungkin tidak memberikan gambaran yang benar tentang konsumsi memori, karena sebagian besar memori yang dialokasikan dapat dibagi dengan contoh lain dari proses yang sama atau proses lain. Mencari di bawah /proc/<processid>/mapsmungkin memberikan gambaran kasar tentang bagaimana memori telah digunakan tetapi mereka diam kadang-kadang bisa menyesatkan. Menggunakanpmap -x <pid> dari commandline, berguna untuk melihat penyebarannya.

Utilitas yang sering lebih baik adalah freedan vmstat. freeakan memberi Anda keseluruhan detail konsumsi memori saat ini dan vmstat dapat digunakan untuk melihat seberapa sering sedang diperbarui.

Nikhil Mulley
sumber
Alasan lain atau penjelasan yang masuk akal mengapa ps TIDAK boleh dianggap memberikan proses penggunaan memori yang benar. Baca ini di virtualthreads.blogspot.com/2006/02/...
Nikhil Mulley
2
Apa yang ingin disampaikan oleh poster jawaban ini adalah bahwa definisi memori yang digunakan rumit dan beragam. Tidak ada satu tempat di kernel di mana ia dilacak dan dilaporkan. Utilitas melakukan interpretasi mereka sendiri dari berbagai statistik yang dilaporkan oleh kernel.
Johan