วิธีควบคุมปริมาณการใช้ทรัพยากรระบบสูงสุดอย่างต่อเนื่องบน Mac


85

ก่อน Mavericks ฉันสามารถใช้/etc/launchd.confไฟล์เพื่อเปลี่ยนการใช้ทรัพยากรระบบได้สูงสุดตัวอย่างเช่น

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

มันไม่ทำงานใน Mavericks อีกต่อไป

วิธีที่ถูกต้องในการทำ OS X เวอร์ชั่นล่าสุดคืออะไร?


ขีด จำกัด ของคุณสูงกว่าค่าสูงสุดสำหรับ OS X. สูงสุดที่ 10240 และขีด จำกัด สูงสุดคือ 1,064 ถ้าคำตอบที่ได้รับการอนุมัติแก้ไขข้อ จำกัด ฉันจะยกนิ้วให้ .. แต่มันนั่งผิดและไม่แก้ไขสำหรับปีที่ดี + ตอนนี้ ..
Joey T

@atmosx: มันควรจะเป็นไม่ได้/etc/sysctl.conf /etc/sysctrl.conf
งุดชิงโปง - อาสึกะเคนจิ -

1
@JoeyT: อันที่จริงแล้วคุณสามารถตั้งไว้ที่ขีด จำกัด ที่สูงขึ้น! แต่คุณต้องซื้อ "OS X Server" จาก "App Store" ก่อนหากคุณใช้ Mac OS X 10.8 (Mountain Lion) หรือ 10.9 (Mavericks) (ใช่คุณต้องจ่าย USD $ 19.99 เพื่อเปลี่ยนการตั้งค่า!) ในระยะสั้นคุณต้องเรียกใช้sudo serverinfo --setperfmode trueหนึ่งครั้งเพื่อให้เครื่องของคุณอยู่ใน "โหมดประสิทธิภาพเซิร์ฟเวอร์" จากนั้นคุณมี "สูงกว่าสูงสุด" ขึ้นอยู่กับการกำหนดค่าเครื่องของคุณ โปรดดูโพสต์ของฉันที่Discussions.apple.com/thread/5166397สำหรับรายละเอียด สำหรับ 10.10 (Yosemite) โหมดจะเปิดใช้งานตามค่าเริ่มต้น (อย่างน้อยในเครื่องของฉัน!) ดูคำตอบของฉันด้านล่าง
Siu Ching Pong-Asuka Kenji-

คำตอบ:


87

การ จำกัด เซสชันของเชลล์

ขีด จำกัด ที่ตั้งค่าผ่านulimitจะมีผลกับกระบวนการที่สร้างขึ้นโดยเชลล์เซสชันปัจจุบันเท่านั้น

  • "soft limit" เป็นขีด จำกัด จริงที่ใช้ สามารถตั้งค่าได้ตราบใดที่มันไม่เกิน "ขีด จำกัด ฮาร์ด"
  • สามารถตั้งค่า "ขีด จำกัด ฮาร์ด" ได้ แต่จะมีค่าน้อยกว่าค่าปัจจุบันและตั้งค่าไม่น้อยกว่า "ขีด จำกัด เบา"
  • "hard limit" รวมถึงขีด จำกัด ทั้งระบบอาจถูกเลี้ยงดูโดยroot(ผู้ดูแลระบบ) โดยการรันคำสั่งการกำหนดค่าระบบหรือแก้ไขไฟล์การกำหนดค่าระบบ

หลังจากที่คุณบอกเลิกเซสชั่นเปลือก (โดยCtrl+ D, exitหรือปิดTerminal.appหน้าต่าง ฯลฯ ), การตั้งค่าจะหายไป หากคุณต้องการการตั้งค่าเดียวกันในเชลล์เซสชันถัดไปให้เพิ่มการตั้งค่าในสคริปต์เริ่มต้นเชลล์

หมายเหตุ:หากคุณกำลังใช้bashแล้วมันควรจะเป็นหรือ~/.bash_proile ~/.bash_loginหากคุณกำลังใช้เปลือกหอยอื่น ๆ ~/.profileก็อาจจะ

ขีด จำกัด ของระบบ (ต้องรีบูตเพื่อให้มีผลบังคับใช้)

สำหรับ 10.9 (Mavericks), 10.10 (Yosemite), 10.11 (El Capitan) และ 10.12 (Sierra):

คุณต้องสร้างไฟล์ที่/Library/LaunchDaemons/limit.maxfiles.plist(เจ้าของ: root:wheel, โหมด:) 0644:

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

คุณควรเปลี่ยนตัวเลขตามความต้องการของคุณ พวกเขาคือ "ขีด จำกัด อ่อน" ( 262144) และเป็น "จำกัด ยาก" ( 524288) ตามลำดับ man launchd.plistสำหรับข้อมูลเพิ่มเติมโปรดดูหน้าคู่มือโดยการเรียกใช้

สำหรับ 10.8 (Mountain Lion):

คุณสามารถเพิ่มบรรทัดต่อไปนี้ใน/etc/sysctl.conf(เจ้าของ: root:wheel, โหมด:) 0644:

