OS X Yosemite - ไฟล์เปิดมากเกินไป


18

ฉันเพิ่งอัพเกรดจาก Mavericks เป็น Yosemite .... เกิดอาการปวดหัว

ผมค่อนข้างมั่นใจว่าปัญหาของฉันโกหก w / จำนวนไฟล์ที่ฉันสามารถเปิด - แต่ผมไม่แน่ใจว่าวิธีการแก้ปัญหาได้ ฉันค่อนข้างแน่ใจว่าฉันได้อ่านบทความ / คำแนะนำเกี่ยวกับการสร้าง/etc/sysctl.confไฟล์และ/etc/launchd.confไฟล์ทุกครั้ง

เพื่อความชัดเจนนี่คือสิ่งที่ทั้งคู่ดูเหมือนว่า nb (ฉันไม่แน่ใจว่าสิ่งเหล่านี้เป็นคำสั่งที่ถูกต้องที่จะใส่ในพวกเขาอีกต่อไป - ฉันได้ลองทุกอย่างและทุกชุดค่าเช่น: ค่าที่สูงกว่าค่าที่ต่ำกว่า ลบคำสั่งเพิ่มคำสั่ง)

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

ฉันได้ลองเพิ่มค่า ulimit ของฉัน - ทั้งในระดับโลกและในพื้นที่สำหรับเซสชันปัจจุบันของฉัน ... ไม่มี bueno

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                4096

Ok - นี่คือที่ปวดหัวของฉันเริ่มแรก ... ของฉัน DB (Percona เซิร์ฟเวอร์ 5.6.21-69.0 ติดตั้งผ่าน homebrew) เริ่มสำลักและตายและใน MySQL-error.log มันก็เต็มไป w / too many files openข้อผิดพลาด

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files

นี่คือที่ฉันเริ่มพยายามแก้ปัญหาโดยเริ่ม "up-ing" ulimit, maxfiles, maxproc ของฉัน ฯลฯ ...

