Saya memiliki sistem FreeBSD 8 yang menjalankan ZFS, dengan server MySQL 5.5 yang sekitar 355GB dan diproyeksikan akan tumbuh menjadi beberapa Terabyte.
MySQL memicu kesalahan tentang "Terlalu banyak file terbuka" di /etc/hosts.allow
. Kami tidak secara tegas menggunakan /etc/hosts.allow
, tetapi digunakan oleh hosts_access (3) ( libwrap.a
), yang digunakan oleh banyak hal.
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
Tetapi ketika saya memeriksa sepertinya sudah mengenai batas yang sebenarnya. Jumlah file terbuka yang dilaporkan di kern.openfiles stays
bawah 40.000 selama periode yang berkelanjutan, dan batas kami jauh lebih tinggi:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Openfiles harus diatur ke tidak terbatas:
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL mengatakan harus dapat membuka 184320 file menangani:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
Dan beberapa informasi dari perspektif pengguna MySQL. Saya berhenti mysql dan diretas /usr/local/etc/rc.d/mysql-server
untuk mencetak variabel-variabel ini, jadi ini harus mewakili lingkungan MySQL. Perhatikan bahwa angka 184320 konsisten dengan yang di atas.
# /usr/local/etc/rc.d/mysql-server.stefantest start
Starting mysql.
cpu time (seconds, -t) unlimited
file size (512-blocks, -f) unlimited
data seg size (kbytes, -d) 33554432
stack size (kbytes, -s) 524288
core file size (512-blocks, -c) unlimited
max memory size (kbytes, -m) unlimited
locked memory (kbytes, -l) unlimited
max user processes (-u) 5547
open files (-n) 184320
virtual mem size (kbytes, -v) unlimited
swap limit (kbytes, -w) unlimited
sbsize (bytes, -b) unlimited
pseudo-terminals (-p) unlimited
Dan, untuk referensi mudah di sini adalah deskripsi untuk sysctl:
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
Terkait
- Ini mungkin terkait dengan pertanyaan ZFS pada Nexenta di ServerFault: Mengapa MySQL tidak dapat membuka hosts.allow / hosts.deny?
- Lihat juga masalah serupa ini di forum FreeBSD: [EMFILE] Terlalu banyak file yang terbuka
ulimit
skrip startup atau lingkungan shell, tetapi itu akan mengharuskan saya mengganggu database.
cat limits
melihat apa yang sedang berjalan dengan mysql. Anda juga dapat mengubahnya dengan cepat (dengan kernel yang lebih baru): echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
(sebagai root tentu saja)
/proc
tidak dipasang secara default di FreeBSD, tetapi lakukan sendiri sudo mount -t procfs proc /proc
, lihat procfs(5)
info lebih lanjut. Setelah Anda menginstal /proc
, lihat /proc/$PID/rlimit
file