kern.maxfiles=524288
kern.maxfilesperproc=262144

คุณควรเปลี่ยนตัวเลขตามความต้องการของคุณ พวกเขาคือ "ขีด จำกัด ทั้งระบบ" ( kern.maxfiles) และ "ขีด จำกัด ต่อกระบวนการ" ( kern.maxfilesperproc) ตามลำดับ สำหรับการตั้งค่าเพิ่มเติมโปรดดูหน้าคู่มือโดยการทำงานหรืออ่านรหัสแหล่งที่มาman sysctl/usr/include/sys/sysctl.h

สำหรับ Mac OS X รุ่นเก่า (ฉันเดาว่ามันใช้งานได้กับ 10.7 (Lion) หรือก่อนหน้า):

คุณสามารถเพิ่มบรรทัดต่อไปนี้ใน/etc/launchd.conf(เจ้าของ: root:wheel, โหมด:) 0644:

limit maxfiles 262144 524288

คุณควรเปลี่ยนตัวเลขตามความต้องการของคุณ พวกเขาคือ "ขีด จำกัด อ่อน" ( 262144) และเป็น "จำกัด ยาก" ( 524288) ตามลำดับ

หากระบบไม่อนุญาตให้คุณตั้งค่าขีด จำกัด เหนือค่าที่แน่นอน ...

ระบบไม่อนุญาตให้คุณตั้งค่าที่สูงกว่า "สูงสุดสูงสุด" (เสนอโดย Apple) ในการเพิ่ม "ฮาร์ดสูงสุด" นี้คุณต้องซื้อ "OS X Server" จาก "App Store" จากนั้นคุณต้องดำเนินการคำสั่งต่อไปนี้หนึ่งครั้ง:

sudo serverinfo --setperfmode true

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

อ้างอิง


1
ขอขอบคุณ; ฉันใช้โยเซมิตีและเทคนิคการเปิดใช้ PlistDaemon ได้ผลสำหรับฉัน ฉันเชื่อว่ามันเป็นสิ่งเดียวที่ทำ สำหรับผู้ที่ต้องการนี้โปรดทราบว่าการรีบูตเป็นสิ่งจำเป็นเพื่อให้มีผลบังคับใช้
nc

1
@nc : เพิ่ม "ต้องรีบูตเพื่อให้มีผล" ในคำตอบของฉัน ฉันทำงานนานเกินไปในสนามดังนั้นฉันจึงไม่ทราบว่าบางคนไม่ทราบ ขอบคุณสำหรับการเตือน!
งุดชิงโปง - อะซึกะเคนจิ

2
ฉันใช้ 10.9.5 แต่/etc/launchd.confวิธีการแสดงผลเมื่อฉันวิ่งulimit -nเท่านั้น มีใครสามารถอัปเดตคำแนะนำได้หากสิ่งนี้สำคัญมาก
Sridhar Sarnobat

1
วิธีโยเซมิตี 10.10 ยังใช้งานได้ใน 10.11 El Capitan แม้ว่าฉันไม่สามารถตั้งค่าเป็น "ไม่ จำกัด " ดังนั้นฉันจึงต้องใช้ตัวเลขที่สูงมาก ๆ
antriver

1
@aolszowka: ดูสิ่งนี้สำหรับวิธีเพิ่มขีด จำกัด ดังกล่าวผ่านทาง/etc/sysctl.conf: superuser.com/questions/827984/…
Rob Johansen

11

ดูเหมือนว่าการสร้างไฟล์/etc/launchd.confและวางคำสั่งของคุณไว้ในนั้นควรจะทำเคล็ดลับ


หากไม่สามารถใช้งานได้คุณสามารถแก้ไขหรือสร้าง /etc/rc.localไฟล์และเพิ่มคำสั่งไว้ในนั้นเนื่องจากมีโอกาสน้อยที่ Apple จะลบการสนับสนุนสำหรับข้อ จำกัด ในบรรทัดคำสั่ง


แก้ไข 1 :
ฉันควรเริ่มต้นด้วยlaunchd หน้า man อ้างอิงไฟล์ต่อไปนี้:

  ~/Library/LaunchAgents         Per-user agents provided by the user.
  /Library/LaunchAgents          Per-user agents provided by the administrator.
  /Library/LaunchDaemons         System-wide daemons provided by the administrator.
  /System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
  /System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.

เดิมพันของฉันคือว่าตอนนี้คุณจะต้องใส่คำสั่งของคุณทั้งในหรือ~/Library/LaunchAgents คุณควรลองทั้งคู่ /Library/LaunchDaemons

แก้ไข 2 :
โปรดทราบว่า launchd ต้องการไฟล์ xml และไม่เพียง แต่สคริปต์ GUI ที่ได้รับ deisgn เพื่อช่วยในการงานดังกล่าวไม่ฟรีหนึ่งLingon อาจมีผลิตภัณฑ์ฟรีอื่น ๆ อยู่


เนื่องจากมีข้อมูลมากมายในโพสต์ของฉันคุณบอกได้ไหมว่าอันไหนดี?
Kiwy

ดูคำตอบของฉันด้านล่าง
Howard

