เพิ่ม ulimit บน CentOS


18

เรามีกล่อง CentOS ที่ฉันพยายามเพิ่มจำนวนไฟล์สูงสุดที่ผู้ใช้สามารถเปิดได้ ขณะนี้เมื่อฉันเรียกulimit -Snฉันได้รับ1024และจะช่วยให้ulimit -Hn 4096ฉันต้องการตัวเลขนั้นประมาณ 6,000

ในฉันชุดได้/etc/sysctl.conf fs.file-max = 100000ใน/etc/security/limits.confฉันมีชุดต่อไปนี้:

username soft nofile 6000
username hard nofile 65535

ฉันออกจากระบบและลงชื่อเข้าใช้ใหม่usernameแต่ยังไม่เห็นการเปลี่ยนแปลงของฉัน ฉันต้องเปลี่ยนอะไรเพื่อให้ได้ค่านี้

ทั้งหมดที่ฉันมีในมี/etc/security/limits.d 90-nproc.confฉันยังมั่นใจว่า ulimit จะไม่ถูกเรียกใน. bash_profile หรือ. bashrc ของฉัน

เมื่อฉันเรียกใช้sysctl -pมันคายการตั้งค่าที่ฉันต้องการและมันแสดงค่าสำหรับfs.file-maxสิ่งที่ฉันต้องการ แต่เมื่อฉันเรียกulimit -Snฉันได้รับ 1048. ถ้าฉันพยายามที่จะเรียกฉันได้รับsysctl --systemerror: Unknown parameter "--system"


คุณพยายามรีบูตหรือไม่ เท่าที่ฉันรู้การตั้งค่าเหล่านั้นจะถูกอ่านในระหว่างการบูตระบบ
Kamil

คุณไม่จำเป็นต้องรีบูตเครื่องสำหรับสิ่งนั้น
Xavier Lucas

คำตอบ:


14

ที่จะบังคับให้อ่านทำงานอีกครั้ง/etc/sysctl.confsysctl -p

ไฟล์/etc/security/limits.confอ่านโดยเชลล์ล็อกอินและคุณควรปิดหน้าต่างเซสชันที่ใช้งานอยู่หากอยู่ใน GUI สำหรับการล็อกอินจากระยะไกลจะมีผลกับ relog


1
วิ่งที่ยังคงไม่เห็นการเปลี่ยนแปลงหลังจาก relog
tubaguy50035

@ tubaguy50035 fs.file-maxเป็นจำนวนไฟล์สูงสุดที่เปิดได้ในระบบ มันเป็นขีด จำกัด ที่ยากและมันจะไม่ถูกสะท้อนจากการulimitโทรในกรณีของคุณ
Xavier Lucas

ตกลง. ฉันจะไม่เปิดไฟล์ที่เปิดมากเกินไปอีกต่อไปหรือไม่?
tubaguy50035

@ tubaguy50035 ไม่เกี่ยวข้อง มันเป็นขีด จำกัด ของระบบอย่างหนักที่จะแทนที่ตัวเลขใด ๆ ข้างต้นใน limit.conf แต่ limit.conf ยังคงใช้งานอยู่ คุณลองตั้งค่าขีด จำกัด แบบแข็งและอ่อนด้วย ulimit โดยตรงในเซสชันใหม่และดูว่าคุณได้รับค่าสูงสุดเท่ากันหรือไม่ มีบางอย่างที่จะแทนที่การกำหนดค่าของคุณ
Xavier Lucas

มันบอกว่าไม่อนุญาตให้ใช้งาน ฉันจำเป็นต้องให้สิทธิ์ผู้ใช้ในการเข้าถึงบางสิ่งหรือไม่ ฉันต้องการให้ผู้ใช้เว็บไม่มีสิทธิ์รูท
tubaguy50035

6

ดังที่ผู้โพสต์คนอื่นได้กล่าวไว้คุณจะต้องตั้งค่า sysctl ในเคอร์เนลที่กำลังรันอยู่ มีหลายวิธีที่คุณสามารถตั้งค่าโดยไม่ต้องรีบูตเครื่อง:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

IMHO วิธีสุดท้ายเป็นวิธีที่ดีที่สุดเนื่องจากเป็นการจำลองลำดับที่การตั้งค่าจะถูกนำไปใช้ในระหว่างการบู๊ต (และถ้าคุณมีข้อขัดแย้ง

หมายเหตุ: ฉันไม่แน่ใจว่า CentOS เวอร์ชันใดที่คุณกำลังใช้อยู่ แต่อย่างน้อย 7 ฉันพบปัญหาเมื่อ dracut สร้าง initramfs ใหม่ด้วยเหตุผลใดก็ตาม (เช่นเมื่อติดตั้งเคอร์เนลโมดูลใหม่) มันจะคัดลอกไป เนื้อหาของ /etc/sysctl.* ลงใน initramfs ซึ่งจะถูกดำเนินการโดย systemd-sysctl ในช่วงนั้นแม้ว่าคุณจะลบรายการเหล่านั้นออกจาก /etc/sysctl.conf ในภายหลัง

ในสภาพแวดล้อมของฉันฉันได้แก้ไขโมดูล systemd dracut เพื่อไม่รวม /etc/sysctl.* จากสภาพแวดล้อมนั้น (เนื่องจากการตั้งค่าเหล่านั้นจะได้รับการตั้งค่าทันทีที่ rootfs ติดตั้งและ systemd-sysctl ทำงานอีกครั้ง) มันเป็นแค่ gotcha ที่คุณอาจเจอ


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