ฉันจะเปลี่ยนจำนวนไฟล์ที่ จำกัด การเปิดใน Linux ได้อย่างไร [ปิด]


194

too many files openเมื่อเรียกใช้โปรแกรมประยุกต์ของฉันบางครั้งผมได้รับข้อผิดพลาดเกี่ยวกับ

การเรียกใช้ulimit -aรายงานว่าขีด จำกัด คือ 1024 ฉันจะเพิ่มขีด จำกัด ที่สูงกว่า 1024 ได้อย่างไร

แก้ไข ulimit -n 2048ผลลัพธ์ในข้อผิดพลาดการอนุญาต


ดูเพิ่มเติมที่: unix.stackexchange.com/a/8949/231660
Guy Avraham

ฉันเพิ่งผ่านสิ่งนี้ไปบน Centos 7 (เหมือนกันใน RHEL) และสร้างโพสต์บล็อกที่ครอบคลุมเพราะฉันมีปัญหามากแม้จะมีการโพสต์เหล่านี้: coding-stream-of-consciousness.com/2018/12/21/ …. บ่อยครั้งที่มีไฟล์เปิดอยู่คุณต้องเพิ่ม nproc ซึ่งจริง ๆ แล้วอยู่ในไฟล์การตั้งค่าหลายไฟล์ ... และถ้าคุณใช้ systemd / systemctl ที่มีการตั้งค่าแยกต่างหาก มันเป็นถั่ว
John Humphreys - w00te

หากคุณใช้ VSCode บน linux วิธีแก้ปัญหานี้อาจช่วยได้: stackoverflow.com/a/55027686/1190948
Juri Sinitson

คำตอบ:


153

ulimit -n 2048คุณอาจจะลองทำ สิ่งนี้จะรีเซ็ตขีด จำกัด สำหรับเชลล์ปัจจุบันของคุณเท่านั้นและหมายเลขที่คุณระบุต้องไม่เกินขีด จำกัด ฮาร์ด

ระบบปฏิบัติการแต่ละระบบมีการตั้งค่าขีด จำกัด ฮาร์ดไดรฟ์ต่างกันในไฟล์กำหนดค่า ตัวอย่างเช่นขีด จำกัด ไฟล์เปิดยากบน Solaris สามารถตั้งค่าได้เมื่อบูตจาก / etc / ระบบ

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

บน OS X ต้องตั้งค่าข้อมูลเดียวกันนี้ใน /etc/sysctl.conf

kern.maxfilesperproc=166384
kern.maxfiles=8192

ภายใต้ Linux การตั้งค่าเหล่านี้มักจะอยู่ใน /etc/security/limits.conf

ข้อ จำกัด มีสองประเภท:

  • ข้อ จำกัด ที่อ่อนนุ่มเป็นเพียงข้อ จำกัด ที่บังคับใช้ในปัจจุบัน
  • hard limit ทำเครื่องหมายค่าสูงสุดซึ่งไม่สามารถเกินได้โดยการตั้งค่า soft limit

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

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


4
คุณสามารถบอกวิธีใช้สิ่งนี้ใน windows ได้ไหม
Pritam

@ hoyhoy ฉันสามารถเปลี่ยนได้2048แต่ไม่ใช่4500เพราะอะไร ดูสิ่งนี้
2560

@GaneshKrishnan สิ่งที่ต้องเพิ่มในไฟล์ linux ที่คุณพูดถึง?
aviral sanjay

@Pritam ของ Windows ulimitไม่ได้ใด ๆ คุณต้องระบุสิ่งที่คุณใช้ (เช่น WSL, Cygwin)
Melebius

99

หากคุณใช้ Linux และคุณได้รับข้อผิดพลาดในการอนุญาตคุณจะต้องเพิ่มขีด จำกัด ที่อนุญาตใน/etc/limits.confหรือ/etc/security/limits.confไฟล์ (ซึ่งไฟล์นั้นตั้งอยู่ขึ้นอยู่กับการกระจาย Linux เฉพาะของคุณ)

