問(wèn)題現(xiàn)象:
環(huán)境:mysql 5.7
centos 7.2
在mysql配置文件中,配置了最大連接數(shù),但是在mysql啟動(dòng)后,沒(méi)有生效。
其原因
在centos 5/6 等版本中,資源限制的配置可以在 /etc/security/limits.conf 設(shè)置,針對(duì)root/user等各個(gè)用戶 或者代表所有用戶
來(lái)設(shè)置。 當(dāng)然,/etc/security/limits.d/ 中可以配置,系統(tǒng)是先加載limits.conf然后按照英文字母順序加載limits.d目錄下的配置
文件,后加載配置覆蓋之前的配置。 一個(gè)配置示例如下:
* soft nofile 100000
* hard nofile 100000
* soft nproc 100000
* hard nproc 100000
* soft core 100000
* hard core 100000
不過(guò),在CentOS 7 / RHEL 7的系統(tǒng)中,使用Systemd替代了之前的SysV,因此 /etc/security/limits.conf 文件的配置作用域
縮小了一些。limits.conf這里的配置,只適用于通過(guò)PAM認(rèn)證登錄用戶的資源限制,它對(duì)systemd的service的資源限制不生
效。登錄用戶的限制,與上面講的一樣,通過(guò) /etc/security/limits.conf 和 limits.d 來(lái)配置即可。
對(duì)于systemd service的資源限制,如何配置呢?
全局的配置,放在文件 /etc/systemd/system.conf 和 /etc/systemd/user.conf。 同時(shí),也會(huì)加載兩個(gè)對(duì)應(yīng)的目錄中的所
有.conf文件 /etc/systemd/system.conf.d/.conf 和 /etc/systemd/user.conf.d/.conf
其中,system.conf 是系統(tǒng)實(shí)例使用的,user.conf用戶實(shí)例使用的。一般的sevice,使用system.conf中的配置即可。
systemd.conf.d/.conf中配置會(huì)覆蓋system.conf。
解決方法
第一種方式是:
修改全局,所有service都生效,(但不建議這樣操作)
vim system.conf
DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000
注意:修改了system.conf后,需要重啟系統(tǒng)才會(huì)生效。
第二種方式:
systemctl edit mysqld
[Service]
LimitNOFILE=8000
保存上面輸入的,系統(tǒng)會(huì)自動(dòng)生成下面的文件:
/etc/systemd/system/mysql.service.d/override.conf
現(xiàn)后,重啟這兩個(gè)服務(wù),才能生效。
systemctl daemon-reload #讓 SystemD 重新加載配置文件
systemctl restart mysqld
查看一個(gè)進(jìn)程的limit設(shè)置:cat /proc/YOUR-PID/limits
例如我的一個(gè)nginx service的配置效果:
cat /proc/$(cat /var/run/mysqld/mysqld.pid)/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size unlimited unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 100000 100000 processes
Max open files 8000 8000 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 1030606 1030606 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
結(jié)語(yǔ):
順便提一下,我還被CentOS7自帶的/etc/security/limits.d/20-nproc.conf文件坑過(guò),里面默認(rèn)設(shè)置了非root用戶的最大進(jìn)程數(shù)為4096,難怪我上次在limits.conf中設(shè)置了沒(méi)啥效果,原來(lái)被limit.d目錄中的配置覆蓋了。