“ ความกดดันของหน่วยความจำ” ของ Mavericks และโยเซมิตีมีขนาดเท่าไหร่?


57

Mavericks' (และยังโยเซมิตี) กิจกรรมการตรวจสอบแสดงแผนภาพใหม่ดันหน่วยความจำ น่าเศร้าที่ข้อความช่วยเหลือของมันอธิบายอย่างชัดเจนว่าอะไรเป็นมาตรการเท่านั้น ความดันหน่วยความจำคำนวณอย่างไร

การตรวจสอบกิจกรรม Mavericks - หน่วยความจำ

รูปภาพไปที่คำตอบนี้จากคำถามสำรวจความคิดเห็นในฟีเจอร์ใหม่ที่ดีที่สุดของ Mavericks

คำตอบ:


51

ความดันหน่วยความจำไม่ใช่มาตรวัดเปอร์เซ็นต์ความจำที่ง่ายและดูเหมือนว่าจะเป็นกราฟ 0 ถึง 100% sysctlค่าของvm.memory_pressureการคำนวณในส่วนที่เกี่ยวกับเป้าหมายการคำนวณที่ติดตามอัตราส่วนระหว่างหน้าหน่วยความจำฟรีและไม่ได้ใช้งานไปยังหน้าแบบใช้สายและการใช้งาน ตัวนับสัมบูรณ์จะถูกดูโดยใช้vm_statเครื่องมือบรรทัดคำสั่งเพื่อตรวจสอบการจัดสรรรายละเอียดของหน่วยความจำเสมือน Jonathan Levin มีเอกสารที่ยอดเยี่ยมที่http://newosxbook.com/articles/MemoryPressure.htmlซึ่งครอบคลุมทั้งหน่วยความจำเสมือน macOS และ iOS และวิธีคำนวณความดันหน่วยความจำรวมถึงการดำเนินการเมื่อดัชนีความดันสูง

หน่วยความจำเสมือนที่เกี่ยวข้อง (vm) ที่ฟีดการคำนวณvm.memory_pressureคือ:

  • vm.page_free_count - จำนวนหน้าฟรีที่แน่นอน
  • vm.vm_page_free_target - เป้าหมายหรือเป้าหมายที่คำนวณได้สำหรับสถานการณ์ "ปราศจากความกดดัน"
  • vm.page_free_wanted - สิ่งที่ระบบ vm ต้องการให้ฟรีเพื่อบรรเทาดัชนีความดันที่คำนวณได้ในปัจจุบัน

ดังนั้น - หากคุณกำลังติดตามความดันหน่วยความจำของคุณด้วย Activity Monitor (หรือการตรวจสอบค่า sysctl โดยทางโปรแกรมหรือที่เชลล์บรรทัดคำสั่ง) คุณควรจะดูค่าทั้งสี่นี้:

sysctl -a vm | egrep "page_free|pressure"

มีคำสั่งใหม่ที่memory_pressureนำมาใช้กับ Mavericks และเมื่อฉันเรียกใช้เพื่อทำให้ระบบย่อยหน่วยความจำเข้าสู่สถานะเตือน - คุณสามารถเห็นความดันหน่วยความจำเพิ่มขึ้นเป็นช่วงสีเหลือง

ผลการตรวจสอบกิจกรรมของ <code> sudo memory_pressure -l warn </code>

เครื่องมือจัดสรรประมาณ 4 GB หน่วยความจำในการเครื่องมือเป็นกราฟความดันที่เพิ่มขึ้นอย่างต่อเนื่องเพื่อให้รัฐนี้ที่เห็นได้ชัดในระดับ "เตือน" sudo memory_pressure -l warnจะแสดงเป็นกราฟ: อย่างที่คุณเห็นระบบก่อนที่ความดันจะใช้ 5.9 GB และหลังจากนั้นก็ใช้มากถึง 7.99 GB ซึ่งไม่จำเป็นต้องเพิ่มขึ้นเนื่องจากการสลับและการบีบอัด

หลังจากดูวิธีที่vm_stat 15แสดงให้เห็นว่าผลการเตือนไม่มีการเพจจิ้งที่วัดได้ฉันออกจากเครื่องมือ (Control-C) แล้วรันเครื่องมืออีกครั้งเพื่อทำให้ความดันหน่วยความจำมีความสำคัญ:sudo memory_pressure -l critical

ฉันไม่ปล่อยให้เรื่องนี้นานกว่าสองสามนาทีเนื่องจากการเริ่มต้นเพจจิ้งและเมื่อเครื่องมือบอกว่าฉันมี RAM หน้าเพจขนาด 5 GB ลงดิสก์ฉันไม่ต้องการเติมไดรฟ์และออกจากเครื่องมือ

ผลลัพธ์การตรวจสอบกิจกรรมของ <code> sudo memory_pressure -l critical </code>

