目的:解决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 //查看可以打开的文件数 65535 root@iZwz9j39cr29g0sykcftfmZ:~# ulimit -a //查看所有的限制,主要关注 open files core file size (blocks, -c) 0 data 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) unlimited open files (-n) 65535 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) 64035 virtual memory (kbytes, -v) unlimited file 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 重新加载配置文件