目的:解决Too many open files异常
方式:设置Open Files Limit
环境:(MySQL)Server version: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)
第一步:登录MySQL,检查mysql可以打开的文件数量(我已经设置过,本来显示值是1024)
mysql> show variables like 'open%';+------------------+---------+
| Variable_name | Value |
+------------------+---------+
| open_files_limit | 1048576 |
+------------------+---------+
1 row in set (0.01 sec)
第二步:检查系统文件
发现系统文件的open files 为65535,说明这个open file并没有被mysql使用。
主要由于发现在ubuntu14.04的操作系统中,使用Systemd替代了之前的SysV,因此 /etc/security/limits.conf 文件的配置作用域缩小了些。limits.conf这里的配置,只适用于通过PAM认证登录用户的资源限制,对systemd的service的资源限制不生效。对于systemd service的资源全局的配置,放在文件 /etc/systemd/system.conf 和 /etc/systemd/user.conf。 同时,也会加载两个对应的目录中的所有.conf文件 /etc/systemd/system.conf.d/.conf 和 /etc/systemd/user.conf.d/.conf其中,system.conf 是系统实例使用的,user.conf用户实例使用的。一般的sevice,使用system.conf中的配置即可。systemd.conf.d/.conf中配置会覆盖system.conf。
root@iZwz9j39cr29g0sykcftfmZ:~# ulimit -n //查看可以打开的文件数65535root@iZwz9j39cr29g0sykcftfmZ:~# ulimit -a //查看所有的限制,主要关注 open files
corefile size (blocks, -c) 0data seg size (kbytes,-d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 64035
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimitedopen files (-n) 65535
pipe size (512 bytes, -p) 8POSIX message queues (bytes,-q) 819200
real-time priority (-r) 0stack size (kbytes,-s) 8192cpu time (seconds,-t) unlimitedmax user processes (-u) 64035virtual memory (kbytes,-v) unlimitedfile locks (-x) unlimited
第三步:解决办法
输入:systemctl edit mysql.service
添加:
[Service]
LimitNOFILE=infinity
LimitMEMLOCK=infinity
保存后,自动生成/etc/systemd/system/mysql.service.d/override.conf,按回车
[Service]
LimitNOFILE=infinity
LimitMEMLOCK=infinity
/etc/systemd/system/mysql.service.d/override.conf
^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify ^C Cur Pos ^Y Prev Page
^X Exit ^R Read File ^\ Replace ^U Uncut Text ^T To Spell ^_ Go To Line ^V Next Page
systemctl daemon-reload #让 SystemD 重新加载配置文件