Назад | Перейти на главную страницу

установка ulimit и ubuntu 8.04

У нас есть два сервера ubuntu 8.04. С сервером базы данных я установил table_cache на 1000, однако, когда я перезапускаю mysql, статус показывает только 257, а предел открытых файлов говорит 1024

Я настроил ulimit, выполнив ulimit -n 8192, а затем перезапустив mysql; похоже, это сработало, однако через несколько часов я сделал ulimit -n и увидел, что он вернулся к 1024

Немного беспокоиться.

Я отредактировал /etc/security/limits.conf и добавил

mysql soft nofile 8192

mysql hard nofile 8192

затем перезагрузился, без изменений. Затем я отредактировал и изменил mysql на * перезагрузку, без изменений, я затем отредактировал и изменил его на одну строку

* - nofile 8192

и перезагрузился, без изменений.

cat /proc/sys/fs/file-max дает мне 768730

sysctl fs.file-max дает мне fs.file-max = 768730

Я немного не понимаю, как я могу установить и сохранить установленное значение ulimit, чтобы я мог правильно увеличить кеш таблицы в mysql.

[изменить: подробности объяснены для ясности]

Я подозреваю, что вы проверили ulimit для другого пользователя, отличного от mysql;)

После изменения перезагружаться не нужно limits.conf. Вы должны включить использование этого файла в соответствующей службе PAM в /etc/pam.d/.

Делать grep pam_limits /etc/pam.d/* иметь ключ к разгадке в какой ситуации limits.conf будет использоваться.

Например, изменить limits.conf for может быть виден в оболочке, вызываемой как sudo -u user bash но не работает как sudo su - user - это потому, что в Ubuntu настройки по умолчанию выглядят так:

$ grep limits /etc/pam.d/*|grep su
/etc/pam.d/su:# session required pam_limits.so
/etc/pam.d/sudo:session required pam_limits.so

Итак, если вы проверили лимиты с помощью sudo su - mysql потом был бардак - su не включил ограничения. Вы можете проверить, какая служба pam запущена, посмотрев /var/log/auth.log.

Для всех возможных типов вызова вашего mysql должно быть безопасно изменять pam.d/other или просто pam.d/common-session.

Если вы не уверены в текущих ограничениях MySQL, проверьте текущий идентификатор процесса для mysqld с помощью метода по вашему выбору (top, ps aux, pgrep, что угодно). Затем просто введите

sudo cat /proc/mysql_process_id_you_found/limits

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

Более простой способ (и своего рода взлом) - просто добавить ulimit -n 8192 команда внутри сценария инициализации для mysql /etc/init.d/mysql. Элемент управления действителен для оболочки и дочерних процессов / оболочек, которые она открывает.

РЕДАКТИРОВАТЬ: su и sudo «странность» связана с тем, что файл limits.conf связан с ограничениями PAM, которые, если я не ошибаюсь, применяется только к оболочкам входа в систему. Также есть некоторая информация о start-stop-daemon невозможность использовать лимиты памяти.

Вы добавили требуемый сеанс pam_limits.so в /etc/pam.d/common-session?