FreeBSD: "Забагато відкритих файлів", але слід відкрити ще 160 000 файлів


11

У мене є система 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

Пов'язані


4
ulimit не глобальний, ви впевнені, що це те саме, що працює з вашим MySQL?
дероберт

1
Отже, чи можу я побачити, що таке значення ulimit для демона MySQL, і чи можу я змінити значення ulimit для демона, не зупиняючи демон? Я знаю, що можу встановити ulimitсценарій запуску або середовище оболонки, але це вимагатиме переривання бази даних.
Стефан Ласєвський

1
Загляньте в / proc, в підкаталог з PID вашої служби mysql. Ви можете cat limitsпобачити, з чим працює mysql. Ви також можете змінити їх під час echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limitsруху (з новими ядрами): (як root, звичайно)
lornix

1
@lornix: це FreeBSD. Я ніколи не використовував BSD, але не впевнений, чи FreeBSD насправді підтримує / proc / * / limit.
Мартін фон Віттіч

1
/procне встановлено за замовчуванням на FreeBSD, але зробіть це самостійно sudo mount -t procfs proc /proc, див. procfs(5)для отримання додаткової інформації. Після того, як ви /procзмонтовані, подивіться на /proc/$PID/rlimitфайл
zygis

Відповіді:


1

Перевірте /etc/login.conf і з’ясуйте, для якого класу входу призначений ваш користувач mysql. Це, мабуть, дефолт або демон. Якщо ви хочете змінити обмеження для свого користувача, створіть новий клас, призначте його для цього класу, змініть обмеження для цього класу, як вам подобається, а потім запустіть "cap_mkdb /etc/login.conf"

Якщо ви ще цього не читали, зробіть: http://www.freebsd.org/doc/handbook/users-limiting.htm

Процеси, запущені при запуску системи з / etc / rc, присвоюються класу входу в демон .


0

У деяких ОС встановлені обмеження, щоб уникнути проблем із безпекою для звичайного користувача, слід врахувати, що читати whant у man limits.conf
цьому файлі визначає обмеження для кожного процесу, як максимальна кількість потоку або максимальна кількість відкритого файлу. Обличчя використання обмеження може з’явитися звідти. /etc/security/limits.conf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.