Changing the Maximum Number of File Handles
The maximum number of file handles is the maximum number of files that can be opened. In Linux, there are two file handle restrictions. The one is system-level restriction, where the maximum number of files that can be opened by all user processes at the same time. The other is user-level restriction, where the maximum number of files that can be opened by a single user process. Containers have the third file handle restriction, that is, the maximum number of file handles of a single process in the container.
The commands for modifying node system parameters are valid only when public images are used. The commands provided in this document are for reference only when private images are used.
Changing the Maximum Number of System-Level File Handles on a Node
- Log in to the node and check the /etc/sysctl.conf file.
cat /etc/sysctl.conf
- Modify the fs.file-max parameter. fs.file-max=1048576 indicates the kernel parameter name and recommended value.
- If the value of fs.file-max has been set in the sysctl.conf file, run the following command to change the value:
sed -i "s/fs.file-max=[0-9]*$/fs.file-max=1048576/g" /etc/sysctl.conf && sysctl -p
- If fs.file-max is not set in the sysctl.conf file, run the following command to add it:
echo fs.file-max=1048576 >> /etc/sysctl.conf && sysctl -p
- If the value of fs.file-max has been set in the sysctl.conf file, run the following command to change the value:
- Run the following commands to check whether the change is successful (whether the returned value is the same as that you configure).
# sysctl fs.file-max fs.file-max = 1048576
Changing the Maximum Number of File Handles for a Single Process on a Node
- Log in to the node and view the /etc/security/limits.conf file.
cat /etc/security/limits.conf
The maximum number of file handles for a single process of a node is specified by the following parameters:
... root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535
- Run the sed command to change the maximum number of file handles. In the command, 65535 is the recommended maximum number of file handles. The /etc/security/limits.conf file on the EulerOS 2.3 node does not contain the default configuration related to nofile. Therefore, you cannot run the sed command to modify the configuration.
sed -i "s/nofile.[0-9]*$/nofile 65535/g" /etc/security/limits.conf
- Log in to the node again and run the following command to check whether the modification is successful. If the returned value is the same as the modified value, the modification is successful.
# ulimit -n 65535
Changing the Maximum Number of File Handles for a Single Container Process
- Log in to the node and view the /usr/lib/systemd/system/docker.service file.
- CentOS/EulerOS:
- Docker nodes:
cat /usr/lib/systemd/system/docker.service
- containerd nodes:
cat /usr/lib/systemd/system/containerd.service
- Docker nodes:
- Ubuntu:
- Docker nodes:
cat /lib/systemd/system/docker.service
- containerd nodes:
cat /lib/systemd/system/containerd.service
- Docker nodes:
If LimitNOFILE or LimitNPROC is set to infinity, the maximum number of file handles supported by a single process of a container is 1,048,576.
The maximum number of file handles for a single process of a container is specified by the following parameters:
... LimitNOFILE=1048576 LimitNPROC=1048576 ...
- CentOS/EulerOS:
- Run the following commands to modify the two parameters. In the command, 1048576 is the recommended value of the maximum number of file handles.
Changing the maximum number of file handles of a container will restart the docker/containerd process.
- CentOS/EulerOS:
- Docker nodes:
sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /usr/lib/systemd/system/docker.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /usr/lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
- containerd nodes:
sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /usr/lib/systemd/system/containerd.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /usr/lib/systemd/system/containerd.service && systemctl daemon-reload && systemctl restart containerd
- Docker nodes:
- Ubuntu:
- Docker nodes:
sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /lib/systemd/system/docker.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
- containerd nodes:
sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /usr/lib/systemd/system/containerd.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /usr/lib/systemd/system/containerd.service && systemctl daemon-reload && systemctl restart containerd
- Docker nodes:
- CentOS/EulerOS:
- Check the maximum number of file handles of a single process in the container. If the returned value is the same as the modified value, the modification is successful.
- Docker nodes:
# cat /proc/`pidof dockerd`/limits | grep files Max open files 1048576 1048576 files
- containerd nodes:
# cat /proc/`pidof containerd`/limits | grep files Max open files 1048576 1048576 files
- Docker nodes:
Automatically Configuring the Maximum Number of File Handles When Creating a Node or Node Pool
You can set the script to be executed after a node or node pool is created. When creating a node or node pool, you can use the script to configure the maximum number of file handles.
- Confirm the OS of the node or node pool to be created.
- Manually test the script commands on nodes in the same cluster and running the same OS.
- When creating a node or node pool, choose Advanced Settings > Post-installation Command to add commands. (The following commands must be configured after the verification is successful.)
- Change the maximum number of system-level file handles on a node.
- Log in to the node and check the /etc/sysctl.conf file. If the value of fs.file-max has been set in the file, run the following command to change it:
sed -i "s/fs.file-max=[0-9]*$/fs.file-max=1048576/g" /etc/sysctl.conf && sysctl -p
- Log in to the node and check the /etc/sysctl.conf file. If the value of fs.file-max is not set in the file, run the following command to add it:
echo fs.file-max=1048576 >> /etc/sysctl.conf && sysctl -p
In the preceding command, fs.file-max=1048576 indicates the kernel parameter name and recommended value.
- Log in to the node and check the /etc/sysctl.conf file. If the value of fs.file-max has been set in the file, run the following command to change it:
- Run the following command to change the maximum number of file handles for a single process on a node:
sed -i "s/nofile.[0-9]*$/nofile 65535/g" /etc/security/limits.conf
In the preceding command, 65535 is the recommended maximum number of file handles.
- Change the maximum number of file handles for a single process of a container.
- CentOS/EulerOS:
sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /usr/lib/systemd/system/docker.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /usr/lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
- Ubuntu:
sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /lib/systemd/system/docker.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
In the preceding command, 1048576 is the recommended maximum number of file handles.
- CentOS/EulerOS:
The command in the following figure is used only as an example. Change it as required.
- Change the maximum number of system-level file handles on a node.
- After the node is created, log in to the node to check whether the parameters are successfully modified.
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.