ตัวอย่างเช่นอนุญาตให้ทุกคนในเครื่องเพิ่มจำนวนไฟล์ที่เปิดได้มากถึง 10,000 เพิ่มบรรทัดลงในlimits.confไฟล์

* hard nofile 10000

จากนั้นออกจากระบบและเชื่อมต่อกับระบบของคุณอีกครั้งและคุณควรจะสามารถ:

ulimit -n 10000

ไม่มีข้อผิดพลาดในการอนุญาต


6
หมายเหตุ: Wildcard ไม่สามารถใช้ได้กับrootผู้ใช้ คุณต้องระบุroot hard nofile 10000ว่าคุณต้องการปรับrootขีด จำกัด หรือไม่
Joshua Pinter

1
@JoshPinter ฮ่าฮ่าฉันเพิ่งใช้เวลา 3 ชั่วโมงที่ผ่านมาหรือผ่านการสอนทุกครั้งเกี่ยวกับวิธีการเปลี่ยนulimitและในที่สุดก็พบว่าฉันเข้าสู่ระบบในฐานะ root นั่นเป็นเหตุผลที่ฉันเห็น 1024 ulimit -aต่อไป ผมเปลี่ยน wildcare และเพิ่มภายใน* limits.confทุกอย่างเรียบร้อยดีแล้ว (ฉันใช้กุญแจ ssh ไม่ต้องกังวล: P) - ขอบคุณ !!!
NiCk Newman

1
@NiCkNewman ฉันดีใจที่คุณหัวเราะไปกับมัน! นั่นเป็นลักษณะที่ดีในโปรแกรมเมอร์ / คน sysops ฉันทำสิ่งเดียวกันและไม่ร่าเริง ดีใจที่มันช่วย! :)
Joshua Pinter

suplement: คุณอาจพบว่ายังมีการตั้งค่าใน dir /etc/security/limits.d/นี้:
Waldemar Wosiński

2
ฉันเปิด /etc/security/limits.conf เป็นครั้งแรกและสังเกตว่าทุกอย่างถูกคอมเม้นท์ ค่าเริ่มต้นของ "hard nofile" คืออะไร?
ka3ak

36

1) เพิ่มบรรทัดต่อไปนี้ลงใน /etc/security/limits.conf

webuser hard nofile 64000

จากนั้นเข้าสู่ระบบในฐานะผู้ใช้เว็บ

su - webuser

2) แก้ไขสองไฟล์ต่อไปนี้สำหรับ webuser

ผนวกไฟล์. bashrc และ. bash_profileโดยการรัน

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) ออกจากระบบจากนั้นเข้าสู่ระบบอีกครั้งและตรวจสอบว่าการเปลี่ยนแปลงได้ทำอย่างถูกต้อง:

$ ulimit -a | grep open
open files                      (-n) 64000

นั่นมันและพวกเขาบูมบูมบูม


9
หากคุณได้รับการเปลี่ยนบรรทัดใน limit.conf จาก 'ยาก' เป็น 'อ่อน' มันควรจะเป็นค่าเริ่มต้นใหม่และไม่จำเป็นต้องมีการเปลี่ยนแปลงโปรไฟล์ทุบตี
RishiD

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

6

หากบริการบางอย่างของคุณเข้าข่าย ulimits บางครั้งก็ง่ายกว่าที่จะใส่คำสั่งที่เหมาะสมลงในสคริปต์เริ่มต้นของบริการ ตัวอย่างเช่นเมื่อ Apache กำลังรายงาน

[การแจ้งเตือน] (11) ทรัพยากรไม่สามารถใช้งานได้ชั่วคราว: apr_thread_create: ไม่สามารถสร้างเธรดผู้ปฏิบัติงาน

พยายามที่จะนำเข้าulimit -s unlimited /etc/init.d/httpdนี่ไม่จำเป็นต้องรีบูตเซิร์ฟเวอร์

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