คุณสามารถสังเกตได้ว่าระบบเพิ่มแรมอย่างรวดเร็วหลังจากที่คำเตือนสิ้นสุดลงและวิธีที่มันบุกเข้ามาในอาณาเขต "สีแดง" เพื่อแสดงให้เห็นว่าระบบหน่วยความจำเสมือนไม่สามารถบีบอัดหน้าพอที่จะหลีกเลี่ยงการสลับไปยังดิสก์ การเดาที่ได้รับการศึกษาของฉันคือสีแดงบนความกดดันบ่งชี้ว่าการแลกเปลี่ยนและการจัดสรรเกินอย่างมากและ / หรือเวลาที่หน้าว่างต่ำกว่าจำนวนที่ระบบต้องการ ในทำนองเดียวกันระบบจะกู้คืนอย่างรวดเร็วเมื่อการจัดสรรถูกปล่อยออกมาและความดันจะถูกนำออกจากระบบหน่วยความจำเสมือน


ขอบคุณสำหรับการชี้แจง ฉันต้องการทราบว่ามีคำสั่ง (หรือชุดคำสั่ง) ที่คำนวณหน่วยความจำเสมือน, แคชไฟล์และพารามิเตอร์หน่วยความจำแอพในภาพหน้าจอด้านบน
มูฮัมหมัดฮัสซัน Nasr

@MuhammadHassan คำตอบด้านล่างครอบคลุมบทสรุปทางวิศวกรรมย้อนกลับที่ดีของอัลกอริทึมและชี้ให้เห็นว่าจะมองหาxnuแหล่งโอเพ่นซอร์สสำหรับ internals ได้อย่างไร ฉันได้ดึงค่าที่ครอบคลุม 4 ค่าที่เกี่ยวข้องกับการแสดงผลความดัน GUI มากที่สุด
bmike

30

หากต้องการอธิบายให้ชัดเจนและคาดเดาได้แม่นยำมากขึ้น: ความดันหน่วยความจำคือการวัดที่ใช้โดยเคอร์เนล (xnu) ด้วยเธรดเฉพาะที่เรียกว่า memory_status (ก่อนหน้านี้รู้จักกันในชื่อ Jetsam) เธรดนี้มีหน้าที่ตรวจจับเมื่อ RAM ที่มีอยู่ในระดับต่ำซึ่งใน OS X สามารถบังคับให้ทำการสลับและใน iOS จะฆ่าแอพที่ใช้หน่วยความจำสูงสุด (เนื่องจากไม่มีการสลับ) ใน Mavericks ทั้งสอง OS นั้นอยู่ใกล้กันมากขึ้น Memorystatus ออกบันทึกเคอร์เนลซึ่งในที่สุดรันไทม์ของ Obj-C จะแปลเป็น appDidReceiveLowMemoryWarning แอปควรล้างหน่วยความจำที่ไม่ได้ใช้หรือไม่เกี่ยวข้อง (ตัวอย่างเช่นแคช) libC ของดาร์วินยังล้างหน่วยความจำโดยอัตโนมัติ

มีการเรียกระบบที่เฉพาะเจาะจง (แม้ว่าจะไม่มีเอกสาร), vm_pressure_monitor (# 296, ถ้าฉันจำได้อย่างถูกต้อง) ซึ่งจะช่วยให้ลูกค้าฟังเหตุการณ์ความกดดันและดูจำนวนหน้าทางกายภาพที่สามารถเรียกคืนได้

คุณสามารถดูเหตุการณ์ที่เกิดขึ้นความดันใน Mavericks ใช้ Process Explorer สำหรับ OS X - ดาวน์โหลดจากhttp://newosxbook.com/index.php?page=downloads ซึ่งทั้งคู่แสดงให้คุณเห็น "เกจ" ความดันรวมทั้งเหตุการณ์ความดัน


เว็บไซต์ดังกล่าวยังมีบทความโดยละเอียด - newosxbook.com/articles/MemoryPressure.html - รายละเอียดความดันและการจัดการหน่วยความจำใน OS X และ iOS
user61711

รายละเอียดยอดเยี่ยมเกี่ยวกับความคล้ายคลึงและความแตกต่างระหว่าง Mavericks และเคอร์เนล iOS ขอบคุณสำหรับลิงค์ไปที่ Process Explorer
bmike

14

ความดันหน่วยความจำถูกกำหนดโดยสองตัวนับมัคช่วยภายใน:

  • vm_page_free_count: ปัจจุบันมี RAM กี่หน้า
  • vm_page_free_target: อย่างน้อยที่สุด RAM ควรมีอิสระอย่างน้อยกี่หน้า

คุณสามารถดูสิ่งเหล่านี้ได้อย่างง่ายดายโดยใช้ 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

หากจำนวนหน้าว่างต่ำกว่าจำนวนเป้าหมาย - เรามีสถานการณ์กดดัน


จากhttp://newosxbook.com/articles/MemoryPressure.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.