Подтвердить что ты не робот

Слишком много ошибок открытых файлов на Ubuntu 8.04

mysqldump: Couldn't execute 'show fields from `tablename`': Out of resources when opening file './databasename/tablename#P#p125.MYD' (Errcode: 24) (23)

при проверке ошибки 24 на оболочке говорится

>>perror 24

OS error code  24:  Too many open files

как я могу это решить?

4b9b3361

Ответ 1

Сначала, чтобы определить определенные ограничения для пользователей или групп, вы должны сделать следующее:

[email protected]:~# sudo -u mysql bash
[email protected]:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 71680
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 71680
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[email protected]:~$

Важная строка:

открыть файлы (-n) 1024

Как вы можете видеть, поставщик вашей операционной системы отправляет эту версию с базовой конфигурацией Linux - 1024 файла на процесс.

Этого явно недостаточно для загруженной установки MySQL.

Теперь, чтобы исправить это, вы должны изменить следующий файл:

/etc/security/limits.conf

mysql             soft    nofile           24000
mysql             hard    nofile           32000

Некоторые варианты Linux также требуют дополнительной настройки, чтобы заставить это придерживаться процессов демона и сеансов входа в систему. Например, в Ubuntu 10.04 вам также нужно установить лимиты сеанса pam, добавив следующую строку в /etc/pam.d/common-session:

session required pam_limits.so

Ответ 2

Довольно старый вопрос, но вот мои два цента.

То, что вы могли испытывать, - это то, что движок mysql не задал свою переменную "open-files-limit" правильно.

Вы можете видеть, сколько файлов вы разрешаете mysql mysql > SHOW VARIABLES;

Вероятно, установлено значение 1024, даже если вы уже установили ограничения на более высокие значения.

Вы можете использовать опцию --open-files-limit = XXXXX в командной строке для mysqld.

Приветствия

Ответ 3

Также может быть возможно, что некоторым кодом, который обращается к таблицам, закроет их должным образом и за определенный промежуток времени, можно будет достигнуть количества открытых файлов.

Пожалуйста, обратитесь к http://dev.mysql.com/doc/refman/5.0/en/table-cache.html по возможной причине.

Перезапуск mysql должен привести к тому, что эта проблема исчезнет (хотя это может повториться, если основная проблема не будет устранена).

Ответ 4

Вы можете увеличить свои пределы ОС, отредактировав /etc/security/limits.conf.

Вы также можете установить команду lsof" (LiSt Open Files), чтобы увидеть отношение файлов ↔ Processes.

Ответ 5

добавить --single_transaction к вашей команде mysqldump

Ответ 6

Нет необходимости настраивать PAM, как я думаю. В моей системе (Debian 7.2 с Percona 5.5.31-rel30.3-520.squeeze) У меня есть:

Перед изменением my.cnf:

\#cat /proc/12345/limits |grep "open files"
Max open files            1186                 1186                 files

После добавления "open_files_limit = 4096" в перезапуск my.cnf и mysqld я получил:

\#cat /proc/23456/limits |grep "open files"
Max open files            4096                 4096                 files

12345 и 23456 - это идентификатор процесса mysqld, конечно.

ПОКАЖИТЕ ПЕРЕМЕННЫЕ, КАК "open_files_limit" покажет 4096.

Все выглядит нормально, а "ulimit" не показывает изменений:

\# su - mysql -c bash
\# ulimit -n
1024

Ответ 7

Нет гарантии, что "24" - это номер ошибки на уровне ОС, поэтому не предполагайте, что это означает, что слишком много ручек файлов открыты. Это может быть некоторый тип внутреннего кода ошибки, который используется в самой mysql. Я предлагаю просить список рассылки mysql об этом.