Tăng số lượng mô tả tệp mở tối đa trong Snow Leopard?


101

Tôi đang cố gắng làm một cái gì đó đòi hỏi một số lượng lớn các mô tả tập tin

sudo ulimit -n 12288cao như Snow Leopard muốn đi; ngoài kết quả này trong

/ usr / bin / ulimit: dòng 4: ulimit: mở tệp: không thể sửa đổi giới hạn: Đối số không hợp lệ.

Tôi muốn tăng số lượng cao hơn nhiều, nói 100000. Có thể không?


4
Câu trả lời của câu hỏi này không còn hoạt động trong OSX Mavericks.
Howard

2
Chạy echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confvà khởi động lại hoạt động cho tôi trong Mavericks.
Lri

Câu trả lời:


95

Việc sử dụng ulimitlệnh chỉ thay đổi các giới hạn tài nguyên cho trình bao hiện tại và các phần tử con của nó và sudo ulimittạo một trình bao gốc, điều chỉnh các giới hạn của nó và sau đó thoát ra (do đó, theo như tôi có thể thấy, không có tác dụng thực sự).
Để vượt quá 12288, bạn cần điều chỉnh các tham số kern.maxfilesvà hạt nhân kern.maxfilesperproc, và (ít nhất là theo mục blog này , đó là một bản tóm tắt của cuộc thảo luận này ) giới hạn khởi động. Bạn có thể sử dụng launchctl limitđể điều chỉnh tất cả những điều này cùng một lúc:

sudo launchctl limit maxfiles 1000000 1000000

Để làm điều này vĩnh viễn (nghĩa là không thiết lập lại khi bạn khởi động lại), hãy tạo /etc/launchd.confcó chứa:

limit maxfiles 1000000 1000000

Sau đó, bạn có thể sử dụng ulimit(nhưng không có sudo) để điều chỉnh giới hạn quy trình của mình.

Nếu điều này không làm điều đó, bạn có thể đang chạy vào giới hạn kích thước trong kernel. Nếu mô hình của bạn hỗ trợ nó , khởi động kernel ở chế độ 64 bit có thể giúp ích.


1
sudo launchctl limit maxfiles 1000000 unlimitedKhông giới hạn cứng hay mềm cho "maxfiles" có thể là không giới hạn. Vui lòng sử dụng một tham số số cho cả hai.
Thomas Hunter

2
Hãy cẩn thận khi thêm dòng đó vào launchd.conf. Tôi nghĩ rằng nếu số lượng quá nhỏ, nó có thể làm cho máy tính của bạn không thể sử dụng được. Ví dụ, tôi đã sử dụng limit maxfiles 1024 1024và tôi đã rất khó khăn để thay đổi nó trở lại.
Shawn

1
Than ôi: "Tệp /etc/launchd.conf không còn được tư vấn cho các tiểu ban để chạy trong thời gian khởi động sớm; chức năng này đã bị xóa để xem xét bảo mật."
Alice Purcell

Nó không hoạt động, số fd của tôi không thể vượt quá 6k ngay cả khi tôi đặt ulimit -Sn 10240 thành công.
Jian Weihang

Số fd @JianWeihang là mỗi quy trình, vì vậy tôi giả sử các quy trình khác đã xảy ra để mở 4000 tệp. Bạn có tình cờ chạy Chrome không? ;)
Trejkaz

41

Sau đây sẽ giải quyết hầu hết các giải pháp (và được liệt kê theo thứ tự phân cấp của chúng):

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

Ghi chú:

  1. Bạn sẽ cần phải khởi động lại để những thay đổi này có hiệu lực.
  2. AFAIK bạn không còn có thể đặt giới hạn thành 'không giới hạn' trong OS X
  3. maxfiles launchctl được giới hạn bởi maxfiles sysctl, và do đó không thể vượt quá chúng
  4. sysctl dường như kế thừa kern.maxfilesperproc từ các maxfiles launchctl
  5. ulimit dường như thừa hưởng giá trị 'tệp mở' từ launchctl theo mặc định
  6. bạn có thể đặt một ulimit tùy chỉnh trong / etc / profile hoặc ~ / .profile; trong khi điều này không bắt buộc tôi đã cung cấp một ví dụ
  7. Hãy thận trọng khi đặt bất kỳ giá trị nào trong số này thành một số rất cao khi so sánh với mặc định của chúng - các tính năng tồn tại tính ổn định / bảo mật. Tôi đã lấy những số ví dụ này mà tôi tin là hợp lý, được viết trên các trang web khác.

