Skala atau ukuran apa yang dipatuhi oleh “tekanan ingatan” Mavericks dan Yosemite?


57

Monitor Aktivitas Mavericks (dan juga Yosemite) menunjukkan diagram baru, tekanan memori . Sedihnya, teks bantuannya hanya secara samar-samar menjelaskan apa tepatnya ukurannya. Bagaimana tekanan memori dihitung?

Monitor Aktivitas Mavericks - memori

Kredibilitas gambar diberikan untuk jawaban ini dari pertanyaan jajak pendapat tentang fitur baru terbaik Mavericks.

Jawaban:


51

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.

aktivitas memantau hasil <code> sudo memory_pressure -l warn </code>

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.

aktivitas memantau hasil <code> sudo memory_pressure -l critical </code>

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.


Situs web itu juga memiliki artikel terperinci - newosxbook.com/articles/MemoryPressure.html - merinci tekanan dan penanganan Memori di OS X dan iOS
user61711

Detail luar biasa tentang persamaan dan perbedaan antara kernel Mavericks dan iOS. Terima kasih atas tautannya ke Process Explorer.
bmike

14

Tekanan memori ditentukan oleh dua penghitung yang disimpan secara internal oleh Mach:

  • vm_page_free_count: Berapa banyak halaman RAM yang saat ini gratis
  • vm_page_free_target: Berapa banyak halaman RAM, setidaknya, secara optimal harus bebas.

Anda dapat melihat ini dengan mudah menggunakan sysctl:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

jika jumlah halaman gratis jatuh di bawah jumlah target - kami memiliki situasi tekanan.


Dari http://newosxbook.com/articles/MemoryPressure.html

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.