У мене є система FreeBSD 8 під управлінням ZFS, з сервером MySQL 5.5, який становить близько 355 ГБ, і, за прогнозами, зросте на пару Терабайт.
MySQL викликає помилки щодо "Забагато відкритих файлів" /etc/hosts.allow
. Ми прямо не використовуємо /etc/hosts.allow
, але він використовується hosts_access (3) ( libwrap.a
), який використовується багатьма речами.
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
Але коли я перевіряю, то, здається, не потрапляє ніяких фактичних меж. Кількість відкритих файлів, за які повідомлялося kern.openfiles stays
нижче 40 000, протягом тривалого періоду, а наш ліміт значно більший:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Openfiles має бути встановлено необмежено:
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL каже, що він повинен мати можливість відкрити 184320 файлових ручок:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
І деяку інформацію з точки зору користувача MySQL. Я зупинив mysql і зламав /usr/local/etc/rc.d/mysql-server
друкувати ці змінні, тому це повинно представляти середовище MySQL. Зауважимо, що число 184320 відповідає вищезазначеному.
# /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
І для легкої довідки ось описи для sysctls:
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
Пов'язані
- Це, можливо, пов'язано з питанням ZFS щодо Nexenta на ServerFault: Чому MySQL не може відкрити hosts.allow / hosts.deny?
- Також див. Подібну проблему на форумах FreeBSD: [EMFILE] Забагато відкритих файлів
ulimit
сценарій запуску або середовище оболонки, але це вимагатиме переривання бази даних.
cat limits
побачити, з чим працює mysql. Ви також можете змінити їх під час echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
руху (з новими ядрами): (як root, звичайно)
/proc
не встановлено за замовчуванням на FreeBSD, але зробіть це самостійно sudo mount -t procfs proc /proc
, див. procfs(5)
для отримання додаткової інформації. Після того, як ви /proc
змонтовані, подивіться на /proc/$PID/rlimit
файл