3
Than ôi: "Tệp /etc/launchd.conf không còn được tư vấn cho các tiểu ban để chạy trong thời gian khởi động sớm; chức năng này đã bị xóa để xem xét bảo mật."
Alice Purcell

34

Có vẻ như có một phương pháp hoàn toàn khác để thay đổi giới hạn tệp đang mở cho từng phiên bản OS X!

Đối với OS X Sierra (10.12.X), bạn cần:

1. Trong việc Library/LaunchDaemonstạo một tệp có tên limit.maxfiles.plistvà dán các mục sau vào (thoải mái thay đổi hai số (lần lượt là giới hạn mềm và cứng):

<?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. Thay đổi chủ sở hữu tệp mới của bạn:

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

3. Tải các cài đặt mới này:

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

4. Cuối cùng, kiểm tra xem các giới hạn có đúng không:

launchctl limit maxfiles

2
Câu trả lời này là rất tốt, và tôi thấy một số nền tảng để thêm vào nó ở đây, @ninjaPixel: blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan
Dean Radcliffe

20

Có vẻ như OS X Lion sẽ không cho phép "không giới hạn" dưới dạng giá trị:

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

Cung cấp các giá trị số cho cả giới hạn mềm và giới hạn cứng thực hiện công việc:

% sudo launchctl limit maxfiles 4096 8192

3
Nếu một trong các giá trị là không giới hạn , sử dụng -1làm kết quả giá trị 12288. Có thể sử dụng các giá trị số lớn hơn, ví dụ sudo launchctl limit maxfiles 15000 150000. Tuy nhiên, tôi không chắc chắn các cài đặt này có hiệu lực.
Daniel Beck

8

Trên Mavericks đơn giản. Là người dùng thông thường:

ulimit -n 8192

Bạn có thể kiểm tra các cài đặt được cập nhật thông qua

ulimit -a

Trên máy của tôi:

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
Xem xét sửa đổi giải pháp của bạn. Bạn đang đặt ulimit là 1024, sau đó hiển thị các mô tả tệp đầu ra là 8192 (nên là 1024). Cách tiếp cận của bạn cũng là thử thách mà không cần sudo, hãy thử thay đổi nó một vài lần cho chính bạn.
y3sh

1
sudo không nên được sử dụng ở đây nhưng câu trả lời này là không chính xác. Người dùng Mavericks nên sử dụng echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confvà sau đó khởi động lại máy của họ
Kyle Chadha

3

Trên OS X 10.13.6, nó hoạt động với tôi:

$ 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

Một số giới hạn không thể thay đổi bởi ulimitvì chúng chỉ áp dụng cho trình bao hiện tại, do đó launchctllệnh nên được sử dụng để thay đổi các giới hạn trên toàn cầu, ví dụ:

sudo launchctl limit maxfiles 100000 unlimited

Xin lưu ý rằng việc áp dụng các giới hạn này trong /etc/launchd.conf(như được đề xuất trong các câu trả lời khác) không còn được hỗ trợ trong các bản phát hành macOS gần đây. Mặc dù vẫn có thể sử dụng launchd.plist(xem man launchd.plist:) như plistcác tệp cấu hình trên mỗi người dùng hoặc toàn hệ thống như được đề xuất ở đây , ở đóở đó .


Để duy trì các giới hạn này, bạn có thể sử dụng /etc/sysctl.conftệp và thêm ví dụ:

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

Để thay đổi có hiệu lực, nó yêu cầu khởi động lại.

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

Xem thêm: Làm thế nào để duy trì cài đặt ulimit trong macOS?

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.