By default is seems the soft and hard open files limits on MariaDB in CentOS 7 are 1024 and 4096 respectfully. You can see these limits by first getting the process ID:
1 |
cat /var/run/mariadb/mariadb.pid |
And then looking at the limits in the proc filesystem:
1 |
cat /proc/XXXXX/limits |
You’ll see something like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@web1 ~]# cat /proc/7688/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 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 31209 31209 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 31209 31209 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us |
Notice the numbers for “Max open files”.
If you run into problems with MariaDB failing and you see errors like this in the log:
1 |
[ERROR] Error in accept: Too many open files |
Then you need to increase the open files limits by editing:
1 |
/usr/lib/systemd/system/mariadb.service |
and adding this line:
1 |
LimitNOFILE=infinity |
to the “[Service]” section. Then reload the systemctl daemon:
1 |
systemctl daemon-reload |
and restart the MariaDB service:
1 |
/sbin/service mariadb restart |
Now the limit will be increased. For example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@web1 ~]# cat /proc/9910/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 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 31209 31209 processes Max open files 65536 65536 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 31209 31209 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us |
UPDATE: We’ve seen similar problems with nginx. The solution is similar … increase the limits for the nginx service.
UPDATE: As noted by Bastiaan Welmers in the comments, it better to copy the service control file then to edit:
1 |
cp /usr/lib/systemd/system/mariadb.service /etc/systemd/system/ |