ในที่สุด - ผิดหวังฉันย้ายและจะกลับมาที่ปัญหาในภายหลัง ดังนั้นฉันจึงพยายามsudo gem install nokogiri ซ้ำแล้วซ้ำอีกมันจะล้มเหลวและคายข้อผิดพลาดเดียวกันนี้ (มีการทำซ้ำหลายครั้งเกี่ยวกับผู้สร้าง rb ล้มเหลวในการสร้างส่วนขยายดั้งเดิมของอัญมณี - ตามด้วยกลุ่มการบันทึกซ้ำหลายก้อน

ข้อผิดพลาดในการติดตั้ง nokogiri ข้อผิดพลาดในการติดตั้ง nokogiri

ฉันได้ลองใช้วิธีการต่าง ๆ เพื่อแก้ไขปัญหานี้ (เช่น: การตั้งค่าสถานะเพิ่มเติม ฯลฯ ) มีอะไรน่าพิศวง - และเมื่อฉันเริ่มคิดว่าปัญหานี้เชื่อมโยงกับ # ของไฟล์ / กระบวนการที่เปิดอยู่เมื่อฉันตรวจสอบtopในขณะที่อัญมณีกำลังติดตั้ง .... ฉันค่อนข้างประหลาดใจที่เห็นสิ่งที่ฉันพบ

ด้านบนในช่วง gem install nokogiri sudo gem ติดตั้ง nokogiri

ดูเหมือนว่ากระบวนการของฉันจะทำการฟอร์กซึ่งทำให้เข้าใจได้สำหรับหนึ่งบรรทัดนี้ในรูปภาพก่อนหน้าของฉัน (ดู "รูปภาพข้อผิดพลาดในการติดตั้ง nokogiri")

sh: fork: Resource temporarily unavailable

ดังนั้นฉันจึงคิดไม่ออก แต่ฉันไม่แน่ใจว่าจะแก้ไขข้อผิดพลาด # ไฟล์ได้อย่างไร

UPDATE

ฉันจัดการติดตั้ง nokogiri ได้ดี น่าเสียดายที่ฉันไม่แน่ใจว่าสิ่งใดที่คงที่ไว้ฉันได้ลองหลายสิ่งหลายอย่างแล้ว แต่ฉันคิดว่ามันต้องจัดการกับการติดตั้งทับทิมใหม่ อย่างไรก็ตามฉันยังคงได้รับปัญหาเดียวกันโดยที่ฐานข้อมูลของฉันบ่นเกี่ยวกับไฟล์ที่เปิดมากเกินไปเมื่อฉันใช้ฐานข้อมูลประเภทใด ๆ ที่ไม่เล็กมาก


ฮึ่ม อาจไม่ควรวางไข่มากนัก? บางทีก็คุ้มค่าที่จะเลี้ยงบั๊กกับ devs ของอัญมณีนั้น
slhck

คำตอบ:


16

/etc/launchd.confดูเหมือนว่าการแก้ไขข้อความค้นหา google และคำแนะนำ SO หลายรายการดูเหมือนจะไม่ได้ผลสำหรับฉันใน Yosemite (10.10) สิ่งที่ได้ผลหลังจากการรวมกันของการเปลี่ยนแปลง / รีบูต / ทดสอบจำนวนมากกำลังแก้ไข (หรือสร้างหากไม่มี/etc/sysctl.confไฟล์)

นี่คือสิ่งที่ฉันต้องใส่เพื่อให้มันทำงานได้

kern.maxfiles=65536
kern.maxfilesperproc=65536

ฉันไม่แน่ใจว่าkern.maxfilesจำเป็นต้องอยู่ที่นั่นหรือไม่ แต่เมื่อฉันมีมันด้วยตัวเองฉันยังคงมีปัญหาเดียวกันเมื่อฉันเพิ่มkern.maxfilesperprocทุกอย่างที่เริ่มทำงาน


ฉันพบว่าจำเป็นต้องรีสตาร์ทเพื่อให้ตัวแปรเหล่านี้มีผล (ตามที่คาดไว้) sysctl -a | grep kern.maxfilesคุณสามารถยืนยันได้ว่าค่าที่มีการเปลี่ยนแปลงโดยการทำ
เบลคเฟรเดอริค

8

หากต้องการปรับขีด จำกัด การเปิดไฟล์ตามระบบทั้งระบบใน Mac OS X Yosemite คุณต้องสร้างไฟล์กำหนดค่าสองไฟล์ แรกคือไฟล์รายการทรัพย์สิน (aka plist) ใน/Library/LaunchDaemons/limit.maxfiles.plistที่มีการกำหนดค่า XML ต่อไปนี้:

<?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>65536</string>
          <string>65536</string>
        </array>
       <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

สิ่งนี้จะตั้งค่าขีด จำกัด การเปิดไฟล์เป็น 65536 ไฟล์การกำหนดค่า plist ที่สองควรเก็บไว้ใน/Library/LaunchDaemons/limit.maxproc.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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

ทั้งไฟล์ plist ต้องเป็นของและมีสิทธิ์root:wheel -rw-r--r--สิทธิ์นี้ควรจะอยู่ในสถานที่โดยค่าเริ่มต้น sudo chmod 644 <filename>แต่คุณสามารถมั่นใจได้ว่าพวกเขาอยู่ในสถานที่โดยการทำงาน ขณะที่ขั้นตอนที่อธิบายข้างต้นจะทำให้ทั้งระบบขีด จำกัด launchctl limitเปิดไฟล์ที่จะตั้งอย่างถูกต้องเมื่อเริ่มต้นที่คุณสามารถนำไปใช้ด้วยตนเองโดยการทำงาน

นอกจากการตั้งข้อ จำกัด เหล่านี้ในระดับระบบเราขอแนะนำการตั้งค่าในระดับเซสชั่นได้เป็นอย่างดีโดยท้ายบรรทัดต่อไปนี้ของคุณbashrc, bashprofileหรือแฟ้มคล้ายคลึง:

ulimit -n 65536
ulimit -u 2048

เช่นเดียวกับไฟล์ plist bashrc ของคุณหรือไฟล์ที่คล้ายกันควรได้-rw-r--r--รับอนุญาต ณ จุดนี้คุณสามารถรีสตาร์ทคอมพิวเตอร์และป้อน ulimit -n ในเทอร์มินัลของคุณ หากระบบของคุณได้รับการกำหนดค่าอย่างถูกต้องคุณควรเห็นว่า maxfiles นั้นถูกตั้งค่าเป็น 65536

แหล่งข่าวจาก: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/


1
"launchctl limit maxfiles unlimited unlimited; launchctl limit maxfiles" รายงานว่าจำนวนสูงสุดคือ 10240 ใน Yosemite ของฉัน 10.10.5 ใน 2015-09-30 และการทดลองกับพวกเขาดูเหมือนจะแสดงให้เห็นว่าถ้าคุณใช้จำนวนที่ชัดเจนมากขึ้นมันจะเป็น ละเว้น
Dave X

5

ค่าเริ่มต้นบนโยเซมิตีดูเหมือนจะเป็น 12K และ 10K:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

ดูเหมือนว่าการตั้งค่าเฉพาะkern.maxfilesใน/etc/sysctl.confการแก้ปัญหาของฉันได้ /etc/sysctl.confไฟล์:

kern.maxfiles=24576

ค่าเดียวกันแน่นอนสำหรับเซียร์รา
Devin G Rhode

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