OS X Yosemite - Terlalu banyak file yang terbuka

18

Saya baru-baru ini ditingkatkan dari Mavericks ke Yosemite .... sakit kepala terjadi

Saya cukup yakin masalah saya terletak pada jumlah file yang dapat saya buka - tetapi saya tidak yakin bagaimana menyelesaikannya . Saya juga cukup yakin saya sudah membaca setiap artikel / tip tentang membuat /etc/sysctl.conffile dan /etc/launchd.conffile

Demi kejelasan ini adalah apa yang mereka berdua terlihat seperti nb (Saya bahkan tidak yakin apakah ini adalah perintah yang tepat untuk dimasukkan ke dalamnya lagi - Saya sudah mencoba hampir semua dan semua kombinasi. Yaitu: nilai yang lebih tinggi, nilai yang lebih rendah , menghapus perintah, menambahkan perintah)

/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

Saya juga mencoba meningkatkan nilai ulimit saya - baik secara global maupun lokal untuk sesi saya saat ini ... tanpa 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 - disinilah sakit kepala saya awalnya mulai ... DB saya (percona-server 5.6.21-69.0 diinstal melalui homebrew) mulai tersedak dan sekarat, dan di mysql-error.log itu diisi dengan kesalahan 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

Di sinilah saya awalnya mulai mencoba dan memecahkan masalah itu dengan "meningkatkan" ulimit, maxfiles, maxproc, dll ... saya ...

Akhirnya - frustrasi, saya pindah dan akan kembali ke masalah itu nanti. Jadi saya mencoba sudo gem install nokogiri berulang kali akan gagal dan meludahkan kesalahan yang sama ini (banyak pengulangan tentang pembangun. Rb gagal membangun ekstensi asli permata - diikuti oleh sekelompok stacktraces berulang Log Log Gist

Kesalahan Instalasi nokogiri instal kesalahan nokogiri

Saya sudah mencoba / meng-Google-Google sekelompok pendekatan yang berbeda untuk menyelesaikan masalah ini (yaitu: bendera tambahan, dll.). Apa yang luar biasa - dan ketika saya mulai berpikir masalah ini terkait dengan # file / proses terbuka adalah ketika saya memeriksa topketika permata sedang menginstal .... Saya cukup terkejut melihat apa yang saya temukan

atas selama gem install nokogiri sudo permata instal nokogiri

Sepertinya proses saya terus forking, yang kemudian masuk akal untuk baris SATU ini di gambar saya sebelumnya (lihat "nokogiri instal kesalahan gambar")

sh: fork: Resource temporarily unavailable

Jadi saya agak kehabisan ide, tapi saya tidak begitu yakin bagaimana cara men-debug # file lagi?

MEMPERBARUI

Yah, saya berhasil menginstal nokogiri. Sayangnya, saya tidak yakin apa yang memperbaikinya. Saya sudah mencoba banyak hal. Tapi saya pikir itu harus berurusan dengan menginstal ulang ruby. Namun, saya masih mendapatkan masalah yang sama dengan DB saya mengeluh tentang terlalu banyak file yang dibuka ketika saya menggunakan segala jenis database yang tidak kecil.

veilig
sumber
Hm Mungkin tidak seharusnya memijah begitu banyak? Mungkin juga layak mengangkat bug dengan devs permata itu.
slhck

Jawaban:

16

Memodifikasi /etc/launchd.confper banyak permintaan google dan saran SO sepertinya tidak bekerja untuk saya di Yosemite (10.10). Apa yang akhirnya berhasil, setelah banyak perubahan / reboot / kombinasi pengujian, memodifikasi (atau membuat jika tidak ada) /etc/sysctl.conffile.

Inilah yang harus saya masukkan untuk membuatnya bekerja

kern.maxfiles=65536
kern.maxfilesperproc=65536

Saya tidak yakin apakah kern.maxfilesperlu ada di sana, tetapi ketika saya memilikinya di sana dengan sendirinya saya masih memiliki masalah yang sama, ketika saya menambahkan kern.maxfilesperprocsemuanya mulai bekerja.

veilig
sumber
Saya menemukan bahwa restart diperlukan untuk variabel-variabel ini untuk berlaku (seperti yang diharapkan). Anda dapat mengonfirmasi bahwa nilai telah berubah dengan melakukan sysctl -a | grep kern.maxfiles.
Blake Frederick
8

Untuk menyesuaikan batas file terbuka secara sistem di Mac OS X Yosemite, Anda harus membuat dua file konfigurasi. Yang pertama adalah file daftar properti (alias plist) /Library/LaunchDaemons/limit.maxfiles.plistyang berisi konfigurasi XML berikut:

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

Ini akan mengatur batas file terbuka menjadi 65536. File konfigurasi plist kedua harus disimpan /Library/LaunchDaemons/limit.maxproc.plistdengan konten berikut:

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

Kedua file plist harus dimiliki oleh root:wheeldan memiliki izin -rw-r--r--. Izin ini harus ada di tempat secara default, tetapi Anda dapat memastikan bahwa mereka ada dengan menjalankan sudo chmod 644 <filename>. Meskipun langkah-langkah yang dijelaskan di atas akan menyebabkan batas file terbuka di seluruh sistem ditetapkan dengan benar saat dimulai ulang, Anda dapat menerapkannya secara manual dengan menjalankan launchctl limit.

Selain menetapkan batas-batas ini pada tingkat sistem, kami sarankan pengaturan di tingkat sesi juga dengan menambahkan baris berikut ke Anda bashrc, bashprofileatau file yang analog:

ulimit -n 65536
ulimit -u 2048

Seperti file plist, bashrc Anda atau file serupa harus memiliki -rw-r--r--izin. Pada titik ini, Anda dapat me-restart komputer Anda dan memasukkan ulimit -n ke terminal Anda. Jika sistem Anda dikonfigurasikan dengan benar, Anda akan melihat bahwa maxfiles telah diatur ke 65536.

Bersumber dari: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/

Jedateach
sumber
1
"launchctl limit maxfiles unlimited unlimited; launchctl limit maxfiles" melaporkan bahwa maksimum adalah 10240 pada Yosemite 10.10.5 saya pada 2015-09-30, dan bereksperimen dengan mereka tampaknya menunjukkan bahwa jika Anda menggunakan nomor eksplisit yang lebih besar, itu akan menjadi diabaikan.
Dave X
5

Default pada Yosemite tampaknya 12K dan 10K:

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

Hanya pengaturan kern.maxfilesdi /etc/sysctl.conftampaknya telah memecahkan masalah saya. /etc/sysctl.confmengajukan:

kern.maxfiles=24576
Michel
sumber
nilai yang sama persis untuk sierra
Devin G Rhode
Namun launchctl limit maxfilesmemberi saya ini:maxfiles 256 unlimited
Devin G Rhode