Apakah Anda ingin menjelaskan lebih lanjut tentang kapan ini terjadi? Dalam situasi apa?
slhck
1
@ Slhck - Saya memiliki masalah yang sama. Keadaan pada dasarnya "secara acak." Saya seorang pengembang, jadi saya menggunakan Mac saya cukup banyak: menjalankan satu atau lebih database, server web, alat pengujian, satu atau lebih browser, dan pemutar musik sekaligus. Google Chrome tampaknya menjadi salah satu program yang memiliki banyak file terbuka.
Nathan Long
Sebenarnya, "kegunaan saya" bukan masalah; pengaturan saya untuk jumlah maksimum file terbuka untuk kernal dan per-proses jauh lebih rendah dari yang seharusnya.
Nathan Long
2
Jika Anda membaca komentar Nathan dan bertanya-tanya mengapa dia tidak memasukkan perincian tentang defaultnya, itu karena ia menguraikan semuanya dalam jawabannya, di bawah. (Jawaban yang bagus! :)
Olie
Saya berada dalam kondisi penggunaan yang sama dengan Nathan Long, dan menemukan me-restart Apache adalah satu-satunya langkah yang "memecahkan" masalah. Saya menerapkan semua kenaikan batas di bawah ini tetapi mereka tidak segera membantu. Saya menjalankan tes baris perintah phpUnit> server selenium> firefox> apache> php> mysql semua di macbook yang sama. Dulu bekerja dengan baik sampai saya meng-upgrade ke maverick. Kesalahan yang saya dapatkan adalah di webapp yang sedang diuji, yaitu php / apache kehabisan file, jadi mungkin tidak dikendalikan oleh pengaturan shell.
Secara default, jumlah maksimum file yang dapat dibuka oleh Mac OS X diatur ke 12.288 dan jumlah maksimum file yang dapat dibuka oleh proses yang diberikan adalah 10.240.
Anda dapat memeriksanya dengan:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Anda dapat meningkatkan batas (dengan risiko Anda sendiri) dengan:
sysctl -w kern.maxfiles=20480 (atau nomor apa pun yang Anda pilih)
sysctl -w kern.maxfilesperproc=18000 (atau nomor apa pun yang Anda pilih)
Untuk membuat perubahan permanen, gunakan sudountuk memasukkan pengaturan Anda /etc/sysctl.conf(yang mungkin harus Anda buat), seperti ini:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Catatan: Di OS X 10.10 atau lebih rendah, Anda dapat menambahkan pengaturan /etc/launchd.confseperti limit maxfilesdan itu akan menimpa apa pun yang Anda masukkan di sini.
Sekali lagi, dari artikel:
Setelah Anda selesai melakukannya, kernel itu sendiri akan memiliki jumlah file maksimum tetapi shell mungkin tidak. Dan karena sebagian besar proses yang akan mengambil banyak file ini akan diprakarsai oleh shell Anda akan ingin meningkatkan itu.
Perintah untuk itu adalah:
ulimit -S -n 2048 # or whatever number you choose
Perubahan itu juga bersifat sementara; hanya berlangsung untuk sesi shell saat ini. Anda dapat menambahkannya ke file konfigurasi shell Anda ( .bashrc, .zshrcatau apa pun) jika Anda ingin menjalankannya setiap kali Anda membuka sebuah shell.
batas apa yang berlaku untuk proses yang diluncurkan dengan mengklik ikon di area peluncuran? Dan bagaimana cara mengubah batas itu? Ketika Anda mengatakan "shell", saya menganggap Anda maksud shell terminal interaktif.
Cheeso
@Cheeso - Saya pikir bahwa batas sistem keseluruhan (sysctl) atau batas launchd, mana yang lebih rendah, mengontrolnya.
Nathan Long
1
membuat /etc/launchd.conf dengan batas isi maxfiles 1000000 1000000 bekerja sangat baik untuk saya! (OSX 10.8.2 di sini)
Zugwalt
1
Saya memasukkan kern.maxfiles=65000 kern.maxfilesperproc=65000/etc/sysctl.conf dan reboot. kern.maxfiles diabaikan dan tetap default tetapi kern.maxfilesperproc diatur ke 65000. Saya tidak punya /etc/launchd.conf jadi ada apa dengan itu?
pferrel
2
Jika ada yang punya masalah dengan file max tidak lengket, itu karena ada spasi tambahan setelah baris maxfiles, yang perlu dihapus.
jjathman
62
Sepertinya ada metode yang sama sekali berbeda untuk mengubah batas file terbuka untuk setiap versi OS X!
Untuk OS X Sierra (10.12.X) Anda perlu:
1.
Buat file di /Library/LaunchDaemons/limit.maxfiles.plistdan tempel yang berikut ini (jangan ragu untuk mengubah dua angka (yang merupakan batas lunak dan keras, masing-masing):
Anda perlu meningkatkan pengaturan ulimit Anda - ini cukup rendah pada OS X hari ini - 256 secara default. Tambahkan ulimit -n 4096atau mirip dengan profil ~ /. Anda atau yang setara dan itu akan menyelesaikannya di lingkungan lokal Anda. Jalankan ulimit -auntuk memeriksa level Anda saat ini
Untuk melihat pengaturan sistem, jalankan ini:
launchctl limit maxfiles
Ini diatur sedikit lebih tinggi di Lion (10240) pada basis per proses daripada sebelumnya. Tetapi jika Anda masih memukulnya di sana maka Anda dapat mengaturnya lebih tinggi menggunakan perintah yang sama dengan level yang diinginkan. Untuk membuat perubahan permanen /etc/launchd.conf adalah di mana Anda perlu menambahkan baris yang relevan.
Untuk macOS terbaru (pada saat penulisan: 10.14.1), Anda dapat menggunakan sudo launchctl limit maxfiles 64000 524288(secara default adalah 256), tetapi hanya berfungsi dalam sesi saat ini. Gunakan launchctlpekerjaan dari @ninjaPixel ( https://superuser.com/a/1171028/760235 ) untuk solusi permanen.
Meskipun ini mungkin merupakan solusi, namun tampaknya tidak benar-benar menjawab pertanyaan. Mungkin menjelaskan bahwa Anda tidak dapat menyingkirkan pesan dan kemudian mengusulkan ini sebagai salah satu cara untuk mengurangi masalah akan meningkatkan jawaban Anda.
Untuk memeriksa batas saat ini pada sistem Mac OS X Anda, jalankan:
launchctl limit maxfiles
Dua kolom terakhir adalah batas lunak dan keras.
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) di /Library/LaunchDaemons/limit.maxfiles.plist yang berisi konfigurasi XML berikut:
Ini akan menetapkan batas file terbuka menjadi 200000. File konfigurasi plist kedua harus disimpan di /Library/LaunchDaemons/limit.maxproc.plist dengan konten berikut:
Kedua file plist harus dimiliki oleh root: wheel dan 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. 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 batas launchctl.
Selain mengatur batas-batas ini di tingkat sistem, kami menyarankan pengaturan di tingkat sesi juga dengan menambahkan baris berikut ke file bashrc, bashprofile, atau analog Anda:
ulimit -n 200000
ulimit -u 2048
Seperti file plist, bashrc Anda atau file serupa harus memiliki izin -rw-r-r--. 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 200000.
Anda dapat mengikuti artikel ini untuk lebih jelasnya.
Entah pos tersebut harus ditandai sebagai duplikat jika sudah ada jawaban, jika tidak, silakan posting informasi yang relevan dari tautan, karena tautan tersebut mungkin tidak berlaku selamanya.
Jawaban:
Menurut artikel bermanfaat ini (yang saya sarankan baca):
Anda dapat memeriksanya dengan:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Anda dapat meningkatkan batas (dengan risiko Anda sendiri) dengan:
sysctl -w kern.maxfiles=20480
(atau nomor apa pun yang Anda pilih)sysctl -w kern.maxfilesperproc=18000
(atau nomor apa pun yang Anda pilih)Untuk membuat perubahan permanen, gunakan
sudo
untuk memasukkan pengaturan Anda/etc/sysctl.conf
(yang mungkin harus Anda buat), seperti ini:Catatan: Di OS X 10.10 atau lebih rendah, Anda dapat menambahkan pengaturan
/etc/launchd.conf
sepertilimit maxfiles
dan itu akan menimpa apa pun yang Anda masukkan di sini.Sekali lagi, dari artikel:
Perintah untuk itu adalah:
Perubahan itu juga bersifat sementara; hanya berlangsung untuk sesi shell saat ini. Anda dapat menambahkannya ke file konfigurasi shell Anda (
.bashrc
,.zshrc
atau apa pun) jika Anda ingin menjalankannya setiap kali Anda membuka sebuah shell.sumber
kern.maxfiles=65000 kern.maxfilesperproc=65000
/etc/sysctl.conf dan reboot. kern.maxfiles diabaikan dan tetap default tetapi kern.maxfilesperproc diatur ke 65000. Saya tidak punya /etc/launchd.conf jadi ada apa dengan itu?Sepertinya ada metode yang sama sekali berbeda untuk mengubah batas file terbuka untuk setiap versi OS X!
Untuk OS X Sierra (10.12.X) Anda perlu:
1. Buat file di
/Library/LaunchDaemons/limit.maxfiles.plist
dan tempel yang berikut ini (jangan ragu untuk mengubah dua angka (yang merupakan batas lunak dan keras, masing-masing):2. Ubah pemilik file baru Anda:
3. Muat pengaturan baru ini:
4. Terakhir, periksa apakah batasannya benar:
sumber
IO Error: Bad file descriptor (Write failed)
Anda perlu meningkatkan pengaturan ulimit Anda - ini cukup rendah pada OS X hari ini - 256 secara default. Tambahkan
ulimit -n 4096
atau mirip dengan profil ~ /. Anda atau yang setara dan itu akan menyelesaikannya di lingkungan lokal Anda. Jalankanulimit -a
untuk memeriksa level Anda saat iniUntuk melihat pengaturan sistem, jalankan ini:
Ini diatur sedikit lebih tinggi di Lion (10240) pada basis per proses daripada sebelumnya. Tetapi jika Anda masih memukulnya di sana maka Anda dapat mengaturnya lebih tinggi menggunakan perintah yang sama dengan level yang diinginkan. Untuk membuat perubahan permanen /etc/launchd.conf adalah di mana Anda perlu menambahkan baris yang relevan.
sumber
ulimit -a
).Pilihan lain mungkin menemukan pelakunya:
Untuk yang terakhir Anda bisa melihat file apa yang terbuka:
Dan bunuh prosesnya jika diinginkan
Dari komentar:
sumber
-h
(OS X 10.12.3):sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
untuk mencegah pemotongan nama proses.Teman-teman, di Mavericks 10.9.4
ulimit -n 2048
bekerja dengan baik. Anda mungkin perlu meluncurkan sesi login baru.sumber
Untuk macOS terbaru (pada saat penulisan: 10.14.1), Anda dapat menggunakan
sudo launchctl limit maxfiles 64000 524288
(secara default adalah 256), tetapi hanya berfungsi dalam sesi saat ini. Gunakanlaunchctl
pekerjaan dari @ninjaPixel ( https://superuser.com/a/1171028/760235 ) untuk solusi permanen.sumber
Anda bisa lari
proses yang membuka terlalu banyak file.
lalu bunuh itu.
atau
ubah ke yang lebih besar.
sumber
Setelah semua perubahan di atas java saya tidak membuat lebih dari 10.000 file. Solusi adalah flag jvm ini -XX: -MaxFDLimit
sumber
Saya menemukannya saat melakukan chmod -R jadi saya mendapatkannya dengan mengambil langkah-langkah yang lebih kecil, misalnya
sumber
Mirip dengan https://superuser.com/a/1171028/367819
Untuk memeriksa batas saat ini pada sistem Mac OS X Anda, jalankan:
Dua kolom terakhir adalah batas lunak dan keras.
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) di /Library/LaunchDaemons/limit.maxfiles.plist yang berisi konfigurasi XML berikut:
Ini akan menetapkan batas file terbuka menjadi 200000. File konfigurasi plist kedua harus disimpan di /Library/LaunchDaemons/limit.maxproc.plist dengan konten berikut:
Kedua file plist harus dimiliki oleh root: wheel dan 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. 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 batas launchctl.
Selain mengatur batas-batas ini di tingkat sistem, kami menyarankan pengaturan di tingkat sesi juga dengan menambahkan baris berikut ke file bashrc, bashprofile, atau analog Anda:
Seperti file plist, bashrc Anda atau file serupa harus memiliki izin -rw-r-r--. 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 200000.
Anda dapat mengikuti artikel ini untuk lebih jelasnya.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Ingatlah untuk me-restart Mac Anda agar nilainya efektif.
sumber