ไม่สามารถเพิ่มขีด จำกัด การเปิดไฟล์ที่ผ่านมา 4096 (Ubuntu)


34

ฉันใช้ Ubuntu 17.04 กำลังพยายามเพิ่มขีด จำกัด ของไฟล์ที่เปิดอยู่และไม่มีคำแนะนำใด ๆ ที่ฉันพบว่าออนไลน์ใช้งานได้ ฉันสามารถเพิ่มได้ถึง 4096 แต่ไม่สามารถผ่านไปได้

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

ที่ได้ผล สิ่งนี้ไม่:

$ ulimit -n 4097
bash: ulimit: open files: cannot modify limit: Operation not permitted

ดูเหมือนจะเป็นเพราะขีด จำกัด ยาก:

$ ulimit -Hn
4096

ฉันได้ลองเพิ่มบรรทัดเหล่านี้ใน /etc/security/limits.conf:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

เพิ่มบรรทัดนี้ใน /etc/pam.d/common-session และ /etc/pam.d/common-session-noninteractive ด้วย:

session required pam_limits.so

ตั้งแต่นั้นฉันก็เริ่มคอมพิวเตอร์ใหม่ การเปลี่ยนแปลงขีด จำกัด ดูเหมือนจะไม่ส่งผลกระทบอะไรเลย ขีด จำกัด หนักยังคงติดอยู่ที่ 4096 ทำให้ฉันไม่สามารถสูงขึ้นได้อีก ฉันจะเพิ่มขีด จำกัด ของไฟล์ที่เปิดอยู่ได้อย่างไร


นี่คือข้อมูลการกำหนดค่าเพิ่มเติมบางส่วน:

$ cat /proc/sys/fs/file-max 
1624668

คำตอบ:


56

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

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

การวิจัยเพิ่มเติมทำให้ฉันรายงานข้อผิดพลาดนี้ซึ่งทำให้ฉันชี้ไปในทิศทางที่ถูกต้อง ในการแก้ไขข้อ จำกัด ที่ใช้โดยเชลล์ล็อกอินเราจำเป็นต้องเพิ่มบรรทัดต่อไปนี้ใน /etc/systemd/user.conf:

DefaultLimitNOFILE=65535

การเปลี่ยนแปลงนั้นใช้งานได้ แต่ส่งผลกระทบต่อขีด จำกัด ซอฟต์เท่านั้น (ปล่อยให้เราปกคลุมด้วยขีด จำกัด ที่ยากของ 4096 ยัง.) เพื่อที่จะส่งผลกระทบต่อขีด จำกัด ฮาร์ดยังเราจะต้องแก้ไข /etc/systemd/system.conf ด้วยการเปลี่ยนแปลงเดียวกัน

การเปลี่ยนแปลงที่ฉันทำใน /etc/pam.d นั้นไม่จำเป็น อย่างน้อยใน Ubuntu นี่ใช้งานได้แล้ว นอกจากนี้ยังไม่จำเป็นต้องเปลี่ยนการตั้งค่าสำหรับrootและ*ใน limit.conf การเปลี่ยนขีด จำกัด สำหรับmkasbergนั้นเพียงพออย่างน้อยสำหรับกรณีการใช้งานของฉัน


สรุป

หากคุณต้องการเพิ่มขีด จำกัด ที่แสดงโดยulimit -nคุณควร:

  • แก้ไข /etc/systemd/user.conf และ /etc/systemd/system.conf ด้วยบรรทัดต่อไปนี้ (ซึ่งจะดูแลการล็อกอินแบบกราฟิก):

    DefaultLimitNOFILE=65535
    
  • แก้ไข /etc/security/limits.conf ด้วยบรรทัดต่อไปนี้ (ซึ่งจะดูแลล็อกอินที่ไม่ใช่ GUI):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • รีบูตเครื่องคอมพิวเตอร์เพื่อให้การเปลี่ยนแปลงมีผล


2
DefaultLimitNOFILE=65535ทำเคล็ดลับ แต่ทำไม/etc/security/limits.conf ไม่ทำงาน
Suvitruf พูดว่า Reinstate Monica

