Cambio del número máximo de controladores de archivo
El número máximo de controladores de archivo es el número máximo de archivos que se pueden abrir. En Linux, hay dos restricciones de manejo de archivos: restricción a nivel de sistema, es decir, el número máximo de archivos que pueden ser abiertos por todos los procesos de usuario al mismo tiempo; restricción a nivel de usuario, es decir, el número máximo de archivos que pueden ser abiertos por un solo proceso de usuario. Los contenedores tienen la tercera restricción de manejadores de archivo, es decir, el número máximo de manejadores de archivo de un solo proceso en el contenedor.
Los comandos para modificar los parámetros del sistema de nodos solo son válidos cuando se utilizan las imágenes públicas. Los comandos proporcionados en este documento son de referencia solo cuando se utilizan las imágenes privadas.
Cambio del número máximo de controladores de archivo de nivel de sistema en un nodo
- Inicie sesión en el nodo y vea el archivo /etc/sysctl.conf.
cat /etc/sysctl.conf
- Modifique el parámetro fs.file-max. fs.file-max=1048576 indica el nombre del parámetro del núcleo y el valor recomendado.
- Si el valor de fs.file-max se ha establecido en el archivo sysctl.conf, ejecute el siguiente comando para cambiar el valor:
sed -i "s/fs.file-max=[0-9]*$/fs.file-max=1048576/g" /etc/sysctl.conf && sysctl -p
- Si fs.file-max no está definido en el archivo sysctl.conf, ejecute el siguiente comando para agregarlo:
echo fs.file-max=1048576 >> /etc/sysctl.conf && sysctl -p
- Si el valor de fs.file-max se ha establecido en el archivo sysctl.conf, ejecute el siguiente comando para cambiar el valor:
- Ejecute los siguientes comandos para comprobar si el cambio es correcto (si el valor devuelto es el mismo que el configurado).
# sysctl fs.file-max fs.file-max = 1048576
Cambio del número máximo de controladores de archivo para un solo proceso en un nodo
- Inicie sesión en el nodo y vea el archivo /etc/security/limits.conf.
cat /etc/security/limits.conf
El número máximo de controladores de archivo de un solo proceso en un nodo se especifica mediante los siguientes parámetros:
... root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535
- Ejecute el comando sed para cambiar el número máximo de controladores de archivo. En el comando 65535 es el número máximo recomendado de manejadores de archivo. El archivo /etc/security/limits.conf del nodo de EulerOS 2.3 no contiene la configuración predeterminada relacionada con nofile. Por lo tanto, no puede ejecutar el comando sed para modificar la configuración.
sed -i "s/nofile.[0-9]*$/nofile 65535/g" /etc/security/limits.conf
- Inicie sesión de nuevo en el nodo y ejecute el siguiente comando para comprobar si la modificación se realiza correctamente. Si el valor devuelto es el mismo que el valor modificado, la modificación se realiza correctamente.
# ulimit -n 65535
Cambio del número máximo de identificadores de archivo para un proceso de contenedor único
- Inicie sesión en el nodo y vea el archivo /usr/lib/systemd/system/docker.service.
- CentOS/EulerOS:
cat /usr/lib/systemd/system/docker.service
- Ubuntu:
cat /lib/systemd/system/docker.service
Si LimitNOFILE o LimitNPROC se establece en infinity, el número máximo de manejadores de archivo soportados por un solo proceso de un contenedor es de 1,048,576.
El número máximo de controladores de archivo para un solo proceso de un contenedor se especifica mediante los siguientes parámetros:
... LimitNOFILE=1048576 LimitNPROC=1048576 ...
- CentOS/EulerOS:
- Ejecute los siguientes comandos para modificar los dos parámetros. En el comando 1048576 es el valor recomendado del número máximo de manejadores de archivo.
Al cambiar el número máximo de controladores de archivo de un contenedor se reiniciará el proceso Docker.
- 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
- CentOS/EulerOS:
- Check the maximum number of file handles of a single process in the container. Si el valor devuelto es el mismo que el valor modificado, la modificación se realiza correctamente.
# cat /proc/`pidof dockerd`/limits | grep files Max open files 1048576 1048576 files
Configuración automática del número máximo de controladores de archivo al crear un nodo o un grupo de nodos
Puede configurar el script para que se ejecute después de crear un nodo o un grupo de nodos. Al crear un nodo o grupo de nodos, puede utilizar el script para configurar el número máximo de controladores de archivo.
- Confirme el sistema operativo del nodo o grupo de nodos que se va a crear, por ejemplo, CentOS 7.6.
- Pruebe manualmente los comandos de script en los nodos en el mismo clúster y ejecute el mismo SO.
- Al crear un nodo o grupo de nodos, elija Advanced Settings > Post-installation Command para agregar comandos. (Los siguientes comandos deben configurarse después de que la verificación se realice correctamente.)
- Cambie el número máximo de controladores de archivo de nivel de sistema en un nodo.
- Inicie sesión en el nodo y compruebe el archivo /etc/sysctl.conf. Si el valor de fs.file-max se ha establecido en el archivo, ejecute el siguiente comando para cambiarlo:
sed -i "s/fs.file-max=[0-9]*$/fs.file-max=1048576/g" /etc/sysctl.conf && sysctl -p
- Inicie sesión en el nodo y compruebe el archivo /etc/sysctl.conf. Si el valor de fs.file-max no está establecido en el archivo, ejecute el siguiente comando para agregarlo:
echo fs.file-max=1048576 >> /etc/sysctl.conf && sysctl -p
En el comando anterior fs.file-max=1048576 indica el nombre del parámetro del núcleo y el valor recomendado.
- Inicie sesión en el nodo y compruebe el archivo /etc/sysctl.conf. Si el valor de fs.file-max se ha establecido en el archivo, ejecute el siguiente comando para cambiarlo:
- Ejecute el siguiente comando para cambiar el número máximo de controladores de archivo para un solo proceso en un nodo:
sed -i "s/nofile.[0-9]*$/nofile 65535/g" /etc/security/limits.conf
En el comando anterior, 65535 es el número máximo recomendado de controladores de archivo.
- Cambie el número máximo de controladores de archivo para un solo proceso de un contenedor.
- 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
En el comando anterior, el número máximo de controladores de archivo recomendado es 1048576.
- CentOS/EulerOS:
El comando de la siguiente figura solo se utiliza como ejemplo. Cámbielo según sea necesario.
- Cambie el número máximo de controladores de archivo de nivel de sistema en un nodo.
- Una vez creado el nodo, inicie sesión en el nodo para comprobar si los parámetros se han modificado correctamente.