Giới hạn tệp mở không hoạt động như trước trong OSX Yosemite [trùng lặp]


22

Tôi vừa cập nhật Mac OS X lên Yosemite và bây giờ một số ứng dụng không hoạt động (IBM DB2). Tôi biết rằng tôi cần đặt Open Files thành 65000, tuy nhiên lệnh không hoạt động.

Andress-MBP:~ root# ulimit -n 12288
Andress-MBP:~ root# ulimit -n 12289
-sh: ulimit: open files: cannot modify limit: Invalid argument

Tại sao điều này xảy ra và làm thế nào tôi có thể khắc phục vấn đề?

Câu trả lời:


25

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
    

7
Mong chờ một câu trả lời mới cho macOS 10.13! :)
NSTJ

1
Quá trình không làm việc cho tôi cho đến khi tôi khởi động lại. Cảm ơn! nó thực sự giúp ích rất nhiều
dùng2773086

Chuyên gia này cũng cho biết sửa đổi các tệp này là cách cập nhật giới hạn tệp mở này cho Sierra gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Devin G Rhode

1
Khởi động lại là cần thiết để các giới hạn hoạt động (ngay cả khi bước 4 không hiển thị các giá trị được cập nhật)
trinth

21

Tôi thấy bạn hỏi câu hỏi này trên tất cả.

Có một giới hạn kernel mà bạn phải xử lý, kern.maxfiles là giới hạn kernel và không thể vượt quá khi thiết lập ulimit.

Xem trang blog Krypted Tệp tối đa trong Mac OS X để biết mô tả về cách thao tác kern.maxifiles bằng sysctl.

Tôi chưa tải Yosemite trên máy Mac của mình. Các sysctl -w kern.maxfiles=65000hoạt động trên Mavericks, có cùng giới hạn kern.maxfiles = 12288 theo mặc định.

Tôi đã kiểm tra trên VM OS X 10.6.8 của mình và nó có cùng giới hạn đặt ra câu hỏi về cách thức hoạt động trước đây trước phiên bản OS X của bạn.

Có một chia sẻ slide ( DB2 cho Mac OS X Cài đặt và thiết lập DB2 cho Mac OS X ) hiển thị các giới hạn được đề xuất cho việc sử dụng DB2, xem phần Tăng thông số hệ thống trang 7.

Tăng tham số hệ thống

Mở /etc/sysctl.conf (hoặc tạo nó nếu nó chưa tồn tại) và chèn các cài đặt sau. Các cài đặt này tăng một số cài đặt cho giới hạn bộ nhớ và người dùng chung mà DB2 cần để hoạt động trên Mac.

Thêm những điều sau đây để /etc/sysctl.conf
kern.sysv.shmmax = 1073741824
kern.sysv.shmmin = 1
kern.sysv.shmmni = 4096
kern.sysv.shmseg = 32
kern.sysv.shmall = 1.179.648
kern.maxfilesperproc = 65536
kern.maxfiles = 65536

Có vẻ như bạn bị mất /etc/sysctl.conftập tin của bạn khi bạn nâng cấp.


Trên thực tế, tôi đã cài đặt DB2 từ lâu và nó đã hoạt động. Sau đó, tôi đã cập nhật lên Maverick vào năm ngoái mà không gặp vấn đề gì. Và hôm nay, tôi đã cập nhật lên Yosemite và vấn đề này xuất hiện. Tôi không thể bắt đầu cài đặt DB2.
AngocA

Một điều nữa là sysctl.conf của tôi giống hệt với tệp bạn đặt trong bài đăng của mình. Tôi đã tạo lần đầu tiên tôi cài đặt DB2 (một năm trước), nhưng tôi đã không chạm vào nó để di chuyển.
AngocA

Vấn đề là một số khoảng trống trong tệp đó: ibm.com/developerworks/community/forums/html/iêu
AngocA

1
Trailing space, ai có thể nghĩ. Apple được cho là có một số lập trình viên giỏi nhất thế giới.
dùng187561

@ user187561 sysctl(8)đến từ BSD.
Drew Stephens

12

Trong Mac OS 10.10, có vẻ như cài đặt ulimit không thể vượt quá cài đặt giới hạn launchctl.

Vì vậy, trước tiên bạn nên chạy maxfiles giới hạn launchctl trong terminal để có được cài đặt hiện tại:

launchctl limit maxfiles
maxfiles    256            unlimited 

Vì vậy, trong trường hợp của tôi, giới hạn mềm là 256, giới hạn cứng là không giới hạn. Và sau đó nếu tôi muốn đặt giới hạn mềm thành 512:

sudo launchctl limit maxfiles 512 unlimited

Bạn có thể tìm thấy cách sử dụng chi tiết của launchctl cho các giới hạn cài đặt tại đây: https://developer.apple.com/l Library / mac / documentation / Darwin / Reference / Manager / man1 / launchlctl.1.html


'maxfiles giới hạn tối đa 512 không giới hạn' xuất hiện để đặt giới hạn (mềm, cứng) của tôi thành (512,10240) trên Yosemite 10.10.5 vào ngày 2015-09-30
Dave X

2
"maxfiles giới hạn launchctl không giới hạn không giới hạn; maxfiles giới hạn launchctl" chỉ ra rằng 10240 là giới hạn lớn nhất có thể được nhập. Sử dụng số lớn hơn âm thầm thất bại, để lại các thiết lập như trước.
Dave X
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.