Làm thế nào để kiên trì kiểm soát mức tiêu thụ tài nguyên hệ thống tối đa trên Mac?


85

Trước Mavericks, tôi có thể sử dụng /etc/launchd.conftệp để thay đổi mức tiêu thụ tài nguyên hệ thống tối đa, ví dụ:

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

Nó không còn hoạt động trong Mavericks.

Cách chính xác để làm điều đó trong phiên bản OS X gần đây là gì?


Giới hạn của bạn cao hơn mức tối đa cho OS X. maxfiles đứng đầu ở mức 10240 và giới hạn maxproc là 1064. Nếu câu trả lời được phê duyệt đã sửa chữa các giới hạn tôi sẽ đưa ra ý kiến ​​đó .. nhưng nó đã sai ở đó và không bị ảnh hưởng trong một năm tốt + ngay bây giờ ..
Joey T

@atmosx: Nó nên /etc/sysctl.conf, không phải /etc/sysctrl.conf.
Siu Ching Pong -Asuka Kenji-

1
@JoeyT: Thực tế bạn có thể đặt nó ở giới hạn cao hơn! Nhưng trước tiên bạn phải mua "Máy chủ OS X" từ "Cửa hàng ứng dụng" nếu bạn dùng Mac OS X 10.8 (Mountain Lion) hoặc 10.9 (Mavericks). (Có, bạn phải trả 19,99 USD để thay đổi cài đặt!) Tóm lại, bạn phải chạy sudo serverinfo --setperfmode truemột lần để đưa máy vào "Chế độ hiệu suất máy chủ". Sau đó, bạn có "mức tối đa cao hơn", tùy thuộc vào cấu hình máy của bạn. Vui lòng xem bài viết của tôi tại các cuộc thảo luận.apple.com / thread / 5166397 để biết chi tiết. Đối với 10.10 (Yosemite), chế độ được bật theo mặc định (ít nhất là trên máy của tôi!). Xem câu trả lời của tôi dưới đây.
Siu Ching Pong -Asuka Kenji-

Câu trả lời:


87

Giới hạn phiên Shell

Các giới hạn được đặt qua ulimitchỉ ảnh hưởng đến các quy trình được tạo bởi phiên shell hiện tại.

  • "Giới hạn mềm" là giới hạn thực tế được sử dụng. Nó có thể được đặt, miễn là nó không lớn hơn "giới hạn cứng".
  • "Giới hạn cứng" cũng có thể được đặt, nhưng chỉ ở một giá trị nhỏ hơn giá trị hiện tại và chỉ ở một giá trị không nhỏ hơn "giới hạn mềm".
  • "Giới hạn cứng", cũng như giới hạn toàn hệ thống, có thể được tăng lên bởi root(quản trị viên) bằng cách thực hiện các lệnh cấu hình hệ thống hoặc sửa đổi các tệp cấu hình hệ thống.

Sau khi bạn chấm dứt phiên vỏ (bằng Ctrl+ D, exithoặc đóng Terminal.appcửa sổ, vv), các thiết lập đã mất hết. Nếu bạn muốn cài đặt tương tự trong phiên shell tiếp theo, hãy thêm cài đặt vào tập lệnh khởi động shell.

LƯU Ý: Nếu bạn đang sử dụng bash, thì nó nên ~/.bash_proilehoặc ~/.bash_login. Nếu bạn đang sử dụng các shell khác, nó có thể nên được ~/.profile.

Giới hạn hệ thống (Yêu cầu khởi động lại để có hiệu lực)

Đối với 10.9 (Mavericks), 10.10 (Yosemite), 10.11 (El Capitan) và 10.12 (Sierra):

