Tekanan memori bukan ukuran sederhana dari persentase memori bebas dan tampaknya menjadi grafik 0 hingga 100%. The sysctlnilai vm.memory_pressuredihitung dalam kaitannya dengan target dihitung yang melacak rasio antara halaman memori bebas dan aktif ke halaman kabel dan aktif. Penghitung absolut dilihat menggunakan vm_statalat baris perintah untuk memeriksa alokasi rinci memori virtual. Jonathan Levin memiliki dokumentasi yang sangat baik di http://newosxbook.com/articles/MemoryPressure.html yang meliputi memori virtual macOS dan iOS dan bagaimana mereka menghitung tekanan memori serta tindakan yang diambil ketika indeks tekanan tinggi.
Memori virtual yang relevan (vm) yang memberi makan perhitungan vm.memory_pressureadalah:
vm.page_free_count - jumlah absolut halaman gratis
vm.vm_page_free_target - target atau sasaran yang dihitung untuk situasi "bebas tekanan"
vm.page_free_wanted - apa yang ingin dibebaskan oleh sistem vm untuk meringankan indeks tekanan yang dihitung saat ini
Jadi - jika Anda melacak tekanan memori Anda dengan Monitor aktivitas (atau saya memeriksa nilai sysctl secara terprogram atau di shell baris perintah) Anda sebaiknya melihat empat nilai ini:
sysctl -a vm | egrep "page_free|pressure"
Ada perintah baru yang memory_pressurediperkenalkan dengan Mavericks dan ketika saya menjalankannya untuk mengarahkan subsistem memori ke status peringatan - Anda dapat melihat tekanan memori meningkat menjadi rentang kuning.
Alat ini dialokasikan sekitar 4 GB memori untuk alat seperti grafik tekanan meningkat terus ke negara ini di mana tampaknya "peringatan" level grafiknya: sudo memory_pressure -l warn. Seperti yang Anda lihat, sistem sebelum tekanan digunakan 5,9 GB dan setelah itu digunakan hingga 7,99 GB yang bahkan tidak perlu ditambah karena swapping dan kompresi.
Setelah menonton bagaimana vm_stat 15menunjukkan hasil peringatan tanpa paging yang terukur, saya keluar dari alat (Control-C) dan kemudian menjalankan kembali alat untuk membuat tekanan memori menjadi kritis:sudo memory_pressure -l critical
Saya tidak membiarkan ini berjalan lebih dari beberapa menit karena paging mulai dan begitu alat mengatakan saya punya 5 GB RAM untuk disk, saya tidak ingin mengisi drive saya dan keluar dari alat.
Anda dapat mengamati seberapa cepat sistem membebaskan RAM setelah peringatan itu berakhir dan juga bagaimana ia merambah ke wilayah "merah" untuk menunjukkan bahwa sistem memori virtual tidak dapat mengompres halaman yang cukup untuk menghindari pertukaran ke disk. Tebakan saya yang berpendidikan merah pada tekanan menunjukkan swapping dan alokasi berlebihan yang dramatis dan / atau waktu di mana halaman gratis di bawah jumlah yang disukai sistem dan secara aktif membersihkan halaman tidak aktif dan / atau halaman swapping yang diharapkan akan digunakan untuk bertukar. Demikian pula, sistem dengan cepat pulih setelah alokasi dirilis dan tekanan diambil dari sistem memori virtual.
Terimakasih atas klarifikasinya. Saya ingin tahu apakah ada perintah (atau serangkaian perintah) yang menghitung Memori Virtual, File Cache dan parameter Memori Aplikasi dalam cuplikan layar di atas.
Muhammad Hassan Nasr
@MuhammadHassan Jawaban di bawah ini mencakup ringkasan teknik reverse bagus dari algoritma dan menunjukkan di mana mencari xnusumber terbuka untuk internal. Saya telah mencabut 4 nilai yang dibahas yang paling relevan dengan tampilan tekanan GUI.
bmike
30
Untuk lebih memperjelas dan membuat tebakan itu lebih akurat: tekanan memori adalah metrik yang digunakan oleh kernel (xnu) dengan utas khusus yang disebut memory_status (sebelumnya dikenal sebagai Jetsam). Utas ini bertanggung jawab untuk mendeteksi ketika RAM yang tersedia rendah - yang di OS X dapat memaksa swapping, dan di iOS membunuh aplikasi yang menghabiskan banyak memori (karena tidak ada swap). Di Mavericks, kedua OS lebih dekat bersama. Memorystatus mengeluarkan catatan kernel, yang akhirnya diterjemahkan oleh runtime Obj-C ke appDidReceiveLowMemoryWarning. Aplikasi seharusnya membersihkan memori yang tidak digunakan atau tidak digunakan (misalnya, cache). LibC Darwin juga membersihkan memori secara otomatis.
Ada pemanggilan sistem yang spesifik (meskipun tidak berdokumen), vm_pressure_monitor (# 296, jika saya ingat dengan benar), yang memungkinkan klien mendengarkan peristiwa tekanan, dan melihat berapa banyak halaman fisik yang dapat direklamasi.
Anda dapat melihat acara tekanan di Mavericks menggunakan Process Explorer untuk OS X - dapat diunduh dari http://newosxbook.com/index.php?page=downloads . Keduanya menunjukkan kepada Anda tekanan "pengukur", serta peristiwa tekanan.
xnu
sumber terbuka untuk internal. Saya telah mencabut 4 nilai yang dibahas yang paling relevan dengan tampilan tekanan GUI.Untuk lebih memperjelas dan membuat tebakan itu lebih akurat: tekanan memori adalah metrik yang digunakan oleh kernel (xnu) dengan utas khusus yang disebut memory_status (sebelumnya dikenal sebagai Jetsam). Utas ini bertanggung jawab untuk mendeteksi ketika RAM yang tersedia rendah - yang di OS X dapat memaksa swapping, dan di iOS membunuh aplikasi yang menghabiskan banyak memori (karena tidak ada swap). Di Mavericks, kedua OS lebih dekat bersama. Memorystatus mengeluarkan catatan kernel, yang akhirnya diterjemahkan oleh runtime Obj-C ke appDidReceiveLowMemoryWarning. Aplikasi seharusnya membersihkan memori yang tidak digunakan atau tidak digunakan (misalnya, cache). LibC Darwin juga membersihkan memori secara otomatis.
Ada pemanggilan sistem yang spesifik (meskipun tidak berdokumen), vm_pressure_monitor (# 296, jika saya ingat dengan benar), yang memungkinkan klien mendengarkan peristiwa tekanan, dan melihat berapa banyak halaman fisik yang dapat direklamasi.
Anda dapat melihat acara tekanan di Mavericks menggunakan Process Explorer untuk OS X - dapat diunduh dari http://newosxbook.com/index.php?page=downloads . Keduanya menunjukkan kepada Anda tekanan "pengukur", serta peristiwa tekanan.
sumber
Tekanan memori ditentukan oleh dua penghitung yang disimpan secara internal oleh Mach:
vm_page_free_count
: Berapa banyak halaman RAM yang saat ini gratisvm_page_free_target
: Berapa banyak halaman RAM, setidaknya, secara optimal harus bebas.Anda dapat melihat ini dengan mudah menggunakan sysctl:
jika jumlah halaman gratis jatuh di bawah jumlah target - kami memiliki situasi tekanan.
Dari http://newosxbook.com/articles/MemoryPressure.html
sumber