ใน Mac OS X Yosemite 10.10.5 เมื่อฉันพยายามเรียกใช้การคำนวณที่จำเป็นต้องจัดสรรและใช้หน่วยความจำ 128 GB (เป็นโปรแกรมบรรทัดคำสั่งที่เขียนด้วย C) เคอร์เนลจะฆ่ากระบวนการของฉันด้วยอคติอย่างรุนแรง รายการบันทึกคอนโซลนี้เป็นตัวอย่างหนึ่งอินสแตนซ์:
9/25/15 7: 08: 40.000 PM เคอร์เนล [0]: การแลกเปลี่ยนต่ำ: ฆ่า pid 6202 (huffgrp)
การคำนวณใช้งานได้ดีและใช้เวลาพอสมควรเมื่อจัดสรรและใช้หน่วยความจำ 64 GB Mac ของฉันมี RAM ขนาด 32 GB และพื้นที่ว่างบนฮาร์ดไดรฟ์ ฉันยังลองใช้มันใน Mac เครื่องอื่นที่มี RAM ขนาด 8 GB ซึ่งการคำนวณ 64 GB ก็ทำงานได้ดีเช่นกันใช้เวลานานขึ้น แต่การคำนวณ 128 GB ก็ถูกฆ่าโดยเคอร์เนลด้วยวิธีเดียวกัน
โดยวิธีการที่malloc()
ไม่เคยส่งกลับข้อผิดพลาดไม่ว่าฉันจะขอพื้นที่เท่าใด เคอร์เนลจะฆ่ากระบวนการเมื่อหน่วยความจำนั้นมีการใช้งานมากเกินไปจริง ๆ ซึ่งส่งผลให้มีการแลกเปลี่ยนกับฮาร์ดไดรฟ์จำนวนมาก
ดังนั้นจึงมีข้อ จำกัด เกี่ยวกับพื้นที่สลับอย่างลับอยู่ระหว่าง 64 GB และ 128 GB
คำถามของฉันคือฉันจะกำหนดค่าเคอร์เนลใหม่เพื่อให้มีพื้นที่สว็อปได้มากขึ้นได้อย่างไร ฉันพบไฟล์ที่ดูดี/System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
แต่ฉันไม่เห็นหมายเลขลับในนั้น หน้า man สำหรับdynamic_pager
บอกว่ามันทำทั้งหมดคือการตั้งชื่อและที่ตั้งของไฟล์สลับ มี man page รุ่นเก่ากว่าที่มีเอกสาร-S
ตัวเลือกในการกำหนดขนาดของ swapfiles ที่สร้างขึ้น ฉันลองที่ขอ swapfiles 160 GB แต่ก็ไม่มีผล swapfiles ยังคงมีขนาด 1 GB และกระบวนการก็ยังถูกฆ่าโดยเคอร์เนล
malloc
มากกว่าที่คุณมีก็เพราะว่า commit_limit นั้นสูงมาก (อาจไม่มีที่สิ้นสุด) ดังนั้นระบบปฏิบัติการจะจัดสรรหน่วยความจำที่ไม่มี (เป็นการเดิมพันที่กระบวนการจะไม่ใช้ระบบปฏิบัติการมักจะชนะการเดิมพันนี้) คุณอาจต้องการปรับขีด จำกัด การส่งมอบให้เป็นขีด จำกัด หน่วยความจำด้วยวิธีนี้กระบวนการจะล้มเหลวก่อน
malloc()
เช่นนั้น malloc()
ฉันถูกหันเหความคิดเห็นเป็นไปได้ในความคิดของคนที่ฉันไม่ได้ตรวจสอบค่าตอบแทนของ โดยวัตถุประสงค์ของฉันคือไม่ให้ล้มเหลวก่อนหน้านี้ เป้าหมายของฉันคือการประสบความสำเร็จ