โซลูชัน จำกัด หน่วยความจำสำหรับแอปพลิเคชันที่อาจทำให้ระบบปฏิบัติการผิดพลาด?


32

ฉันใช้คอมพิวเตอร์เพื่อการเขียนโปรแกรมทางวิทยาศาสตร์ มันมีสุขภาพที่ดี8GBของ RAM และ12GBพื้นที่สว็อป บ่อยครั้งที่ปัญหาของฉันมีขนาดใหญ่ขึ้นฉันก็เกิน RAM ที่มีอยู่ทั้งหมด แทนที่จะล้มเหลว (ซึ่งเป็นที่ต้องการ) ดูเหมือนว่า Ubuntu จะเริ่มโหลดทุกอย่างลงใน swap รวมถึง Unity และเทอร์มินัลเปิดใด ๆ หากฉันไม่ทันเวลาโปรแกรมวิ่งหนีไม่มีอะไรที่ฉันสามารถทำได้ แต่รอ - ใช้เวลา 4-5 นาทีในการสลับไปยังพรอมต์คำสั่งเช่น Ctrl-Alt-F2ที่ฉันสามารถฆ่ากระบวนการที่กระทำผิด

เนื่องจากความโง่ของตัวเองอยู่นอกขอบเขตของฟอรัมนี้ฉันจะป้องกันอูบุนตูไม่ให้ทำงานล้มเหลวได้อย่างไรเมื่อฉันใช้หน่วยความจำที่เหลืออยู่ทั้งหมดจากโปรแกรมที่ละเมิด

การทดลองที่บ้าน *!

เปิดเทอร์มินัลเปิดใช้งานpythonและหากคุณnumpyติดตั้งแล้วลองทำสิ่งนี้:

>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]

* คำเตือน: อาจมีผลข้างเคียงตรวจสอบกระบวนการทางiotopหรือtopเพื่อฆ่ามันในเวลา ถ้าไม่ฉันจะเห็นคุณหลังจากรีบูต

คำตอบ:


21

เชลล์ในตัวulimitช่วยให้คุณสามารถ จำกัด ทรัพยากรได้ สำหรับกรณีของคุณกับการใช้หน่วยความจำขีด จำกัด ในเปลือก (และเด็ก), ulimit -vการใช้งาน

การสาธิตการตั้งค่า จำกัด หน่วยความจำ 100 MB (100000 KB):

$ ulimit -v
unlimited
$ python -c '[ "x" * 100000000 ]'
$ ulimit -v 100000
$ python -c '[ "x" * 100000000 ]'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
MemoryError

พบps uww -C script-name-hereว่าการใช้python นั้นต้องการหน่วยความจำอย่างน้อย 29MB (คอลัมน์ VSZ) ขีด จำกัด RSS จะเพิ่มขึ้นเมื่อสคริปต์ของคุณต้องการหน่วยความจำมากขึ้นดังนั้นปรับคอลัมน์นั้น


1
น่าเสียดายที่เราไม่รู้ว่าแอพพลิเคชั่นที่แท้จริงนั้นเป็นอย่างไร ulimit ที่แสดงให้เห็นถึงผลกระทบต่อกระบวนการทั้งหมดที่เป็นลูกของเปลือกนั้น เราไม่รู้ด้วยซ้ำว่ามันทำงานเป็นดีมอนหรือมีเด็กมากมายที่จะทำให้สิ่งต่าง ๆ ซับซ้อนขึ้น ดูcoldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/ …
ppetraki

1
มีไม่มีใช้ง่าย front-endสำหรับ ulimit และcgroups ? ใน Windows เมื่อระบบปฏิบัติการใกล้เคียงกับ RAM หมดป๊อปอัปเตือนได้เปิดใช้งานฉันเสมอเพื่อหลีกเลี่ยงการค้างระบบ ใน Ubuntu ฉันต้องจับตาดูการใช้หน่วยความจำตลอดเวลาหรือไม่?
Dan Dascalescu

1
@DanDascalescu หากคุณมีไฟล์ swap การกำหนดค่าแล้วคุณจะประสบความล่าช้าอีกต่อไป แต่ก็ยังสามารถทำงานได้ เมื่อคุณสังเกตเห็นว่าการแลกเปลี่ยนเริ่มขึ้นคุณสามารถตรวจสอบการตรวจสอบระบบเพื่อดูการใช้ RAM หากระบบของคุณมีหน่วยความจำไม่เพียงพอนักฆ่า out-of-memory (OOM) จะถูกเรียกใช้ซึ่งฆ่ากระบวนการที่มีคะแนน "เลว" สูงสุด (โดยปกติจะเป็นกระบวนการที่ใช้หน่วยความจำส่วนใหญ่)
Lekensteyn

