Berapa swap yang digunakan aplikasi Mac?

15

Apakah ada cara untuk mengetahui apakah aplikasi tertentu berjalan pada Mac OSX (10.2+) memiliki sebagian memorinya yang diganti (yaitu, ke salah satu /private/var/vm/swapfile*file)? Dan berapa banyak?

Bounty (150 rps)

Pertanyaan sederhana. Jawaban yang benar pertama akan diterima jika saya melihatnya dengan kurang dari 2 hari berakhirnya periode hadiah. Jika saya masih belum mendapatkannya, saya akan memberikannya kepada siapa pun yang memberi tahu saya fakta baru yang paling menarik. Dan jika saya tidak belajar satu hal pun dari salah satu jawaban, saya akan memberikan hadiah kepada siapa pun yang menulis paling cantik.

Charles Stewart
sumber
Ini pertanyaan yang sangat buruk. Angka yang Anda cari akan berubah karena Anda mencoba mengukurnya (pikirkan prinsip ketidakpastian Heisenberg). Lebih lanjut itu akan berubah sepanjang waktu tergantung pada aplikasi lain dan persyaratan memori mereka, pola dan prioritas proses. Jika Anda menemukan nomor itu tidak akan ada gunanya bagi Anda kecuali Anda mengedit kode OS, karena ada sedikit yang akan Anda lakukan dari sudut pandang aplikasi untuk mengubahnya.
gavaletz
3
@gavaletz: Bangun dari tempat tidur yang salah pagi ini? Saya ingin jenis profil swap yang dimungkinkan oleh Linux menggunakan / proc / $ pid / smaps. Saya biasanya dapat mengidentifikasi ledakan tiba-tiba aktivitas swap menggunakan telinga saya, jadi saya tidak terlalu terganggu dengan prinsip ketidakpastian gavaletz.
Charles Stewart

Jawaban:

13

Saya sudah googling banyak ;-) Seperti yang saya mengerti, memori virtual dari proses yang diberikan dibagi menjadi halaman yang ditangani oleh OS dan disajikan kepada aplikasi seolah-olah itu adalah RAM.

Di OS X, berdasarkan pada kernel Mach, ini ditangani oleh daemon yang disebut dynamic_pager. Proses ini menghasilkan swapfile (s) /private/var/vmseperti yang Anda sebutkan. File swap ini tidak dihasilkan berdasarkan per aplikasi, tetapi berdasarkan "kebutuhan memori". File swap dibagi menjadi halaman-halaman 4096 byte, dan halaman - halaman tersebut kemudian dialokasikan untuk proses-proses yang (dianggap oleh OS) membutuhkan memori virtual. Oleh karena itu, Anda tidak dapat mengaitkan swapfile dengan aplikasi yang diberikan, tetapi Anda dapat melihat berapa banyak halaman yang digunakan proses tertentu.

Anda mungkin ingin mencoba perintah vm_statdalam Termial. Ini memberi Anda statistik penggunaan VM (perhatikan bahwa 'ukuran halaman' kali jumlah halaman aktif sama dengan ukuran swapfile Anda). Ini juga menjelaskan mengapa Anda dapat memiliki banyak proses menggunakan VM, tetapi hanya beberapa swapfile.

Perintah menyenangkan lainnya adalah vmmap [process id]dan pagestuff.

trolle3000
sumber
Omong-omong, lihat developer.apple.com/mac/library/documentation/Darwin/Conceptual/… jika Anda ingin tahu lebih banyak.
trolle3000
Ini terlihat menjanjikan. Ini sepertinya memberikan jawaban yang pasti untuk bagian pertama dari pertanyaan, dan menunjukkan jawaban konkret untuk bagian kedua. Saya perlu menggali lebih jauh ...
Charles Stewart
Bukankah vmmap [pid]atau vmmap -pages [pid]jawaban untuk bagian kedua dari pertanyaan Anda?
trolle3000
vmmap $ pid memang memberikan informasi yang tidak ambigu tentang apa yang diklasifikasikan sebagai wilayah yang dapat ditulisi. Itu tidak membedakan antara dialokasikan (mis. Swappable) dan memori yang ditukar untuk daerah hanya baca, tapi mungkin ada perbedaan tidak begitu penting. Saya kemungkinan besar akan menerima jawaban ini besok.
Charles Stewart
5