ทั้ง/etc/launchd.confและ/etc/rc.localถูกละเว้นใน 10.10 และใหม่กว่าเนื่องจากใน 10.10 launchd ถูกออกแบบใหม่และ SystemStarter ถูกลบ
nisetama

@nise อย่าลังเลที่จะอัปเดตคำตอบของฉันหากมีสิ่งใหม่เกิดขึ้นใน Mac OS รุ่นล่าสุด
Kiwy

10

ฉันเพิ่งเพิ่มสองบรรทัดนี้ใน.bash_profile
งานของฉันเหมือนมีเสน่ห์

ulimit -n 1024
ulimit -u 1024

2
ไม่มีผลกับขีด จำกัด ของระบบ
not2savvy

1
อย่างไรก็ตามอาจไม่เป็นไรหากขีด จำกัด ของระบบของคุณสูงพอ ulimit -n -Hในการตรวจสอบสิ่งที่พวกเขาคุณก็สามารถทำงานได้ ใน macOS High Sierra มันเป็นการunlimitedเปลี่ยนข้อ จำกัด "อ่อน" ของผู้ใช้ใน.bash_profileการหลอกลวง
Joshua Pinter

9

ขีด จำกัด ของระบบ

การเปลี่ยนข้อ จำกัด ใน/etc/launchd.confหรือ/etc/rc.localไม่รองรับ macOS ล่าสุด ดู: ระบบและเทคโนโลยีเก่า

แต่คุณควรสร้างใหม่ตัวแทนการเปิดตัว

นี่คือตัวอย่างPlistBuddyคำสั่งที่ใช้คำสั่ง (ดู:) man PlistBuddy:

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist \
-c "add Label string com.launchd.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxfiles" \
-c "add ProgramArguments: string 10240" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

และคล้ายกับmaxprocขีด จำกัด :

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxproc.plist \
-c "add Label string com.launchd.maxproc" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxproc" \
-c "add ProgramArguments: string 2000" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

หากต้องการโหลดไฟล์ด้านบนให้รัน: sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist.

หมายเหตุ:

  • หากต้องการพิมพ์แฟ้มทำงาน: หรือcatPlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist
  • ในการตรวจสอบบันทึกสำหรับข้อผิดพลาดใด ๆ tail -f /var/log/system.logในระหว่างการโหลดทำงาน:
  • หากต้องการดูปัจจุบันวงเงินทำงาน:launchdlaunchctl limit
  • .plistไฟล์สามารถอยู่ในต่อผู้ใช้หรือโฟลเดอร์ตัวแทนทั้งระบบ ( LaunchAgents) ดู: man launchdและman launchd.plist, หรือนี่หรือคำตอบนั้นสำหรับรายละเอียดเพิ่มเติม

ขีด จำกัด เคอร์เนล

โปรดทราบว่าข้อ จำกัด ของระบบLaunchdด้านบนยังคงถูก จำกัด โดยเคอร์เนลดังนั้นคุณจึงไม่สามารถตั้งค่าให้สูงกว่าขีด จำกัด จริงที่ตั้งค่าไว้ในตัวแปรสถานะเคอร์เนล (ดู: man sysctlเพื่อขอความช่วยเหลือ)

หากต้องการดูข้อ จำกัด เคอร์เนลปัจจุบันให้รัน: sysctl -a | grep ^kern.max.

เพื่อเพิ่มmaxfilesขีด จำกัด sudo sysctl -w kern.maxfiles=20480ให้เรียกใช้:

เพื่อให้คงอยู่ให้ใช้วิธีการที่คล้ายกันเพื่อสร้าง.plistไฟล์เริ่มต้นเช่น

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.kern.maxfiles.plist \
-c "add Label string com.kern.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string sysctl" \
-c "add ProgramArguments: string -w" \
-c "add ProgramArguments: string kern.maxfiles=20480" \
-c "add RunAtLoad bool true"

ข้อ จำกัด ของเชลล์

สำหรับข้อ จำกัด ของเชลล์เพิ่มulimitคำสั่งที่เกี่ยวข้องลงใน~/.bashrcหรือ~/.bash_profileไฟล์เริ่มต้นสำหรับผู้ใช้รายบุคคลหรือ/etc/bashrcสำหรับผู้ใช้ทั้งหมด ดู: วิธีเพิ่มการตั้งค่า ulimit ของเชลล์บน Mac ได้อย่างไร?

บรรทัดที่แนะนำให้เพิ่ม:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.

1
ใช้ความระมัดระวังเป็นพิเศษmaxprocเนื่องจากค่าเริ่มต้นขีด จำกัด ของฮาร์ดเคอร์เนลบนพารามิเตอร์นั้นคือ 1064 ซึ่งหมายถึงการตั้งค่าเป็น 2000 หรือ "ไม่ จำกัด " จริง ๆ แล้วตั้งเป็น 1064 เท่านั้นโชคไม่ดีที่เคอร์เนลไม่บังคับใช้maxprocperuid < maxprocและการตั้งค่าที่คุณแนะนำ ระบบด้วยmaxprocperuid=2000และmaxproc=1064ที่เป็นอันตราย อ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ที่นี่
โปรเก่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.