Saya perlu menyingkirkan batasan "Terlalu banyak file terbuka di sistem" pada OS X 10.7.1.
Apakah ada cara?
Saya perlu menyingkirkan batasan "Terlalu banyak file terbuka di sistem" pada OS X 10.7.1.
Apakah ada cara?
Jawaban:
Menurut artikel bermanfaat ini (yang saya sarankan baca):
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 sudo
untuk 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.conf
seperti limit maxfiles
dan 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
, .zshrc
atau apa pun) jika Anda ingin menjalankannya setiap kali Anda membuka sebuah shell.
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):
<?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. Ubah pemilik file baru Anda:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Muat pengaturan baru ini:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Terakhir, periksa apakah batasannya benar:
launchctl limit maxfiles
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. Jalankan ulimit -a
untuk 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.
ulimit -a
).
Pilihan lain mungkin menemukan pelakunya:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Untuk yang terakhir Anda bisa melihat file apa yang terbuka:
sudo lsof -n | grep socketfil
Dan bunuh prosesnya jika diinginkan
kill $pid
Dari komentar:
Untuk apa nilainya, Anda juga bisa mendapatkan daftar ID proses dengan menggunakan file paling terbuka
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-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.
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 launchctl
pekerjaan dari @ninjaPixel ( https://superuser.com/a/1171028/760235 ) untuk solusi permanen.
Anda bisa lari
lsof -n
proses yang membuka terlalu banyak file.
lalu bunuh itu.
atau
sysctl -w kern.maxfiles=20480
ubah ke yang lebih besar.
Setelah semua perubahan di atas java saya tidak membuat lebih dari 10.000 file. Solusi adalah flag jvm ini -XX: -MaxFDLimit
Saya menemukannya saat melakukan chmod -R jadi saya mendapatkannya dengan mengambil langkah-langkah yang lebih kecil, misalnya
# for each directory
find . -type d -exec chmod 755 {} \;
Mirip dengan https://superuser.com/a/1171028/367819
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:
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
Ini akan menetapkan batas file terbuka menjadi 200000. File konfigurasi plist kedua harus disimpan di /Library/LaunchDaemons/limit.maxproc.plist dengan 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: 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.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Ingatlah untuk me-restart Mac Anda agar nilainya efektif.