The vmmap PIDperintah harus memberikan beberapa statistik membantu dalam angka tentang suatu proses.

ayaz
sumber
even vmmap [AppName] berfungsi
Studer
4

Berdasarkan ide-ide yang diposting di sini saya membuat garis kecil kode ini:

sudo vmmap notifyd | grep -A3 'Summary'

yang menampilkan bagian Ringkasan (3 baris) dari output vmmap. Saya sudah menggunakannotifyd dalam contoh ini, tetapi Anda dapat menggantinya dengan PID yang Anda tahu.

Baris ini akan mencoba mendaftar semua garis Ringkasan dari semua proses yang berjalan. Jelas beberapa akan gagal karena id proses mereka sudah hilang (proses berakhir), tetapi secara umum saya menemukan ini adalah cara yang bagus untuk menelusuri daftar informasi memori dan melihat swapper atas.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

Diedit: Beberapa pengguna anonim melihat baris perintah terakhir ini membutuhkan peningkatan karena jelas varian aslinya tidak berfungsi lagi. Jadi terima kasih banyak, siapa pun Anda, dan maaf hasil edit Anda ditolak. (Perintah pertama sebelumnya membaca 'ps xa' dan mengakibatkan vmmap gagal karena judul ps dilemparkan padanya)

Peningkatan lebih lanjut: Jika Anda ingin mengetahui nama program segera gunakan perubahan kecil ini

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

Sedikit amandemen pada ujung lain dari perintah ini memungkinkan Anda untuk memfilter nama-nama program atau komponen jalur jalur perintah tertentu. Di sini kita melihat semua proses dari 'Library / PrivateFrameworks' hanya sebagai contoh.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |
Andreas
sumber
Saya mendapatkan banyak kegagalan dengan mengatakan vmmap tidak dapat diluncurkan sebagai proses 32-tapi, yang menghentikan xargs. Untuk mendapatkan kartu untuk melanjutkan, saya lakukan ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'. Itu masih tidak berhenti di ctrl + c, tetapi juga tidak berhenti pada kesalahan vmmap.
ShadSterling
0

Buka Monitor Aktivitas di folder / Aplikasi / Utilitas Anda dan ada kolom Memori Virtual yang akan memberi tahu Anda hal ini. Anda dapat mengklik tajuk Memori Virtual untuk mengurutkan berdasarkan sebagian besar atau sedikitnya yang digunakan oleh aplikasi. Pastikan juga untuk mengubah Proses Saya ke Semua Proses, dan perhatikan bahwa satu aplikasi dapat memiliki beberapa proses. Misalnya aplikasi pihak ke-3 Little Snitch terdiri dari "Little Snitch Network Monitor" dan "Little Snitch UIAgent."

ridogi
sumber
4
Itu salah. Nubmer di kolom memori virtual adalah jumlah memori saat ini dalam RAM dan pada swap, file mmaped dan saya tidak tahu apa lagi.
Tadeusz A. Kadłubowski
Apakah kamu yakin Apple tidak menyebutkannya support.apple.com/kb/TA20517
ridogi
1
Nomor VM mengukur jumlah yang dialokasikan tetapi belum benar-benar digunakan. File swap akan memiliki apa yang sebenarnya digunakan.
Chealion
@Chealion: bagaimana Anda menentukan memori yang dialokasikan tetapi tidak benar-benar digunakan?
Tadeusz A. Kadłubowski
@tkadlubo: Dalam hal ini, keyakinan saya adalah bahwa hanya perbedaan antara ukuran VM yang dinyatakan tersedia untuk proses versus halaman yang sebenarnya, yang di-pindahkan ke disk. Saya tidak yakin bagaimana mendefinisikannya selain mencatat bahwa nomor VM dan file swap pada disk berbeda.
Chealion
0

Seperti kata ridogi, buka Activity Monitor. Arahkan ke proses yang ingin Anda periksa, dan klik ... Periksa! Kemudian klik memori; ini akan memberi tahu Anda berapa banyak swap yang menggunakan proses yang diberikan.

Selamat bersenang-senang!

trolle3000
sumber
3
Halaman pemeriksa memberi tahu saya segala macam hal menarik yang berkorelasi positif dengan apa jawaban dari pertanyaan itu, seperti #pagefaults, #pageins, dan daftar file yang di-mount, tetapi tidak ada jawaban aktual untuk pertanyaan yang saya cari.
Charles Stewart