Bạn phải tạo một tệp tại /Library/LaunchDaemons/limit.maxfiles.plist(chủ sở hữu : root:wheel, mode 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>

Bạn nên thay đổi số lượng theo nhu cầu của bạn. Chúng là "giới hạn mềm" ( 262144) và "giới hạn cứng" ( 524288) tương ứng. Để biết thêm thông tin, tham khảo trang hướng dẫn bằng cách chạy man launchd.plist.

Cho 10.8 (Sư tử núi):

Bạn có thể thêm các dòng sau vào /etc/sysctl.conf(chủ sở hữu : root:wheel, mode 0644:):

kern.maxfiles=524288
kern.maxfilesperproc=262144

Bạn nên thay đổi số lượng theo nhu cầu của bạn. Chúng lần lượt là "giới hạn toàn hệ thống" ( kern.maxfiles) và "giới hạn trên mỗi quy trình" ( kern.maxfilesperproc). Để biết thêm cài đặt, tham khảo trang hướng dẫn bằng cách chạy man sysctlhoặc đọc mã nguồn tại /usr/include/sys/sysctl.h.

Đối với Mac OS X cũ hơn (tôi đoán nó hoạt động vào ngày 10.7 (Lion) hoặc trước đó):

Bạn có thể thêm dòng sau vào /etc/launchd.conf(chủ sở hữu : root:wheel, mode 0644:):

limit maxfiles 262144 524288

Bạn nên thay đổi số lượng theo nhu cầu của bạn. Chúng là "giới hạn mềm" ( 262144) và "giới hạn cứng" ( 524288) tương ứng.

Nếu hệ thống không cho phép bạn đặt giới hạn trên một giá trị nhất định ...

Hệ thống không cho phép bạn đặt giá trị cao hơn "tối đa cứng" (do Apple đề xuất). Để tăng "tối đa cứng" này, bạn phải mua "Máy chủ OS X" từ "Cửa hàng ứng dụng", sau đó bạn phải thực hiện lệnh sau một lần:

sudo serverinfo --setperfmode true

Điều này kích hoạt "chế độ hiệu suất máy chủ" trên máy của bạn. Sau đó, bạn có thể đặt mức tối đa theo cấu hình của máy (xem phần này) . Tôi đã thử điều này trước đây (trên Mountain và Mavericks) và nó hoạt động! Xin vui lòng xem bài viết của tôi ( ở đây ) để biết thêm thông tin.

Người giới thiệu


1
Cảm ơn bạn; Tôi đang sử dụng Yosemite và kỹ thuật plist LaunchDaemon hoạt động với tôi. Tôi tin rằng đó là người duy nhất làm điều đó. Đối với bất kỳ ai cần điều này, xin lưu ý rằng cần phải khởi động lại để nó có hiệu lực .
nc.

1
@nc. : Đã thêm "Yêu cầu khởi động lại để có hiệu lực" vào câu trả lời của tôi. Tôi đã làm việc quá lâu trong lĩnh vực này, vì vậy tôi không biết rằng một số người không biết điều đó. Cảm ơn vì đã nhắc nhở!
Siu Ching Pong -Asuka Kenji-

2
Tôi đang sử dụng 10.9.5 nhưng chỉ có /etc/launchd.confcách tiếp cận cho thấy bất kỳ hiệu ứng nào khi tôi chạy ulimit -n. Ai đó có thể cập nhật các hướng dẫn nếu điều này là quan trọng?
Sridhar Sarnobat

1
Phương pháp Yosemite 10.10 cũng hoạt động trong 10.11 El Capitan. Mặc dù tôi không thể đặt nó thành "không giới hạn" vì vậy tôi phải sử dụng một số thực sự cao
antriver

1
@aolszowka: Xem phần này để biết cách tăng giới hạn đó qua /etc/sysctl.conf: superuser.com/questions/827984/ mẹo
Rob Johansen

11

Có vẻ như việc tạo tập tin /etc/launchd.confvà đặt lệnh của bạn vào bên trong nó sẽ thực hiện thủ thuật.


Nếu nó không hoạt động, có lẽ bạn có thể chỉnh sửa hoặc tạo /etc/rc.localtệp và thêm lệnh của bạn vào bên trong vì rất ít khả năng Apple sẽ xóa hỗ trợ cho giới hạn trên dòng lệnh.


Chỉnh sửa 1 :
Tôi nên bắt đầu với điều đó, launchd trang man tham khảo các tệp sau:

  ~/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.

Đặt cược của tôi là bây giờ bạn cần phải đưa lệnh của bạn vào ~/Library/LaunchAgentshoặc vào /Library/LaunchDaemons.
Bạn nên thử cả hai.

Chỉnh sửa 2 :
Cũng lưu ý rằng launchd cần tệp xml và không chỉ các tập lệnh. một gui đã được deisgn giúp đỡ trong nhiệm vụ như vậy, một người không miễn phíLingon . Có thể các sản phẩm miễn phí khác tồn tại.


vì có rất nhiều thông tin trong bài viết của tôi, bạn có thể nói đó là thông tin tốt không?
Kiwy

xem câu trả lời của tôi dưới đây
Howard

Cả hai /etc/launchd.conf/etc/rc.localđược bỏ qua trong 10.10 và sau đó, vì trong 10.10 launchd đã được thiết kế lại và SystemStarter đã bị xóa.
nisetama

@nise vui lòng cập nhật câu trả lời của tôi nếu có cái gì đó mới xuất hiện trong phiên bản Mac OS gần đây
Kiwy

10

Tôi chỉ thêm hai dòng này vào .bash_profile
tác phẩm của mình như một nét duyên dáng

ulimit -n 1024
ulimit -u 1024

2
Không ảnh hưởng đến giới hạn hệ thống.
not2savvy

1
Tuy nhiên, điều đó có thể ổn nếu giới hạn hệ thống của bạn đủ cao. Để kiểm tra xem chúng là gì, bạn chỉ cần chạy ulimit -n -H. Trên macOS High Sierra, nó đã unlimitedthay đổi giới hạn "mềm" của người dùng trong .bash_profilethủ thuật này.
Joshua Pinter

9

Giới hạn hệ thống

Thay đổi các giới hạn trong /etc/launchd.confhoặc /etc/rc.localkhông còn được hỗ trợ cho macOS gần đây. Xem: Hệ thống và công nghệ cũ .

Thay vào đó, bạn nên tạo một tác nhân khởi động mới .

Dưới đây là ví dụ PlistBuddylệnh sử dụng lệnh (xem 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"

Và tương tự cho maxprocgiới hạn:

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"

Để tải các tập tin trên, hãy chạy : sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist.

Ghi chú:

  • Để in tệp, chạy: cathoặc PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist.
  • Để kiểm tra nhật ký cho bất kỳ lỗi nào trong khi tải, hãy chạy : tail -f /var/log/system.log.
  • Để xem các launchdgiới hạn hiện tại , hãy chạy : launchctl limit.
  • Các .plisttập tin có thể được đặt trong mỗi người dùng hoặc toàn hệ thống thư mục đại lý ( LaunchAgents). Xem: man launchdman launchd.plist, hoặc này hoặc rằng câu trả lời để biết thêm chi tiết.

Giới hạn hạt nhân

Xin lưu ý rằng các giới hạn hệ thống Launchd ở trên vẫn bị giới hạn bởi kernel, vì vậy bạn không thể đặt chúng cao hơn giới hạn thực tế được đặt trong các biến trạng thái kernel (xem: man sysctlđể được trợ giúp).

Để xem giới hạn kernel hiện tại, hãy chạy : sysctl -a | grep ^kern.max.

Để tăng maxfilesgiới hạn, hãy chạy : sudo sysctl -w kern.maxfiles=20480.

Để duy trì chúng, hãy sử dụng phương pháp tương tự để tạo .plisttệp khởi động , ví dụ:

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"

Giới hạn vỏ

Đối với giới hạn shell, thêm ulimitlệnh có liên quan vào ~/.bashrchoặc ~/.bash_profiletệp khởi động cho từng người dùng hoặc /etc/bashrccho tất cả người dùng. Xem: Làm thế nào để thêm cài đặt ulimit shell liên tục trên Mac?

Các dòng gợi ý để thêm:

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

1
Đặc biệt cẩn thận maxprocvì theo mặc định, giới hạn kernel cứng trên tham số đó là 1064, nghĩa là đặt nó thành 2000 hoặc "không giới hạn" thực sự chỉ đặt nó thành 1064. Thật không may, kernel không thực thi điều đó maxprocperuid < maxprocvà các cài đặt bạn đề xuất sẽ rời khỏi hệ thống với maxprocperuid=2000maxproc=1064đó là nguy hiểm. Đọc thêm về nó ở đây .
Old Pro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.