Ajuste de parámetros de Linux

Ajuste de los límites del sistema y los parámetros del kernel en RHEL y CentOS.

C05348A3-9AB8-42C9-A6E0-81DB3AC59FEB
           

Los límites predeterminados y los parámetros del kernel en Linux están bien para un sistema básico de uso relativamente bajo, pero estos parámetros rápidamente se vuelven inadecuados en implementaciones más robustas y más ocupadas.

El primer problema con el que se encuentra la mayoría de la gente son los descriptores de archivos. De forma predeterminada, los sistemas Linux limitan la cantidad de descriptores de archivos que cualquier proceso puede abrir a 1024 por proceso. Los descriptores de archivos se utilizan para muchas cosas en Linux, desde leer y escribir archivos hasta mantener conexiones TCP, y esto puede convertirse rápidamente en un cuello de botella que paralizará su aplicación.

Puede usar el siguiente comando para ver sus límites:

ulimit -aH
core file size (blocks)       unlimited
data seg size (kbytes)        unlimited
file size (blocks)            unlimited
max locked memory (kbytes)    unlimited
max memory size (kbytes)      unlimited
open files                    1024
pipe size (512 bytes)         8
stack size (kbytes)           unlimited
cpu time (seconds)            unlimited
max user processes            4094
virtual memory (kbytes)       unlimited

Cambiar los límites del sistema

Ya no se recomienda editar los límites en /etc/security/limits.conf directamente. En su lugar, debe crear archivos en /etc/security/limits.d/ (los números más bajos en el nombre del archivo sobrescriben los valores de los números más altos en caso de que haya entradas en conflicto).

Los siguientes son ejemplos de una secuencia de comandos que agregará valores para el usuario raíz y para todos los demás usuarios durante el aprovisionamiento de un nuevo servidor. Se supone que las aplicaciones se ejecutan con su propia cuenta de usuario y que la cuenta raíz solo se usa para el sistema operativo.

echo "root       soft nofile  4096" > /etc/security/limits.d/20-nproc.conf
echo "root       hard nofile  65535" >> /etc/security/limits.d/20-nproc.conf
echo "*          soft nofile 131072" >> /etc/security/limits.d/20-nproc.conf
echo "*          hard nofile 131072" >> /etc/security/limits.d/20-nproc.conf
echo "*          soft nproc 131072" >> /etc/security/limits.d/20-nproc.conf
echo "*          hard nproc 131072" >> /etc/security/limits.d/20-nproc.conf

Parámetros avanzados del kernel

Además de los límites, los parámetros del Kernel de Linux pueden influir significativamente en el comportamiento del sistema, especialmente bajo una carga pesada.

⚠ Advertencia :

La aplicación de un parámetro de kernel no válido en Linux evitará que su sistema arranque. Asegúrese de hacer una copia de seguridad de su configuración actual y asegúrese de tener una instantánea/copia de seguridad válida de su sistema antes de realizar cualquier cambio. Si bien es posible iniciar su sistema en modo de recuperación para editar el archivo de configuración, no es fácil y no es un enfoque recomendado. La esperanza no es una estrategia .

Para algunas aplicaciones, como ejecutar un servidor de base de datos Oracle ocupado, se recomienda desactivar algunos de los servicios de ajuste automático, como tuned o ktune, para aplicar su propio ajuste.

El siguiente script ajustará algunos de los valores recomendados en función de la cantidad de memoria disponible en el sistema, adáptelo para su propio uso. Los comandos sed se utilizan para eliminar líneas y evitar entradas duplicadas en el archivo de configuración. Tenga en cuenta que estos parámetros solo se aplican en el momento del arranque, mientras que los comandos sysctl al final del script pueden aplicar estos valores inmediatamente, reiniciar el sistema es la mejor manera de asegurarse de que los nuevos valores surtan efecto.

service tuned stop
chkconfig tuned off
service ktune stop
chkconfig ktune off
 
############ VARIABLES TO CHANGE
# System Global Area (SGA) values from Oracle in Gig
SGA=8
# Oracle user ID
oracle_user=oracle
oracle_user_oid=$(id -g $oracle_user)
 
echo "fs.file-max=65536" > /etc/sysctl.conf
echo "vm.pagecache=40" >> /etc/sysctl.conf
echo "kernel.panic_on_oops=1" >> /etc/sysctl.conf
echo "fs.file-max=6815744" >> /etc/sysctl.conf
echo "fs.aio-max-nr=1048576" >> /etc/sysctl.conf
echo "net.core.rmem_default=262144" >> /etc/sysctl.conf
echo "net.core.rmem_max=4194304" >> /etc/sysctl.conf
echo "net.core.wmem_default=262144" >> /etc/sysctl.conf
echo "net.core.wmem_max=1048576" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-arptables=0" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables=0" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables=0" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range=9000 65500" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout=30" >> /etc/sysctl.conf
 
sed -i -e '/kernel.shmmax/d' /etc/sysctl.conf
sed -i -e '/kernel.shmall/d' /etc/sysctl.conf
 
#Obtain the total memory in the system in bytes:
mem=$(free -b | awk '/Mem/ {print $2}')
 
#Get page size in bytes:
page=$(getconf PAGE_SIZE)
 
#Calculate 75% of the total memory in the system in pages for SHMALL:
all=$(expr $mem \* 75 / 100 / $page + 1)
 
#Multiply the SHMALL value by the page size to get SHMMAX:
max=$(expr $all \* $page)
 
#Set the SHMMAX and the SHMALL values in the /etc/sysctl.conf file:
echo "kernel.shmmax=$max" >> /etc/sysctl.conf
echo "kernel.shmall=$all" >> /etc/sysctl.conf
 
sed -i -e '/kernel.shmmni/d' /etc/sysctl.conf
#Set the maximum number of shared memory segments with SHMMNI in the /etc/sysctl.conf file:
echo "kernel.shmmni=4096" >> /etc/sysctl.conf
 
sed -i -e '/kernel.sem/d' /etc/sysctl.conf
#Recommended minimums for semaphore operations:
#The first value, SEMMSL, is the maximum number of semaphores per semaphore set
#The second value, SEMMNS, defines the total number of semaphores for the system
#The third value, SEMOPM, defines the maximum number of semaphore operations per semaphore call
#The last value, SEMMNI, defines the number of entire semaphore sets for the system
sysctl -w "kernel.sem=250 32000 100 128"
echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
 
sysctl --system
sysctl -p
free -h
Comentarios publicados: 0

Tagged with:
performance