มีวิธีใดที่จะให้ OSX ใช้ RAM มากขึ้นและแลกเปลี่ยนน้อยลง?


12

ปัญหาที่ฉันมีอยู่บนเซิร์ฟเวอร์ (และกล่อง OSX อื่น ๆ เช่นกัน) เรามี RAM 4GB แต่เราพบว่า OSX ใช้ 40-60% ของ RAM ที่มีอยู่เท่านั้นในขณะที่มีการแลกเปลี่ยน 6-7GB เซิร์ฟเวอร์กำลังเรียกใช้ Apache และ MySQL ในขณะที่เครื่องอื่นเป็นเดสก์ท็อป

ฉันได้เปรียบเทียบการใช้งานกับกล่อง Linux ที่คล้ายกัน (ฮาร์ดแวร์และซอฟต์แวร์) และพบว่า Linux มักใช้ RAM 80-90% และมีไฟล์ swap ขนาดเล็กกว่า (2-3GB) เซิร์ฟเวอร์ Linux มักจะทำงานได้เร็วขึ้นมาก

มีวิธีบังคับ OSX ให้ใช้ RAM มากขึ้นหรือมากที่สุดก่อนที่จะใช้ไฟล์สลับดิสก์หรือไม่?

ใน Windows คุณสามารถปิดการแลกเปลี่ยนได้จริง มีบางอย่างที่คล้ายกันสำหรับ OSX หรือไม่?


สำหรับการชี้แจง: 1. คอขวดของระบบ VM คืออะไร? เช่นเดียวกับเมื่อคุณเห็นดาวหน่วยความจำมีจำนวนมากถ้าเกิดขึ้นหน้าเว็บ 2. คุณรับข้อมูลขนาดฟรีและ VM ของคุณอยู่ที่ไหน ตัวอย่างเช่นขนาด VM ที่ระบุไว้ในการตรวจสอบกิจกรรมจะไม่เหมือนกับขนาดของไฟล์สลับ
Chealion

ฉันไม่ได้พิสูจน์ว่าระบบ VM (VM หรือ swap) เป็นปัญหา แต่ฉันรู้บนเดสก์ท็อปของฉันฉันมี RAM 6GB ซึ่งโดยปกติ 2-3GB มักจะฟรี เมื่อฉันเปลี่ยนโปรแกรมคุณจะคิดว่ามันจะเร็วอย่างเห็นได้ชัดเพราะมันอยู่ใน RAM แต่ใช้เวลา 2-15 วินาทีในการเปลี่ยนกลับไปเป็น Illustrator ฉันคิดว่าสิ่งที่คล้ายกันเกิดขึ้นบนเซิร์ฟเวอร์ - เช่นแคชสำหรับ MySQL หรือตารางชั่วคราว ฉันใช้ด้านบนเพื่อพิจารณาการใช้ VM, RAM และ swap ความคิดใด ๆ
Darryl Hein

3
เพื่อตรวจสอบการใช้งาน vm จริงที่ง่ายที่สุดคือการเรียกใช้du -sh /var/vm- ที่กล่าวว่ามันอาจจะสูงเกินจริงถ้ามี sleepimage (ส่วนใหญ่มักจะเห็นในแล็ปท็อป) ปัจจุบัน มีเครื่องมือหลายอย่างที่สามารถช่วยคุณตรวจสอบว่าเป็นหน่วยความจำที่ทำให้เกิดการอัพช้าหรือไม่: vm_stat- โดยเฉพาะอย่างยิ่งคุณสนใจค่า pageouts - ถ้ามันเพิ่มขึ้นเล็กน้อยคุณจะรู้ว่าคุณสลับสับเปลี่ยนอย่างหนัก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Apple จัดการกับหน่วยความจำของพวกเขา: developer.apple.com/documentation/Performance/Conceptual/…
Chealion

คำตอบ:


17

คำตอบพื้นฐานที่สุด? ไม่ระบบปฏิบัติการจัดการการจัดการหน่วยความจำสำหรับผู้ใช้ - ให้กระบวนการมากที่สุดเท่าที่หน่วยความจำต้องการตามที่ร้องขอและไม่ได้ให้ทั้งจำนวนมากในแง่ของความสามารถในการปรับเปลี่ยนวิธีการทำงานของระบบ มันไม่ได้ช่วยอะไรมากมายกับการพยายามคิดออกว่าการใช้หน่วยความจำเป็นส่วนหนึ่งของสมการหรือไม่ว่าทำไมเซิร์ฟเวอร์ Linux ถึงมีประสิทธิภาพสูงกว่าเซิร์ฟเวอร์ Mac

เนื่องจากไม่มี "ความสามารถในการแฮ็ก" ในระบบหน่วยความจำเสมือนตัวเลือกที่ดีที่สุดของคุณคือการประเมินประสิทธิภาพของหน่วยความจำเสมือนเพื่อดูว่าเป็นสาเหตุของปัญหาด้านประสิทธิภาพหรือไม่ - พื้นฐานที่สุดคือการใช้vm_statหรือใช้งาน ใช้งานจริงโดยใช้vm_stat [number of seconds]เพื่อดูว่ามีหน้ากระดาษเกิดขึ้นกี่หน้า การย้ายเพจที่ไม่ได้ใช้จาก RAM ไปยังฮาร์ดไดรฟ์มีค่าใช้จ่ายต่ำกว่าการดึงหน้ากลับจากฮาร์ดไดรฟ์ไปยัง RAM ของคุณ หน้าในเงื่อนไข OS X หมายถึงข้อมูลขนาด 4kb

