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 sendirisudo mount -t procfs proc /proc
, lihatprocfs(5)
info lebih lanjut. Setelah Anda menginstal/proc
, lihat/proc/$PID/rlimit
fileJawaban:
Periksa /etc/login.conf dan cari tahu kelas login mana yang ditugaskan untuk pengguna mysql Anda. Mungkin default atau daemon. Jika Anda ingin mengubah batas untuk pengguna Anda, buat kelas baru, tetapkan pengguna Anda ke kelas itu, ubah batasan untuk kelas itu sesuka Anda dan kemudian jalankan "cap_mkdb /etc/login.conf"
Jika Anda belum membaca ini, lakukan: http://www.freebsd.org/doc/handbook/users-limiting.htm
Proses yang dimulai saat startup sistem oleh / etc / rc ditugaskan ke kelas login daemon .
sumber
Pada beberapa OS batas ditetapkan untuk menghindari masalah keamanan untuk pengguna biasa, Anda harus mempertimbangkan membaca ketika dalam
man limits.conf
File ini mendefinisikan batas per proses seperti jumlah maksimum utas atau jumlah maksimum dari file terbuka. Keterbatasan penggunaan wajah bisa berasal dari sana.
/etc/security/limits.conf
sumber