มีการใช้วงเงิน limit.conf แบบต่อกระบวนการหรือไม่


25

ผมปรับnofileค่าใน/etc/security/limits.confสำหรับผู้ใช้ oracle ของฉันและฉันมีคำถามเกี่ยวกับพฤติกรรมของมัน: ไม่nofileจำกัด จำนวนไฟล์ที่ผู้ใช้สามารถมีเปิดให้บริการสำหรับทุกกระบวนการของมันหรือไม่ก็ จำกัด จำนวนไฟล์ที่ผู้ใช้สามารถมี เปิดสำหรับแต่ละกระบวนการหรือไม่

โดยเฉพาะสำหรับการใช้งานดังต่อไปนี้:

oracle                  hard    nofile                  65536

คำตอบ:


23

ค่าส่วนใหญ่limits.confเป็นข้อ จำกัด ที่สามารถตั้งค่าได้ด้วยulimitคำสั่งเชลล์หรือการsetrlimitเรียกของระบบ พวกเขาเป็นคุณสมบัติของกระบวนการ ขีด จำกัด ใช้อย่างเป็นอิสระสำหรับแต่ละกระบวนการ โดยเฉพาะอย่างยิ่งแต่ละกระบวนการสามารถมีได้ถึงnofileไฟล์ที่เปิด ไม่มีการ จำกัด จำนวนไฟล์ที่เปิดที่รวบรวมโดยกระบวนการของผู้ใช้

nprocจำกัด เป็นบิตของการเป็นกรณีพิเศษในการที่จะไม่รวมกระบวนการทั้งหมดของผู้ใช้ อย่างไรก็ตามกระบวนการดังกล่าวยังคงใช้งานต่อกระบวนการ: เมื่อกระบวนการเรียกforkเพื่อสร้างกระบวนการใหม่การโทรจะถูกปฏิเสธหากจำนวนกระบวนการที่เป็นของกระบวนการ euid นั้นจะใหญ่กว่าRLIMIT_NPROCค่าของกระบวนการ

limits.confหน้าคนอธิบายว่าข้อ จำกัด นำไปใช้กับเซสชั่น ซึ่งหมายความว่ากระบวนการทั้งหมดในเซสชั่นทั้งหมดจะมีข้อ จำกัด เดียวกัน (ยกเว้นเปลี่ยนโดยหนึ่งในกระบวนการเหล่านี้) ไม่ได้หมายความว่าผลรวมใด ๆ ที่ทำกับกระบวนการในเซสชัน (นั่นไม่ใช่สิ่งที่ระบบปฏิบัติการติดตาม - มีความคิดเกี่ยวกับเซสชัน แต่มีความละเอียดยิ่งกว่านั้นตัวอย่างเช่นแอปพลิเคชัน X11 แต่ละคนมีแนวโน้มที่จะจบ ขึ้นในเซสชั่นของตัวเอง) วิธีการทำงานคือกระบวนการล็อกอินกำหนดขีด จำกัด บางอย่างและสืบทอดโดยกระบวนการลูกทั้งหมด

¹ ยกเว้นmaxlogins, maxsysloginsและchrootซึ่งถูกนำมาใช้เป็นส่วนหนึ่งของกระบวนการเข้าสู่ระบบที่จะปฏิเสธหรือเข้าสู่ระบบอิทธิพล


ตรงกันข้ามหมายความว่าเซสชันที่ต่างกันสามารถมีชุดของข้อ จำกัด ที่แตกต่างกันได้หรือไม่?
CMCDragonkai

1
@CMCDragonkai ใช่เช่นถ้าlimit.confมีการเปลี่ยนแปลงระหว่างการประชุมครั้งที่ถูกเปิดหรือถ้าข้อ จำกัด ที่แตกต่างกัน (พวกเขาจะต้องมีขนาดเล็กยกเว้นราก) .profileที่ตั้งอยู่ใน
Gilles 'หยุดความชั่วร้าย' ใน

1
@laimison หากคุณวนซ้ำกระบวนการที่กำลังดำเนินอยู่ทั้งหมดและทำงานprlimit --pid $pidในแต่ละกระบวนการคุณสามารถเปลี่ยนขีด จำกัด สำหรับเซสชันที่ใช้งานอยู่ได้อย่างมีประสิทธิภาพ โปรดทราบว่าคุณอาจต้องทำสองสามครั้งในกรณีที่กระบวนการบางอย่างแยกกันในขณะที่คุณกำลังวนซ้ำ
Gilles 'หยุดความชั่วร้าย' Gilles

1
@ อ้างสิทธิ์หมายเลขสมมติว่าผู้ใช้มีเพียงสองโพรเซส A และ B โดยRLIMIT_NPROCตั้งค่าเป็น 2 ใน A และ 3 ใน B จากนั้น B สามารถแยกอีกหนึ่งโพรเซส แต่ A ไม่สามารถ
Gilles 'หยุดความชั่วร้าย' ใน

1
@laimison หากคุณตั้งค่าขีด จำกัด เป็น 2 ในพาเรนต์ของ B และไม่เปลี่ยนเป็น B หลังจากฟอร์กแล้วขีด จำกัด ของ B จะเป็น 2 หากคุณตั้งค่า จำกัด เป็น 2 ในพาเรนต์ของ B แต่คุณเพิ่มขีด จำกัด เป็น B หรือ คุณตั้งค่าขีด จำกัด เป็น 3 ในพาเรนต์ของ B ก่อนฟอร์กกิ้ง B และตั้งค่าเป็น 2 หลังจากฟอร์ก B, B จะมีการตั้งค่าขีด จำกัด เป็น 3 ข้อ จำกัด เดียวที่สำคัญคือในกระบวนการที่เรียก fork () ไม่ใช่ขีด จำกัด ในกระบวนการของผู้ปกครองหรือในกระบวนการอื่น ๆ
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.