มีสองวิธีในการ จำกัด การใช้หน่วยความจำของคุณ: โพสต์โดยพฤตินัยและยึดเอาเสียก่อน กล่าวคือคุณสามารถลองฆ่าโปรแกรมหลังจากที่มันมีขนาดใหญ่เกินไปหรือคุณไม่สามารถโปรแกรมได้ว่าจะไม่ใหญ่เกินไปในตอนแรก
หากคุณยืนยันในแนวทางการโพสต์ในอดีตคุณสามารถใช้สคริปต์ Bash ต่อไปนี้ สคริปต์นี้จะค้นหาจำนวนหน่วยความจำ (ตามที่กำหนดโดย "ขนาดชุดที่อยู่อาศัย") ขั้นตอนที่ใช้กับ processid pid กรองข้อมูลที่ไม่ใช่ตัวเลขทั้งหมดโดยใช้ grep และบันทึกจำนวนเป็นตัวแปร n สคริปต์จะตรวจสอบว่า n มากกว่า x ที่คุณระบุหรือไม่ หากเป็นเช่นนั้นกระบวนการที่มี processid pid จะถูกฆ่า
โปรดทราบ:
- คุณต้องแทนที่
<pid>
ด้วยรหัสกระบวนการของโปรแกรมของคุณ
- คุณต้องแทนที่
<x>
ด้วย rss = "ขนาดชุดที่อยู่อาศัย" (เช่นขนาดหน่วยความจำจริง) ที่คุณไม่ต้องการให้โปรแกรมเกินขนาด
n=$(ps -<pid> -o rss | grep '[0-9]')
if [ $n -gt <x> ]; then kill -9 <pid>; fi
หากคุณต้องการให้สิ่งนี้ทำงานทุก ๆ y วินาทีให้ปิดไว้ในลูปและบอกให้รอ y วินาทีหลังจากการวนซ้ำทุกครั้ง top
นอกจากนี้คุณยังสามารถเขียนคำสั่งที่คล้ายกันโดยใช้ จุดเริ่มต้นของคุณtop -l 1|grep "<pid>"|awk '{print $10}'
คือ
คำตอบของ @ kenorb ช่วยฉันด้วยสคริปต์ของฉัน
ในขณะที่ฉันเชื่อว่าตอบคำถามในระยะยาวฉันเชื่อว่ามันเป็นการออกแบบโปรแกรมที่ดีกว่าเพื่อใช้วิธีการจองล่วงหน้าโดยใช้การจัดสรรหน่วยความจำด้วยตนเอง
ประการแรกคุณแน่ใจหรือว่าการใช้หน่วยความจำนั้นเป็นปัญหาจริงๆ สถานะเอกสารประกอบของ Go :
ตัวจัดสรรหน่วยความจำตัว Go จะสงวนพื้นที่ส่วนใหญ่ของหน่วยความจำเสมือนไว้เป็นเวทีสำหรับการจัดสรร หน่วยความจำเสมือนนี้เป็นของท้องถิ่นสำหรับกระบวนการ Go ที่เฉพาะเจาะจง การจองไม่ได้กีดกันกระบวนการความจำอื่น ๆ
หากคุณยังคิดว่าคุณมีปัญหาฉันขอแนะนำให้คุณจัดการหน่วยความจำของคุณด้วยตนเองตามที่เขียนไว้ในภาษา C เนื่องจาก go ถูกเขียนใน C ฉันสงสัยว่าจะมีวิธีในการจัดการหน่วยความจำ / การจัดสรร C และมีแน่นอน ดูที่เก็บgithubนี้ซึ่ง
ช่วยให้คุณจัดการหน่วยความจำด้วยตนเองผ่านตัวจัดสรร C มาตรฐานสำหรับระบบของคุณ มันเป็นเสื้อคลุมบาง ๆ ด้านบนของ malloc, calloc และเป็นอิสระจาก ดู man malloc สำหรับรายละเอียดเกี่ยวกับฟังก์ชั่นเหล่านี้สำหรับระบบของคุณ ไลบรารีนี้ใช้ cgo
กรณีการใช้งานจะได้รับเป็น:
ทำไมคุณต้องการสิ่งนี้
เมื่อโปรแกรมก่อให้เกิดแรงกดดันหน่วยความจำหรือระบบมีหน่วยความจำไม่เพียงพอจะเป็นประโยชน์ในการควบคุมการจัดสรรหน่วยความจำและการจัดสรรคืนด้วยตนเอง Go สามารถช่วยให้คุณควบคุมการจัดสรร แต่ไม่สามารถยกเลิกการจัดสรรข้อมูลที่ไม่ต้องการได้อย่างชัดเจน
ดูเหมือนว่าจะเป็นทางออกระยะยาวที่ดีกว่า
หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ C (รวมถึงการจัดการหน่วยความจำ)
ภาษา C การเขียนโปรแกรมเป็นการอ้างอิงมาตรฐาน