OS X Yosemite - Mở quá nhiều tệp


18

Gần đây tôi đã nâng cấp từ Mavericks lên Yosemite .... đau đầu xảy ra

Tôi khá chắc chắn rằng vấn đề của tôi nằm ở số lượng tệp tôi có thể mở - nhưng tôi không chắc cách giải quyết . Tôi cũng khá chắc chắn rằng tôi đã đọc mọi bài viết / mẹo về cách tạo /etc/sysctl.conftệp và /etc/launchd.conftệp

Để rõ ràng, đây là những gì cả hai hiện tại trông giống như nb (Tôi thậm chí không chắc đây có phải là những lệnh phù hợp để đưa vào chúng nữa hay không - tôi đã thử mọi thứ và mọi sự kết hợp. Ví dụ: giá trị cao hơn, giá trị thấp hơn , loại bỏ các lệnh, thêm các lệnh)

/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

Tôi cũng đã thử tăng giá trị ulimit của mình - cả trên toàn cầu và cục bộ cho phiên hiện tại của tôi ... không có 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 - đây là lúc cơn đau đầu của tôi bắt đầu ... DB của tôi (percona-server 5.6.21-69.0 được cài đặt qua homebrew) bắt đầu nghẹt thở và chết, và trong mysql-error.log nó đã được lấp đầy với lỗi 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

Đây là nơi ban đầu tôi bắt đầu thử và giải quyết vấn đề đó bằng cách "nâng cấp" ulimit, maxfiles, maxproc của mình, v.v ...

Cuối cùng - thất vọng, tôi tiếp tục và sẽ quay lại vấn đề đó sau. Vì vậy, sau đó tôi đã cố gắng sudo gem install nokogiri lặp đi lặp lại nó sẽ thất bại và phát sinh ra lỗi tương tự này (rất nhiều lần lặp lại về trình xây dựng.rb không xây dựng tiện ích mở rộng riêng cho đá quý - tiếp theo là một loạt các stacktraces Logs Gist

lỗi cài đặt nokogiri lỗi cài đặt nokogiri

Tôi đã thử / googled một loạt các phương pháp khác nhau để giải quyết vấn đề này (ví dụ: cờ bổ sung, v.v.). Thật đáng kinh ngạc - và khi tôi bắt đầu nghĩ vấn đề này gắn liền với # tệp / quy trình mở là khi tôi kiểm tra toptrong khi cài đặt đá quý .... Tôi đã rất ngạc nhiên khi thấy những gì tôi tìm thấy

hàng đầu trong gem install nokogiri đá quý sudo cài đặt nokogiri

Có vẻ như quá trình của tôi tiếp tục diễn ra, điều này có ý nghĩa đối với MỘT dòng này trong ảnh trước của tôi (xem "ảnh cài đặt lỗi nokogiri")

sh: fork: Resource temporarily unavailable

Vì vậy, tôi không có ý tưởng nào, nhưng tôi không thực sự chắc chắn làm thế nào để gỡ lỗi # của các tệp nữa?

CẬP NHẬT

Chà, tôi đã quản lý để cài đặt nokogiri. Thật không may, tôi không chắc chắn chính xác những gì đã sửa nó b / c Tôi đã thử rất nhiều thứ. Nhưng tôi nghĩ rằng nó đã phải đối phó với việc cài đặt lại ruby. Tuy nhiên, tôi vẫn gặp vấn đề tương tự khi DB của tôi phàn nàn về quá nhiều tệp được mở khi tôi sử dụng bất kỳ loại cơ sở dữ liệu nào không nhỏ.


Hừm. Có lẽ không nên sinh sản nhiều như vậy? Có lẽ cũng đáng để gây ra một lỗi với các nhà phát triển của viên ngọc đó.
slhck

Câu trả lời:


16

Sửa đổi /etc/launchd.confmỗi rất nhiều truy vấn google và các đề xuất SO dường như không hoạt động đối với tôi trong Yosemite (10.10). Điều gì đã kết thúc hoạt động, sau nhiều kết hợp thay đổi / khởi động lại / kiểm tra, đã sửa đổi (hoặc tạo nếu nó không tồn tại) /etc/sysctl.conftệp.

Đây là những gì tôi đã phải đưa vào để làm cho nó hoạt động

kern.maxfiles=65536
kern.maxfilesperproc=65536

Tôi không chắc có kern.maxfilescần phải ở đó không, nhưng khi tôi có nó ở đó thì tôi vẫn gặp vấn đề tương tự, khi tôi thêm kern.maxfilesperprocmọi thứ bắt đầu hoạt động.


Tôi thấy rằng một khởi động lại là cần thiết để các biến này có hiệu lực (như mong đợi). Bạn có thể xác nhận rằng các giá trị đã thay đổi bằng cách thực hiện sysctl -a | grep kern.maxfiles.
Blake Frederick

8

Để điều chỉnh giới hạn tệp mở trên cơ sở toàn hệ thống trong Mac OS X Yosemite, bạn phải tạo hai tệp cấu hình. Đầu tiên là tệp danh sách thuộc tính (còn gọi là plist) /Library/LaunchDaemons/limit.maxfiles.plistchứa cấu hình XML sau:

<?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>

Điều này sẽ đặt giới hạn tệp mở thành 65536. Tệp cấu hình plist thứ hai nên được lưu trữ /Library/LaunchDaemons/limit.maxproc.plistvới các nội dung sau:

<?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>

Cả hai tập tin plist phải được sở hữu bởi root:wheelvà có quyền -rw-r--r--. Quyền này phải được đặt theo mặc định, nhưng bạn có thể đảm bảo rằng chúng được đặt đúng chỗ bằng cách chạy sudo chmod 644 <filename>. Mặc dù các bước được giải thích ở trên sẽ khiến giới hạn tệp mở toàn hệ thống được đặt chính xác khi khởi động lại, bạn có thể áp dụng chúng theo cách thủ công bằng cách chạy launchctl limit.

Trong Ngoài việc thiết lập những giới hạn ở cấp hệ thống, chúng tôi khuyên bạn nên thiết ở cấp độ phiên cũng bằng cách thêm các dòng sau vào bashrc, bashprofilehoặc tập tin tương tự:

ulimit -n 65536
ulimit -u 2048

Giống như các tệp plist, bashrc hoặc tệp tương tự của bạn phải có -rw-r--r--quyền. Tại thời điểm này, bạn có thể khởi động lại máy tính của mình và nhập ulimit -n vào thiết bị đầu cuối của bạn. Nếu hệ thống của bạn được cấu hình đúng, bạn sẽ thấy maxfiles đã được đặt thành 65536.

Có nguồn gốc từ: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/


1
"maxfiles giới hạn launchctl không giới hạn không giới hạn; maxfiles giới hạn launchctl" báo cáo rằng mức tối đa là 10240 trên Yosemite 10.10.5 của tôi vào ngày 2015-09-30 và thử nghiệm xung quanh chúng dường như cho thấy rằng nếu bạn sử dụng số lượng rõ ràng lớn hơn, nó sẽ là mặc kệ.
Dave X

5

Mặc định trên Yosemite dường như là 12K và 10K:

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

Chỉ thiết lập kern.maxfilestrong /etc/sysctl.confdường như đã giải quyết vấn đề của tôi. /etc/sysctl.conftập tin:

kern.maxfiles=24576

chính xác các giá trị tương tự cho sierra
Devin G Rhode

Tuy nhiên launchctl limit maxfilesđã cho tôi điều này:maxfiles 256 unlimited
Devin G Rhode
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.