Я запускаю сервер Ubuntu 16.04 на XenServer, и у меня проблема с ограничением количества открытых файлов MySql.
Вот что я сделал до сих пор:
sudo nano /etc/security/limits.conf (ссылка)
* soft nofile 1024000
* hard nofile 1024000
* soft nproc 102400
* hard nproc 102400
mysql soft nofile 1024000
mysql hard nofile 1024000
sudo nano /etc/init/mysql.conf (ссылка)
limit nofile 1024000 1024000
limit nproc 102400 102400
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (ссылка)
[mysqld_safe]
open_files_limit = 1024000
[mysqld]
open_files_limit = 1024000
Когда вышеперечисленное не сработало, я перешел к следующему:
sudo nano /etc/sysctl.conf
fs.file-max = 1024000
судо нано /etc/pam.d/common-session
session required pam_limits.so
sudo nano /etc/pam.d/common-session-noninteractive
session required pam_limits.so
sudo nano /lib/systemd/system/mysql.service
LimitNOFILE=infinity
LimitMEMLOCK=infinity
Когда я вхожу в свою учетную запись, все выглядит нормально:
ulimit -Hn
1024000
ulimit -Sn
1024000
Если я вхожу в систему как mysql, это тоже выглядит хорошо:
mysql@server:~$ ulimit -Hn
1024000
mysql@server:~$ ulimit -Sn
1024000
Однако, когда я смотрю на процесс:
ps -ef | grep mysql
cat /proc/1023/limits | grep open
Max open files 65536 65536 files
Или когда я смотрю на это в MySql:
mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 65536 |
+------------------+-------+
Из логов (/var/log/mysql/error.log):
2016-07-25T05: 44: 35.453668Z 0 [Предупреждение] Не удалось увеличить количество max_open_files до более чем 65536 (запрос: 1024000)
У меня здесь совершенно нет идей. Вначале я действительно начал с open_files_limit на 1024, и одно из вышеперечисленных должно было изменить его, но мне нужно, чтобы он поднялся выше. Я уже достиг этого предела, так как у меня много баз данных и таблиц, которые иногда имеют много разделов.
Я даже пробовал числа менее агрессивные, чем 1024000, но безуспешно.
Есть идеи?
Это сработало для меня на Ubuntu Xenial 16.04:
Создать каталог /etc/systemd/system/mysql.service.d
Вставить /etc/systemd/system/mysql.service.d/override.conf
:
[Service]
LimitNOFILE=1024000
Теперь выполните
systemctl daemon-reload
systemctl restart mysql.service
Да, в самом деле, LimitNOFILE=infinity
на самом деле кажется, что он установлен на 65536.
Вы можете проверить это после запуска MySQL, выполнив:
cat /proc/$(pgrep mysql)/limits | grep files