ปรากฏการณ์ที่พบบ่อยในการใช้งานแบบวันต่อวัน (และอีกหลายรายการอ้างอิงจากการโพสต์ต่าง ๆ ทางอินเทอร์เน็ต) ของ OS X ดูเหมือนว่าระบบจะช้าเมื่อใดก็ตามที่ไม่มีหน่วยความจำ "ว่าง" เพิ่มอีก สมมุติว่านี่เป็นเพราะการแลกเปลี่ยนเนื่องจากกิจกรรมบนดิสก์มีความชัดเจนและ vm_stat รายงานจำนวนหน้าเว็บหลายหน้า (แก้ไขให้ฉันผิด)
อย่างไรก็ตามจำนวนของ ram "Inactive" ram มักจะอยู่ที่ประมาณ 12.5% -25% ของหน่วยความจำที่มีอยู่ทั้งหมด (^ 1) เมื่อทำการสลับเริ่ม / เกิด / สิ้นสุด
อ้างอิงจากhttp://support.apple.com/kb/ht1342 :
หน่วยความจำที่ไม่ได้ใช้งาน
ข้อมูลนี้ในหน่วยความจำไม่ได้ถูกใช้อย่างแข็งขัน แต่เพิ่งถูกนำมาใช้
ตัวอย่างเช่นถ้าคุณใช้ Mail แล้วออกจากนั้น RAM ที่ Mail ใช้นั้นถูกทำเครื่องหมายเป็นหน่วยความจำที่ไม่ได้ใช้งาน หน่วยความจำที่ไม่ใช้งานนี้สามารถใช้งานได้โดยแอปพลิเคชันอื่นเช่นเดียวกับหน่วยความจำฟรี อย่างไรก็ตามถ้าคุณเปิด Mail ก่อนที่จะใช้หน่วยความจำที่ไม่ใช้งานโดยแอปพลิเคชันอื่น Mail จะเปิดเร็วขึ้นเพราะหน่วยความจำไม่ได้ใช้งานจะถูกแปลงเป็นหน่วยความจำที่ใช้งานแทนการโหลดจดหมายจากฮาร์ดดิสก์ที่ช้าลง
และเป็นไปตามhttp://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html :
รายการที่ไม่ได้ใช้งานมีหน้าต่างๆที่อยู่ในหน่วยความจำกายภาพ แต่ยังไม่ได้รับการเข้าถึงเมื่อเร็ว ๆ นี้ หน้านี้ประกอบด้วยข้อมูลที่ถูกต้อง แต่อาจจะออกจากความทรงจำในเวลาใดก็ได้
ดังนั้นโดยทั่วไป: เมื่อโปรแกรมหยุดทำงานหน่วยความจำจะถูกทำเครื่องหมายเป็นไม่ใช้งานและควรสามารถเรียกร้องได้ตลอดเวลา ถึงกระนั้น OS X จะเริ่มเปลี่ยนหน่วยความจำไปยังไฟล์ Swap แทนการอ้างสิทธิ์หน่วยความจำนี้เมื่อใดก็ตามที่หน่วยความจำ "ฟรี" เหลือน้อย
ทำไม? อะไรคือข้อดีของพฤติกรรมนี้มากกว่าการพูดปล่อยหน่วยความจำที่ไม่ได้ใช้งานทันทีและไม่แม้แต่แตะที่ไฟล์ swap? บางแหล่งที่มา (^ 2.) ระบุว่า OS X จะเลื่อนหน้าหน่วยความจำ "ไม่ใช้งาน" เพื่อสลับก่อนปล่อย แต่ตอนนี้ก็ไม่สมเหตุสมผลถ้าหน่วยความจำอาจถูกปล่อยออกจากหน่วยความจำได้ตลอดเวลา ? การแลกเปลี่ยนมีราคาแพงการปล่อยราคาถูกใช่มั้ย
พฤติกรรมนี้สามารถเปลี่ยนแปลงได้โดยใช้การตั้งค่าบางอย่างหรือแฮ็คที่รู้จัก (ควรเป็นอย่างยิ่งที่ไม่มีการปิดใช้งาน swap / dynamic_pager ทั้งหมดและเริ่มต้นใหม่ ... )
ฉันขอขอบคุณคำสั่งpurgeรวมถึงแนวคิดของการซ่อมแซมการอนุญาตดิสก์เพื่อบังคับให้หน่วยความจำฟรีบางส่วน แต่สิ่งเหล่านี้เป็นวิธีที่จะบังคับให้หน่วยความจำว่างอย่างเจ็บปวดมากขึ้นกว่าที่จะแก้ไขตรรกะการตัดสินใจแลกเปลี่ยน / ปล่อย ...
Btw คำถามที่คล้ายกันถูกถามที่นี่: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/และที่นี่: http: //hintsforums.macworld .com / showthread.php? t = 87688แต่ถึงแม้ว่าOPsจะถามคำถามหลักอีกครั้ง แต่ไม่มีคำตอบใดที่ตอบคำตอบ ...
^ 1 อัปเดต 17 มีนาคม 2555ตั้งแต่ฉันโพสต์คำถามนี้ครั้งแรกฉันได้เพิ่ม RAM จาก 4GB ไปเป็น 8gb ของ RAM ที่ติดตั้งและปัญหายังคงอยู่ จำนวนของ "Inactive" ram คือ 0.5gb-1.0gb มาก่อนและตอนนี้โดยทั่วไปประมาณ 1.0-2.0GB เมื่อการสลับเปลี่ยนเริ่ม / เกิดขึ้น / สิ้นสุดนั่นคือดูเหมือนว่ารอบ ๆ 12.5% -25% ของ ram จะถูกเก็บไว้เป็น Inactive โดย osx ตรรกะของเคอร์เนล
^ 2 ตัวอย่างเช่นhttps://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work-theme วัน :
เมื่อหน่วยความจำทั้งหมดของคุณถูกใช้ (หน่วยความจำที่ว่างคือ 0) ระบบปฏิบัติการจะเขียนหน่วยความจำที่ไม่ได้ใช้งานไปยัง swapfile เพื่อเพิ่มพื้นที่ในหน่วยความจำที่ใช้งาน
อัพเดท 17 มีนาคม 2555
ต่อไปนี้เป็นวิธีการสรุปที่ได้รับการแนะนำให้ช่วย:
ล้างคำสั่ง
"ใช้เพื่อประมาณสภาพการบูตเริ่มต้นด้วยแคชบัฟเฟอร์ของดิสก์เย็นสำหรับการวิเคราะห์ประสิทธิภาพมันไม่ส่งผลกระทบต่อหน่วยความจำที่ไม่ระบุชื่อที่ได้รับการจัดสรรผ่าน malloc, vm_allocate ฯลฯ "
สิ่งนี้มีประโยชน์ในการป้องกันไม่ให้ osx เปลี่ยนดิสก์แคช (ซึ่งไร้สาระที่จริง ๆ แล้ว osx ทำในตอนแรก) แต่ด้วยข้อเสียที่แคชดิสก์ถูกนำออกใช้หมายความว่าถ้าดิสก์แคชนั้นไม่เกี่ยวกับ สลับออกใครจะลงเอยด้วยแคชบัฟเฟอร์ของดิสก์เย็นซึ่งอาจส่งผลกระทบต่อประสิทธิภาพการทำงานในเชิงลบ
แอป FreeMemoryและ / หรือซ่อมสิทธิ์ดิสก์ที่จะบังคับให้หน่วยความจำฟรีบางส่วน
ไม่ช่วยในการปล่อยหน่วยความจำใด ๆ เพียงการย้ายเนื้อหาหน่วยความจำกิกะไบต์บางส่วนจาก ram ไปยัง hd ในท้ายที่สุดสิ่งนี้ทำให้เกิดการสลับจำนวนมากเมื่อฉันพยายามใช้แอปพลิเคชันที่เปิดในขณะที่เพิ่มหน่วยความจำเนื่องจาก vm จำนวนมากของมันกำลังทำการสลับ
เร่งความเร็วการจัดสรร Swap โดยใช้dynamicpagerwrapper
ดูเหมือนจะเป็นสิ่งที่ดีที่ต้องทำเพื่อเพิ่มความเร็วในการใช้งาน swap แต่ไม่ได้แก้ไขปัญหาของการแลกเปลี่ยน osx ในตอนแรกขณะที่ยังมีหน่วยความจำที่ไม่ได้ใช้งานอยู่
ปิดใช้งานการสลับโดยปิดการใช้งานdynamicpagerและเริ่มต้นใหม่
วิธีนี้จะบังคับให้ osx ไม่ใช้ swap กับราคาของระบบค้างเมื่อใช้หน่วยความจำทั้งหมด ไม่ใช่ทางเลือกที่ทำงานได้ ...
ปิดใช้งานการสลับโดยใช้Dynamicpager ที่ถูกแฮ็ก
คล้ายกับการปิดใช้งาน dynamicpager ด้านบนข้อความที่ตัดตอนมาบางส่วนจากความคิดเห็นไปยังโพสต์บล็อกระบุว่านี่ไม่ใช่วิธีแก้ปัญหาที่ใช้งานได้: "หน่วยความจำไม่ได้ใช้งานสูงเท่าปกติ" "เมื่อระบบของคุณมีหน่วยความจำไม่เพียงพอ OS ทั้งหมดจะหยุดทำงาน ... ", "หากคุณใช้หน่วยความจำทั้งหมดในเครื่อง mac เครื่องอาจจะค้าง"
สรุปแล้วฉันยังไม่รู้วิธีปิดการใช้งาน Mac OS X จากการใช้ swap เมื่อยังมีหน่วยความจำ "Inactive" ถ้ามันเป็นไปไม่ได้อย่างน้อยก็อาจมีคำอธิบายว่าทำไม OSX ถึงชอบเปลี่ยนหน่วยความจำที่สามารถปล่อยจากหน่วยความจำได้ตลอดเวลา ?