เพิ่มจำนวนตัวอธิบายไฟล์ที่เปิดสูงสุดใน Snow Leopard?


101

ฉันพยายามทำบางสิ่งที่ต้องมีตัวอธิบายไฟล์จำนวนมาก

sudo ulimit -n 12288สูงที่สุดเท่าที่ Snow Leopard ต้องการไป; เกินกว่าผลลัพธ์นี้

/ usr / bin / ulimit: บรรทัด 4: ulimit: เปิดไฟล์: ไม่สามารถแก้ไขข้อ จำกัด : อาร์กิวเมนต์ไม่ถูกต้อง

ฉันต้องการที่จะเพิ่มจำนวนมากขึ้นพูด 100000 มันเป็นไปได้หรือไม่


4
คำตอบของคำถามนี้ไม่ทำงานใน OSX Mavericks อีกต่อไป
Howard

2
การทำงานecho limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confและการเริ่มต้นใหม่ทำงานได้ดีสำหรับฉันใน Mavericks
Lri

คำตอบ:


95

การใช้ulimitคำสั่งจะเปลี่ยนข้อ จำกัด ของทรัพยากรสำหรับเชลล์ปัจจุบันและลูกของมันและsudo ulimitสร้างรูทเชลล์ปรับเปลี่ยนขีด จำกัด ของมันแล้วออก
เกิน 12288 คุณจะต้องปรับเคอร์เนลkern.maxfilesและkern.maxfilesperprocพารามิเตอร์และอย่างน้อย (ตามรายการบล็อกนี้ซึ่งเป็นบทสรุปของการสนทนานี้ ) จำกัด การเปิดตัว คุณสามารถใช้launchctl limitเพื่อปรับทั้งหมดเหล่านี้ในครั้งเดียว:

sudo launchctl limit maxfiles 1000000 1000000

หากต้องการทำให้ถาวร (เช่นไม่ได้รีเซ็ตเมื่อคุณรีบูต) สร้าง/etc/launchd.confประกอบด้วย:

limit maxfiles 1000000 1000000

จากนั้นคุณสามารถใช้ulimit(แต่ไม่มีsudo) เพื่อปรับขีด จำกัด กระบวนการของคุณ

หากวิธีนี้ไม่ได้ผลคุณอาจใช้ขนาด จำกัด ในเคอร์เนล หากรุ่นของคุณรองรับการบู๊ตเคอร์เนลในโหมด 64 บิตอาจช่วยได้


1
sudo launchctl limit maxfiles 1000000 unlimitedขีด จำกัด ที่แข็งหรืออ่อนสำหรับ "maxfiles" นั้นไม่ จำกัด โปรดใช้พารามิเตอร์ที่เป็นตัวเลขสำหรับทั้งคู่
โทมัสฮันเตอร์

2
launchd.confโปรดใช้ความระมัดระวังเมื่อมีการเพิ่มสายที่ ฉันคิดว่าถ้าตัวเลขมีขนาดเล็กเกินไปมันสามารถทำให้คอมพิวเตอร์ของคุณใช้งานไม่ได้ ตัวอย่างเช่นฉันใช้limit maxfiles 1024 1024และฉันมีเวลายากมากที่จะเปลี่ยนกลับ
Shawn

1
อนิจจา: "ไฟล์ /etc/launchd.conf ไม่ได้รับการพิจารณาอีกต่อไปสำหรับคำสั่งย่อยที่จะเรียกใช้ในช่วงเวลาการบู๊ตก่อนหน้านี้ฟังก์ชันการทำงานนี้ถูกลบออกเพื่อการพิจารณาด้านความปลอดภัย"
อลิซเพอร์เซลล์

มันใช้งานไม่ได้หมายเลข fd ของฉันต้องไม่เกิน 6k แม้ว่าฉันจะตั้ง ulimit -Sn 10240 ได้สำเร็จ
Jian Weihang

@JianWeihang หมายเลข fd เป็นแบบต่อกระบวนการดังนั้นฉันคิดว่ากระบวนการอื่น ๆ ที่เกิดขึ้นจะเปิดไฟล์ 4000 ไฟล์ คุณใช้ Chrome ไหม ;)
Trejkaz

41

ต่อไปนี้ควรแก้ไขวิธีแก้ปัญหาส่วนใหญ่ (และอยู่ในลำดับของลำดับชั้น):

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

หมายเหตุ:

  1. คุณจะต้องรีสตาร์ทเพื่อให้การเปลี่ยนแปลงเหล่านี้มีผล
  2. AFAIK คุณไม่สามารถตั้งค่า จำกัด เป็น 'ไม่ จำกัด ' ภายใต้ OS X ได้อีก
  3. launchctl maxfiles ถูกล้อมรอบด้วย sysctl maxfiles และดังนั้นจึงไม่สามารถเกินได้
  4. sysctl ดูเหมือนจะสืบทอด kern.maxfilesperproc จาก launchctl maxfiles
  5. ulimit ดูเหมือนจะรับช่วงเป็นค่า 'เปิดไฟล์' จาก launchctl ตามค่าเริ่มต้น
  6. คุณสามารถตั้งค่า ulimit ที่กำหนดเองได้ภายใน / etc / profile หรือ ~ / .profile; ในขณะนี้ไม่จำเป็นต้องฉันได้ให้ตัวอย่าง
  7. ระมัดระวังเมื่อตั้งค่าใด ๆ เหล่านี้เป็นจำนวนที่สูงมากเมื่อเทียบกับค่าเริ่มต้น - คุณลักษณะที่มีความเสถียร / ความปลอดภัย ฉันนำตัวเลขตัวอย่างเหล่านี้ซึ่งฉันเชื่อว่ามีเหตุผลเขียนบนเว็บไซต์อื่น ๆ

