ฉันจะกำหนดขีด จำกัด จำนวนไฟล์ที่ Linux สามารถเปิดได้อย่างไร


11

nohup ... &ผมวางแผนที่จะใช้แอพพลิเคจาวาโดยใช้ ขีด จำกัด ต้องใช้กับคำสั่งเช่นนี้


แต่สิ่งนี้ทำให้เกิดข้อผิดพลาดในโปรแกรมภาษาจาวาของฉัน

คำตอบ:


7

ระบบส่วนใหญ่ใช้PAMและมีpam_limitsข้อ จำกัด /etc/security/limits.confโมดูลชุดขึ้นอยู่กับ ขีด จำกัด nofileต่อผู้ใช้สำหรับเปิดไฟล์ที่เรียกว่า คุณสามารถตั้งค่าสำหรับผู้ใช้ทุกคนหรือสำหรับผู้ใช้หรือกลุ่มใดกลุ่มหนึ่งและคุณสามารถตั้งค่าขีด จำกัด ที่ผู้ใช้สามารถลบล้าง (soft limit) และอีกอันที่ root เท่านั้นที่สามารถแทนที่ (ฮาร์ด จำกัด ) เอกสารและlimits.confหน้าคนมีรายละเอียด ตัวอย่างเช่นหากต้องการเพิ่มขีด จำกัด เป็น 50000 สำหรับทุกคนให้ใส่บรรทัดนี้/etc/limits.conf(การตั้งค่าจะมีผลเมื่อคุณลงชื่อเข้าใช้):

* - nofile 50000

ภายในlimits.confทำและ* hard nofile 50000 / หรือ * soft nofile 50000ฉันไม่ทราบถึงความแตกต่างทางเทคนิคระหว่างฮาร์ดกับซอฟท์และทำทั้งสองอย่างเสมอ
Ron

ภายใน SLES 11.4 โดยใช้ tcsh เราสามารถทำได้limit descriptors 50000เพื่อเปลี่ยนค่าภายในหน้าต่าง / เซสชันที่กำหนด
Ron

@ron -` ในคอลัมน์ที่สองตั้งค่าทั้ง soft และ hard limit คุณจะต้องตั้งค่าแยกต่างหากหากคุณต้องการค่าที่แตกต่าง ขีด จำกัด ซอฟต์สามารถเปลี่ยนแปลงได้ตลอดเวลาโดยเรียกใช้ulimitคำสั่ง (เรียกว่าlimitใน csh) ผู้ใช้ที่ไม่มีสิทธิพิเศษจะไม่สามารถสูงกว่าขีด จำกัด ได้ยาก
Gilles 'หยุดความชั่วร้าย'

หากฉันตั้งค่าฮาร์ดเท่านั้นค่าซอฟต์ยังคงเป็นค่าเริ่มต้นหรือไม่ หากฉันตั้งค่าอ่อนและไม่แข็งอยู่ค่าเริ่มต้นหรือค่านุ่มเท่ากับเท่าเดิมหรือไม่ ฉันจะตั้งซอฟท์> แข็งหรือไม่? ซอฟท์คือมูลค่าที่แท้จริงที่มีผล? ขอโทษสำหรับคำถาม
ron

@ron ขีด จำกัด ซอฟต์ถูก จำกัด โดยอัตโนมัติที่ขีด จำกัด ฮาร์ด หากคุณตั้งค่าขีด จำกัด ฮาร์ดเท่านั้นค่านี้จะตั้งค่าขีด จำกัด ซอฟต์เป็นสูงสุด (default_soft_limit, actual_hard_limit)
Gilles 'หยุดความชั่วร้าย'

4

คุณสามารถเพิ่มเข้าไปfs.file-max = <your number> /etc/sysctl.confจากนั้นรีบูท


cat / proc / sys / fs / file-max คือ 169203, แต่ ulimit -n คือ 1024

ไม่ต้องรีบูท sysctl fs.file-max=123456วิ่งเพียง ( /etc/sysctl.confอ่านในเวลาบูตโดยสคริปต์ที่เรียกsysctlใช้เนื้อหา)
Gilles 'ดังนั้นหยุดชั่วร้าย'

3
ulimit -n

สามารถแก้ไขต่อการตั้งค่ากระบวนการและ

/proc/sys/fs/file-max

หรือตัวแปร sysctl ที่เรียกว่าfs.file-maxสามารถใช้เพื่ออ่านและตั้งค่าทั้งระบบ


cat / proc / sys / fs / file-max คือ 169203, แต่ ulimit -n คือ 1024

1

คุณสามารถใช้ ulimit สำหรับสิ่งนี้:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

แม้ว่าคุณควรตรวจสอบให้แน่ใจว่าการเปิดการจัดการไฟล์จำนวนมากเป็นสิ่งจำเป็นอย่างยิ่งก่อนที่จะหันไปใช้การปรับเปลี่ยนดังกล่าว การเพิ่มการจัดการไฟล์สูงสุดเพียงเพราะคุณลืมที่จะทำ inputstream.close () ในลูปเป็นเพียงการหน่วงเวลาปัญหาพื้นฐาน


1
ฉันต้องการเชื่อมต่อกับลูกค้ามากมาย

1

ใช้ ulimit (คำสั่ง Bash - man bash หรือค้นหา shell ที่เหมือนกัน) สำหรับแต่ละโปรแกรม อย่าใช้ขีด จำกัด ของระบบโกลบอลหากคุณไม่รู้ว่าคุณกำลังทำอะไรอยู่ - เป็นไปได้ที่ DoS


ใน SLES 11.4 ฉันได้ตั้งnofileในlimits.confที่จะประสบความสำเร็จ 100000 ฉันสามารถยืนยันได้ว่าการตั้งค่าที่มากเกินไปป้องกันการเข้าสู่ระบบในภายหลังด้วย SSH และฉันต้องบูตจาก dvd เพื่อแก้ไขค่านั้นใน limit.conf เพื่อกู้คืนระบบ
Ron

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