¿Cómo manejar Demasiados archivos abiertos bajo Linux?

  
                

Al hacer la operación del sistema Linux, a veces salta demasiados archivos abiertos, es decir, abre demasiados archivos, es posible que no hayas cerrado correctamente cuando cierras el programa, la siguiente serie te enseñará a encontrar demasiados Abrir archivos pide cómo resolverlo.

contestar una, España

[root @ LXADMIN nginx] # cat /proc /sys /fs /file-max

8192

Archivo El número máximo de archivos abiertos en el sistema

[root @ lxadmin nginx] # ulimit -n

1024

El límite del programa solo puede abrir 1024 archivos

[root @ lxadmin nginx] # ulimit -n 8192 Ajustar

o ajustar permanentemente la cantidad de archivos abiertos que se agregarán al final del archivo de inicio /etc/rc.d/rc.local (al final de /etc/sysctl.conf) Agregar fs.file-max = xxx no es válido)

ulimit -n 8192

Respuesta 2,

El kernel de Linux a veces informa "Demasiados archivos abiertos", la causa es El valor predeterminado máximo del archivo (8096) es demasiado pequeño. Para resolver este problema, puede ejecutar los siguientes comandos como root (o agregarlos al script de inicio en /etc/rcS.d/*.)

# echo " 65536 "》 /proc /sys /fs /File-max # para kernels 2.2 y 2.4

# echo " 131072 " proc /proc /sys /fs /inode-max #only para la versión 2.2 del kernel

Respuesta 3

El método es modificar el límite de archivos abiertos del sistema operativo, de la siguiente manera:

1. Configure el sistema de acuerdo con el número máximo de archivos abiertos, y verifique /proc /sys /fs /file- El archivo max confirma que el número máximo de archivos abiertos se ha configurado correctamente.

# cat /proc /sys /fs /file-max

Si la configuración es demasiado pequeña, modifique la variable /etc/sysctl.conf al valor apropiado. Esto tendrá efecto después de cada reinicio. Si la configuración es lo suficientemente grande, omita el siguiente paso.

# echo 2048 proc /proc /sys /fs /file-max

Edite el archivo /etc/sysctl.conf e insértelo en el sentido descendente.

fs.file-max = 8192

2. Establezca el número máximo de archivos abiertos en el archivo /etc/security/limits.conf. Aquí hay una línea:

#

Añade la siguiente línea.

* - nofile 8192

Esta línea establece el número de archivo abierto predeterminado para cada usuario en 2048. Tenga en cuenta que la opción "nofile" tiene dos restricciones posibles. Es el duro y suave debajo del artículo. Para que el recuento máximo de archivos abiertos modificado tenga efecto, estas dos restricciones deben establecerse. Si se utiliza la configuración de caracteres " - ", las configuraciones de hard y soft se establecerán al mismo tiempo.

El límite duro indica el valor máximo que se puede establecer en el límite suave. El límite flexible se refiere al valor de configuración que el sistema actual está en efecto. El valor límite duro puede ser reducido por los usuarios ordinarios. Pero no puede aumentar. El límite suave no se puede establecer más alto que el límite duro. Solo el usuario root puede aumentar el valor límite duro.

Al agregar una descripción de límite de archivo, simplemente puede duplicar el valor actual. El ejemplo es el siguiente: si desea aumentar el valor predeterminado de 1024, es mejor aumentar a 2048. Si desea continuar aumentando, debe establecerlo en 4096.

Otra situación es que al crear un índice, hay dos posibilidades: una es que el factor de combinación es demasiado pequeño, lo que hace que el número de archivos creados exceda el límite del sistema operativo. En este caso, el factor de combinación se puede modificar y la operación se puede modificar. El número de archivos abiertos en el sistema es limitado; el otro es que el factor de consolidación está limitado por la memoria de la máquina virtual y no se puede ajustar a un tamaño mayor. El número de documentos que se deben indexar es muy grande. En este momento, solo se puede modificar el número de archivos abiertos del sistema operativo. El límite está resuelto.

Sobre esta base, también modifiqué uno de los siguientes archivos de configuración

vi /etc/sysctl.conf

Añadir:

# Disminuir el tiempo Valor predeterminado para la conexión tcp_fin_timeout

net.ipv4.tcp_fin_timeout = 30

# Reduzca el valor predeterminado de tiempo para la conexión tcp_keepalive_time

net.ipv4.tcp_keepalive_time = 1800

# Desactivar tcp_window_scaling

net.ipv4.tcp_window_scaling = 0

# Desactivar el tcp_sack

net.ipv4.tcp_sack = 0

# Desactive tcp_timestamps

net.ipv4.tcp_timestamps = 0

Luego reinicie la red del servicio, estas son optimizaciones relacionadas con los sockets TCP.

También se debe agregar en /etc/rc.d/rc.local se ha hecho que tenga efecto cuando se reinicie.

echo " 30 " "/proc /sys /net /ipv4 /tcp_fin_timeout

echo " 1800 "" /proc /sys /net /ipv4 /tcp_keepalive_time

Echo " 0 " "/proc /sys /net /ipv4 /tcp_window_scaling

echo " 0 &0 &quo;" /proc /sys /net /ipv4 /tcp_sack

echo " 0 " /proc /sys /net /ipv4 /tcp_timestamps

Debido a que no todos los programas se ejecutan bajo la raíz, todos los Linux tienen una distinción entre archivos abiertos y duros. Los usuarios ordinarios están limitados por lo difícil, sin importar ulimit - El valor n se ajusta a un valor alto y no se puede alcanzar el valor de nofile en /etc/security/limits.conf.

Después de esta optimización lsof -p $ java_pid

Copyright © Conocimiento de Windows All Rights Reserved