3
อนิจจา: "ไฟล์ /etc/launchd.conf ไม่ได้รับการพิจารณาอีกต่อไปสำหรับคำสั่งย่อยที่จะเรียกใช้ในช่วงเวลาการบู๊ตก่อนหน้านี้ฟังก์ชันการทำงานนี้ถูกลบออกเพื่อการพิจารณาด้านความปลอดภัย"
อลิซเพอร์เซลล์

34

ดูเหมือนว่ามีวิธีการที่แตกต่างกันอย่างสิ้นเชิงสำหรับการเปลี่ยนการ จำกัด ไฟล์เปิดสำหรับ OS X แต่ละรุ่น!

สำหรับ OS X Sierra (10.12.X) คุณต้อง:

1. ในการLibrary/LaunchDaemonsสร้างไฟล์ชื่อlimit.maxfiles.plistและวางต่อไปนี้ใน (รู้สึกอิสระที่จะเปลี่ยนตัวเลขสองตัว (ซึ่งเป็นข้อ จำกัด นุ่มและยากตามลำดับ):

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

2. เปลี่ยนเจ้าของไฟล์ใหม่ของคุณ:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. โหลดการตั้งค่าใหม่เหล่านี้:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. สุดท้ายตรวจสอบว่าขีด จำกัด นั้นถูกต้อง:

launchctl limit maxfiles

2
คำตอบนี้ดีมากและฉันพบว่ามีพื้นหลังให้เพิ่มที่นี่ @ninjaPixel: blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan
Dean Radcliffe

20

ดูเหมือนว่า OS X Lion จะไม่อนุญาตให้ใช้ค่า "ไม่ จำกัด ":

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

การระบุค่าตัวเลขสำหรับทั้งซอฟต์และฮาร์ด จำกัด ทำหน้าที่:

% sudo launchctl limit maxfiles 4096 8192

3
หากหนึ่งในค่าที่เป็นไม่ จำกัดโดยใช้ผลคุ้มค่าใน-1 มันเป็นไปได้ที่จะใช้ค่าตัวเลขที่มีขนาดใหญ่เช่น12288 sudo launchctl limit maxfiles 15000 150000ฉันไม่แน่ใจว่าการตั้งค่าเหล่านี้จะมีผลอย่างไร
Daniel Beck

8

บน Mavericks ง่าย ๆ ในฐานะผู้ใช้ทั่วไป:

ulimit -n 8192

คุณสามารถตรวจสอบการตั้งค่าที่อัปเดตผ่านทาง

ulimit -a

บนเครื่องของฉัน:

ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                8192

2
พิจารณาทบทวนวิธีแก้ปัญหาของคุณ คุณกำลังตั้งค่า ulimit เป็น 1024 จากนั้นแสดงตัวอธิบายไฟล์เอาต์พุตเป็น 8192 (ควรเป็น 1024) คุณกำลังเข้าใกล้ก็เป็นไปได้โดยไม่ต้อง sudo ลองเปลี่ยนมันสองสามครั้งด้วยตัวคุณเอง
y3sh

1
ไม่ควรใช้ sudo ที่นี่ แต่คำตอบนี้ไม่ถูกต้อง ผู้ใช้ Mavericks ควรใช้echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confแล้วรีสตาร์ทเครื่อง
Kyle Chadha

3

ในOS X 10.13.6สิ่งนี้ใช้ได้กับฉัน:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576

1

ไม่สามารถเปลี่ยนแปลงข้อ จำกัด บางอย่างได้เนื่องจากข้อ จำกัดulimitเหล่านี้ใช้กับเชลล์ปัจจุบันเท่านั้นดังนั้นlaunchctlควรใช้คำสั่งเพื่อเปลี่ยนข้อ จำกัด แบบโกลบอลเช่น

sudo launchctl limit maxfiles 100000 unlimited

โปรดทราบว่าการใช้ข้อ จำกัด เหล่านี้ใน/etc/launchd.conf(ตามที่แนะนำในคำตอบอื่น ๆ ) ไม่ได้รับการสนับสนุนในการเผยแพร่ macOS เมื่อเร็ว ๆ นี้ แม้ว่าจะยังคงสามารถใช้launchd.plist(ดู: man launchd.plist) เช่นต่อผู้ใช้หรือทั้งระบบplistแฟ้มการกำหนดค่าที่แนะนำที่นี่ , มีและกว่ามี


ในการทำให้ข้อ จำกัด เหล่านี้คงอยู่คุณสามารถใช้/etc/sysctl.confไฟล์และเพิ่มตัวอย่าง:

kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000

เพื่อให้การเปลี่ยนแปลงมีผลต้องใช้การรีบูต

หากต้องการดูข้อ จำกัด ในปัจจุบันทำงาน: หรือlaunchctl limitsysctl -a | grep ^kern.max

ดูเพิ่มเติม: วิธีรักษาการตั้งค่า ulimit ใน macOS ได้อย่างไร

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