In Linux, there are some cases that application needs to open multiple files at the same time - probably database like MySQL is one of the cases accessing multiple files at the same time, because MySQL create files for table and its index on the file system, so it will cause opening multiple files at the same time. |
By the way, there are some way can check and increase the maximum allowed files you can open at the same time on Centos.
Find Linux Open File Limit
# cat /proc/sys/fs/file-max 176772 |
The number you will see shows the number of files that a user can have opened per login session. The result might be different depending on your system.
To increase edit vi /etc/sysctl.conf add the below line, save and exit
fs.file-max = 353544 |
Check Hard Limit in Linux
# ulimit -Hn 4096 |
Check Soft Limits in Linux
# ulimit -Sn 1024 |
Set User Level Open File limits in Linux
You may want to apply limits per user basis like apache, mysqld, and etc. For that purpose, as user root, you will need to edit the following file:
# sudo vi /etc/security/limits.conf |
To increase soft and hard limits, please add following lines at the end of the file.
* soft nproc 500000 * hard nproc 500000 * soft nofile 500000 * hard nofile 500000 |
Once you login the machine again, your soft/hard limits will be changed like you set above.
Next, run the command:
# sudo sysctl -p |
for MySQL, vi /usr/lib/systemd/system/mysqld.service and add the below 2 lines at the end, save and exit
LimitNOFILE=65535 LimitNPROC=65535 LimitMEMLOCK=65535 |
or you can put as following even though that looks so dangerous
LimitNOFILE=infinity LimitNPROC=infinity LimitMEMLOCK=infinity |
then increase the table_open_cache and open_files_limit in my.cnf
open_files_limit=10240 table_open_cache=10240 |
and you should run below command
# sudo systemctl daemon-reload |
if you modified MySQL config, restart MySQL and check values for table_open_cache and open_files_limit
# systemctl restart mysqld.service |