นอกจากนี้กระบวนการแบบ 32 บิต (เช่น Illustrator) ไม่สามารถเข้าถึงมากกว่า 4GB ดังนั้นในทางทฤษฎีอาจเป็นไปได้ที่จะมี 2GB ฟรีและมีกระบวนการหน่วยความจำหมดหากคุณติดตั้ง 6GB

บนเดสก์ท็อปของคุณและเซิร์ฟเวอร์ฉันจะเรียกใช้vm_stat 2และตรวจสอบคอลัมน์สุดท้าย - โดยเฉพาะอย่างยิ่งเมื่อคุณประสบกับความล่าช้าหลายวินาทีเมื่อเปลี่ยนไปใช้ Illustrator

du -shc /var/vm/swap* | tail -n 1เพื่อหาวิธีการที่มีขนาดใหญ่สลับเป็นจริงคุณสามารถตรวจสอบขนาดของการแลกเปลี่ยนในกิจกรรมการตรวจสอบหรือการทำงาน

การใช้du -sh /var/vmมีหนึ่งข้อแม้: สำหรับแล็ปท็อปที่มีโหมดไฮเบอร์เนต (ทุกอย่างในช่วง 4 ปีที่ผ่านมาหรือใหม่กว่า) อาจมีsleepimageขนาดของหน่วยความจำที่คุณติดตั้งไว้คร่าวๆ


Mac OS X หน่วยความจำศัพท์แสง:

สาย : สิ่งนี้อ้างถึงรหัสเคอร์เนลและเช่น หน่วยความจำที่ไม่ควรย้ายออกจาก RAM ยังรู้ว่าเป็นหน่วยความจำถิ่น

แชร์ : หน่วยความจำที่ใช้ร่วมกันระหว่างสองกระบวนการขึ้นไป กระบวนการทั้งสองจะแสดงจำนวนหน่วยความจำนี้ดังนั้นจึงอาจทำให้เข้าใจผิดเล็กน้อยว่ามีการใช้งานหน่วยความจำเท่าใด

จริง : นี่คือการใช้หน่วยความจำ "ของจริง" สำหรับแอปพลิเคชันที่รายงานโดย task_info () - จำนวนคร่าวๆของจำนวนหน้าฟิสิคัลที่กระบวนการปัจจุบันมี (rsize)

ส่วนตัว : นี่คือหน่วยความจำที่กระบวนการใช้เพียงอย่างเดียวในกระบวนการของตัวเองที่ใช้ในหน่วยความจำ Resident (RPRVT)

เสมือน : จำนวนพื้นที่ที่อยู่ทั้งหมดในกระบวนการที่แมปกับสิ่งใด - ไม่ว่าจะเป็นพื้นที่ขนาดใหญ่โดยพลการสำหรับตัวแปรหรืออะไรก็ตาม - มันไม่เท่ากับการใช้ VM จริง (VSIZE)

ใช้งานอยู่ : หน่วยความจำในปัจจุบันระบุว่าเป็นใช้งานอยู่และใช้ RAM

ไม่ได้ใช้งาน : "หน่วยความจำไม่ได้ใช้งานไม่ได้ถูกใช้งานอีกต่อไปและถูกแคชไว้ในดิสก์มันจะยังคงอยู่ใน RAM จนกว่าแอปพลิเคชันอื่นจะต้องการพื้นที่การทิ้งข้อมูลนี้ไว้ใน RAM จะเป็นประโยชน์ต่อคุณ เพื่อมันภายหลัง " - วิธีใช้ Mac OS X

ฟรี : จำนวน RAM ที่ใช้งานได้จริงโดยไม่มีข้อมูลใด ๆ


เอกสารที่ดีที่สุดที่ฉันรู้ (และสามารถค้นพบในการวิจัยติดตามผล) คือบทความMemory Management ของ Apple ในเว็บไซต์นักพัฒนาซอฟต์แวร์ของพวกเขา

แหล่งข้อมูลที่คุ้มค่าอื่น ๆ : รายการส่งเมลของดาร์วิน: [ 1 ], [ 2 ] และบทความเก่าบนMacOSX คำแนะนำ นอกจากนี้ Mike Ash ได้โพสต์แนะนำคนธรรมดาที่ดีในบล็อกของเขา


อาจเป็นไปได้ (ฉันไม่ได้ลอง) เพื่อปิดการใช้งานระบบหน่วยความจำเสมือนโดยการเรียกใช้sudo launchctl unload /System/Library/LaunchDaemons/com.apple.dynamic_pager.plistแล้วเริ่มต้นใหม่เพื่อให้ dynamic_pager (โปรแกรมที่จัดสรรหน่วยความจำเสมือนจริง) ไม่เริ่มทำงาน อย่างไรก็ตามเนื่องจากระบบปฏิบัติการสันนิษฐานว่ามีหน่วยความจำเสมือนคุณอาจพบว่าตัวเองกำลังประสบปัญหาอย่างรวดเร็วมาก ในการโหลดการสำรองข้อมูลเรียกใช้sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist(หากจำเป็นจากโหมดผู้ใช้คนเดียว)

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