6
การเข้าสู่ระบบ GUI ใช้ systemd ซึ่งเห็นได้ชัดว่ามีการกำหนดค่าของตัวเอง ( /etc/systemd/system.conf) ที่เป็นอิสระจากการกำหนดค่าปกติสำหรับเทอร์มินัลเซสชัน ( /etc/security/limits.conf) ฉันไม่มีความรู้เกี่ยวกับ systemd เพียงพอที่จะรู้ว่าทำไมจึงมีการใช้งานวิธีนี้
mkasberg

1
@Suvitruf เพราะมันถูกละเว้นในระบบsystemd ฉันโพสต์คำตอบ
Marc.2377

1
เพียงต้องการชี้ให้เห็นว่าข้อ จำกัด สำหรับrootผู้ใช้ไม่สามารถระบุได้*หรือตัวระบุกลุ่ม rootต้องระบุตัวอักษรอย่างชัดเจน
Petr Javorik

2
งานนี้สำหรับผมหลังจากรีบูต
Shihe Zhang

14

ไม่จำเป็นต้องเปลี่ยนแปลงอะไรใน/etc/security/limits.confไฟล์มันจะถูกข้ามถ้าคุณใช้ systemd

(ทำซ้ำคำตอบที่แก้ไขแล้วสำหรับคำถามอื่นในเครือข่าย ... )

ทางเลือกสำหรับผู้ที่ไม่ต้องการแก้ไขค่าเริ่มต้น/etc/systemd/system.confและ/etc/systemd/user/confไฟล์:

  1. สร้างไฟล์ใหม่/etc/systemd/system.conf.d/limits.confด้วยเนื้อหาเหล่านี้:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. ทำงานsystemctl daemon-reexecเป็นราก

  3. ออกจากระบบและเข้าสู่ระบบอีกครั้ง

  4. ตรวจสอบขีด จำกัด ulimit -nใหม่ของคุณกับ

อ้างถึงsystemd-system.confmanpageสำหรับรายละเอียด


บน Ubuntu 18.10 /etc/systemd/system.confไฟล์ระบบของฉันในคำถามที่ การเปลี่ยนแปลงดูเหมือนจะทำอุบายขอบคุณ
Stephen Kennedy

1
เพียงออกจากระบบสำหรับฉันไม่ได้ทำงาน (Ubuntu 18.04) แต่การเริ่มต้นใหม่ได้งาน คำตอบที่สง่างามมากขอบคุณ
stann1 1

0

ใช้ Ubuntu 17.04 ฉันได้รับขีด จำกัด ที่อธิบาย:

user@paresh.com:~$ ulimit -Hn
4096

ฉันสามารถลดการใช้ulimitแต่ไม่สามารถเพิ่มได้เช่นเดียวกับคำถามที่อธิบาย ulimitคู่มืออธิบาย:

เฉพาะ root เท่านั้นที่สามารถเพิ่มขีด จำกัด ฮาร์ดได้

ดังนั้นฉันจึงพยายามกำหนดขีด จำกัด ที่สูงขึ้น/etc/security/limits.confเช่นนี้:

user hard nofile 9999

และการเข้าสู่ระบบใหม่เช่นssh localhost -l userให้วงเงินใหม่กับฉัน:

user@paresh.com:~$ ulimit -Hn
9999

ฉันหวังว่ามันจะเหมาะกับคุณเช่นกัน


0
  1. แก้ไข /etc/systemd/system/sonar.service

  2. เพิ่มสองบรรทัดใต้ Service

[บริการ]

LimitMEMLOCK = อินฟินิตี้

LimitNOFILE = 65535

  1. systemctl daemon-reload
  2. systemctl รีสตาร์ท sonar

มันใช้งานได้สำหรับฉัน


0

TL; DR ฉันรู้สึกว่าต้องมีสมาธิกับคำตอบดังนั้นจึงหาง่ายกว่า เอาทุกเพศทุกวัยฉันเพื่อให้ได้ชิ้นส่วนทั้งหมดเข้าด้วยกันเพื่อให้ทำงานอย่างถูกต้อง ...

มี 2 ​​สถานที่ที่จะพิจารณา

  1. เซสชัน GUI

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    หรือดีกว่าที่นี่:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. สภาพแวดล้อมของเชลล์

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    หรือดีกว่าที่นี่:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. หลังจากแก้ไขการตั้งค่าในไฟล์ด้านบนแล้วให้รีบู๊ตแล้วตรวจสอบข้อ จำกัด ด้วย: ulimit -n -Hn -Sn

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