12

กลุ่มต่างๆควรอนุญาตให้คุณ จำกัด การใช้หน่วยความจำของคุณตามกระบวนการ

https://en.wikipedia.org/wiki/Cgroups

http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt

การคำนวณทางวิทยาศาสตร์นั้นมีหน่วยความจำอย่างมากโดยแซนด์บ็อกซ์แอพของคุณใน cgroup กระบวนการที่เหลือไม่ควรตกเป็นเหยื่อเนื่องจากความกดดันของหน่วยความจำจะลดลง

หรืออีกวิธีหนึ่ง VM สามารถใช้เป็นขีด จำกัด แบบยากเนื่องจากแอปสามารถใช้หน่วยความจำที่มอบหมายให้กับเครื่องเสมือนเท่านั้นโดยมีค่าใช้จ่ายในการทำงานแน่นอน อย่างไรก็ตาม VM นั้นง่ายกว่ามากในการกำหนดค่าสำหรับผู้ที่ไม่ได้ฝึกหัดเมื่อเปรียบเทียบกับการตั้งค่าและการบำรุงรักษา cgroup

การตัดสินใจตัดสินใจ :) โชคดี!


1
ไม่มีส่วนหน้าที่ใช้งานง่ายสำหรับ ulimit และ cgroups หรือไม่? ใน Windows เมื่อระบบปฏิบัติการใกล้เคียงกับ RAM หมดป๊อปอัปเตือนได้เปิดใช้งานฉันเสมอเพื่อหลีกเลี่ยงการค้างระบบ ใน Ubuntu ฉันต้องจับตาดูการใช้หน่วยความจำตลอดเวลาหรือไม่?
Dan Dascalescu

Nope อีกทั้งระบบปฏิบัติการของคุณก็ไม่ควรค้างด้วยเช่นกันนั่นเป็นปัญหาแยกต่างหาก หน้าต่างที่ปรากฏขึ้นเป็นเพียง bandaid ที่เริ่มต้นด้วย หากคุณใช้หน่วยความจำมากมายบางทีคุณควรตรวจสอบทำไม ตัวอย่างเช่นเบราว์เซอร์สมัยใหม่ที่มี sanboxing สามารถใช้ 70-150M ต่อแท็บได้อย่างง่ายดาย การปิดหรือปรับจูนนั้นสามารถเพิ่มหน่วยความจำได้อย่างมากที่ใช้เป็นประจำโดยผู้ใช้ ตัวกำหนดเวลาควรจะสลับโปรแกรมที่ไม่ค่อยได้ใช้เพื่อประหยัดพื้นที่ แต่ถ้าพวกเขาตื่นขึ้นมามากกว่าที่คุณควรจะแก้ไขพวกเขาหรือถ้างานหลักของคุณคือหน่วยความจำมาก (เว็บ) หน่วยความจำที่ต้องการมากขึ้น
ppetraki

8
ฉันรู้ว่าหน่วยความจำนั้นใช้อะไรบ้าง - Chrome แต่ระบบปฏิบัติการควรปกป้องความเสถียรของแอพพลิเคชั่นที่ทำงานอยู่ตลอดเวลา
Dan Dascalescu

1
ฉันเข้าใจว่าคุณมาจากไหนในฐานะผู้ใช้ สิ่งที่คุณขอหมายถึงการเปลี่ยนแพลตฟอร์มการคำนวณทั่วไปให้เป็นอุปกรณ์ ในขณะที่วิธีการที่ซับซ้อนน้อยที่สุด (เกิดความผิดพลาดได้ง่าย) วิศวกรระบบปฏิบัติการจะต้องดำเนินการเพื่อให้การป้องกันเหล่านั้นคือการตัดสินใจที่ให้ความเห็นอย่างมากเกี่ยวกับวิธีการเรียกใช้คอมพิวเตอร์ทั้งหมด ที่มักจะมาค่าใช้จ่ายของความยืดหยุ่นของผู้ใช้ คุณเห็นตัวอย่างของสิ่งนี้ในการคำนวณแท็บเล็ต ในเดสก์ท็อปอย่างไรก็ตามความยืดหยุ่นจะถูกรักษาไว้
ppetraki
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.