Hola Linuxer@s, si eres del tipo de persona que a como yo, le gusta intentar tener su sistema lo mas optimizado posible y que resuelva cualquier tipo de demanda masiva de manera eficiente, y aunue GNU-Linux cumpla esta funcion de manera satisfactoria, habran veces que queremos realizar mas con este sistema y modificar su manera de funcionamiento para que el mismo ejecute de mejor manera bajo nuestro perfil de solicitudes cualquier tipo de alta demanda sobretodo a nivel empresarial.
Lo que explicare en esta mini-guia no lo recomiendo ejecutar en un servidor de produccion, no sin previamente haberlo ejecutado y re ejecutado variadas veces y durante distintos lapsos de dias en un ambiente similar pero que sea exclusivamente de Testing. Ya que lo que expondre aca, son tweaks y cambios que podras realizar a nivel kernel de Linux y esto puede dar resultados no deseados en ciertas situaciones, asi que mejor prevenir que lamentar, es cierto que algunos tweaks mejoran tremendamente el desempeño del sistema, pero tambien puede hacer todo lo contrario...asi que ya lo sabes, primero testear, luego si resulta como esperabas traspasarlo a un nivel de produccion.
Primero, hay dos maneras de cambiar el funcionamiento estandar basico de como el kernel linux interactua con los dispositivos del hardware. - No te asustes, aunque realizes ciertos cambios aca, no vas a cargarte el sistema operativo ya que los cambios que podras hacer aca son solo opciones o parametros disponibles dentro del mismo nucleo Linux -.
Para poder cambiar el valor de estos parametros del nucleo linux, podemos hacerlo mediante la ruta virtual /proc o mediante el archivo /etc/sysctl.conf . Editando el ultimo es mejor, ya que los cambios quedan guardados aun cuando reinicies el sistema.Por ejemplo, los siguientes valores asignados a ciertos parametros de red dentro de /etc/sysctl.conf podrian mejorar el funcionamiento de paquetes de la red local de tu sistema linux:
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_syncookies = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
Lo anterior no es para sustituir como funcionan estos parametros en sysctl.conf sino mas bien para complementarlo. La primera variable (net.ipv4.tcp_window_scaling) y el numero 1 asignado le indica al nucleo que active esta funcion dentro del funcionamiento IPV4 (0 es desactivado y 1 activado) activando window_scaling en la pila IPV4 estas indicando al sistema operativo a que permita que cualquier usuario local pueda descargar desde red o internet un documento a mayor rapidez, ya que se habilitan bits extras en la pila TCP que son utilizados para aumentar el tamaño previamente existente en el buffer.
La segunda opcion (tcp_syncookies) se activa con el valor 1 y sirve para prevenir ataques masivos con paquetes SYN que puede saturar el sistema operativo de procesos de conecciones remotas.
Agregando estas opciones a /etc/sysctl.conf te aseguras que al reiniciar el sistema los cambios queden aplicados. Si quieres que los cambios apliquen una vez editado el fichero /etc/sysctl.conf sin necesidad de reiniciar el sistema, basta que ejecutes en una terminal como el usuario root:
# sysctl -p /etc/sysctl.conf
Para ver todos los parametros configurados actualmente en el kernel y sus valores, ejecutas:
# sysctl -a
Ahora, si por ejemplo solo quieres probar si algo funciona como esperas sin necesidad de que quede guardado y se aplique al reiniciar el sistema, puedes ejecutar como root en una terminal:
# sysctl -w
net.ipv4.tcp_window_scaling = 1
De esta manera se aplicara el cambio en el perfil actual, pero no se aplicara cuando reinicies el sistema operativo. Tambien puedes realizar cambios pasando los valores a la ruta /proc y estos no se guardaran al reiniciar el sistema:
# echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
Otra situacion que se da bastante en todos los sistemas operativos linux es el cacheo de ram. El nucleo de linux viene programado para cachear la mayor informacion posible de todos los servicios y aplicaciones que asi lo requieran, y dicha informacion se va acumulando en ram cache y no se libera, esto funciona asi porque el nucleo de linux quiere aprovechar todo el espacio maximo disponible de tu ram y porque de esta manera cualquier aplicacion o servicio accede a una informacion especifica de manera mas rapida ya que esta cacheada en memoria. La desventaja es que se va llenando el consumo de tu ram, y aun al cerrar todas las aplicaciones ves que tu memoria ram sigue media llena y te preguntas porque...ya tienes una idea de la respuesta. Lo bueno es, que esta memoria cache se puede limpiar manualmente, gracias al tuning del kernel linux y modificar el valor de los parametros.
Por ejemplo cierra todas las aplicaciones que estes ejecutando y abre una terminal shell y verifica el espacio actual usado y disponible de tu ram:
Si te das cuenta, la parte que dice Cache ocupa un gran porcentaje de tu memoria ram utilizada en total.
LIBERANDO MEMORIA CACHE
Para poder liberar este espacio debes hacerlo manualmente, en la ruta /proc/sys/vm/ hay un archivito llamado drop_caches que es donde se define como el nucleo linux manejara cachear informacion en ram de las aplicaciones. Dicho archivito acepta distintos valores los cuales le indican que ha de hacer:
- 0: No libera nada
- 1: Libera la pagecache
- 2: Libera inodos y dentries
- 3: Libera pagecache, inodos y dentries
Por lo que ejecutamos como root claro:
# sync # echo 3 > /proc/sys/vm/drop_caches
Ahora nuevamente en la terminal, ejecuta el comando "free -m" y mira los nuevos resultados :). Veras que gran parte sino toda la parte que dice Cache ha sido liberada y tienes mayor porcentaje de ram libre. Pero, aunque lo anterior es funcional, igual es momentaneo ya que al transcurso de varios minutos o de horas, la cache ram volvera a llenarse cuando los servicios y aplicaciones comienzen a trabajar en el sistema, lo que te expondria a ejecutar nuevamente la sentencia anterior o crear un shell script con la sentencia anterior y que dicho shell script se ejecute en una tarea cron cada 1 hora por ejemplo.
Ahora, si encuentras que de esta forma es muy pesado, hay una variable que puedes modificar /proc/sys/vm/vfs_cache_pressure, para indicar al kernel la prioridad que tiene que tener en referencia a la liberación de cache. En LinuxSigth explican el rango de valores que dicha variable acepta, y donde indican que a mayor valor menos informacion en cache ram se guardaran. Pero ten cuidado con los valores que pruebes, yo probe colocar valores altos en una maquina virtual linux para evitar guarda info cacheada por el navegador firefox ya que firefox suele utilizar masivamente la cache de ram, y por indicar esto el sistema operativo se relantizo tremendamente y tuve que retornar al valor anterior. Aunque admito solo ocurrio al querer dar uso de firefox, mas no me ocurrio con otros servicios y/o aplicaciones.
Tambien puedes tunear como el sistema operativo prioriza la swap. Los valores aceptados van desde 0 a 100, he indica que mientras mas cerca de 100 sea el valor mas prioridad da el sistema operativo a swapear a disco, y mientras mas cerca de 0 sea el valor menos prioridad da el sistema operativo a swapear a disco. Esta definicion puedes hacerla mediante sysctl o /proc, Linux por defecto tiene la variable swappiness con un valor de 60. Puedes confirmar este dato leyendolo tu mism@ en una terminal:
# cat /proc/sys/vm/swappiness
Si quieres cambiar este valor, basta con que edites el archivo /etc/sysctl.conf y agregues:
vm.swappiness=5
Un valor de 5 dira al sistema que solo en casos extremos de muchisima de necesidad por poco espacio en ram fisica, que comienze a swapear a disco info. De lo contrario si en /etc/sysctl.conf defines:
vm.swappiness=95
Un valor de 95 hace todo lo contrario, le da prioridad a tener espacio suficiente libre en ram fisica y el mayor porcentaje de informacion de poco uso swapeada a disco.
Si tienes informacion actualmente swapeada en disco, no veras los cambios de forma inmediata aun si ejecutas:
# sysctl -p
Tendrias que reiniciar el sistema operativo para que los cambios surtan efecto.
Espero que esta mini-guia te sea de utilidad y te ayude a conocer como realizar tuning en el nucleo de GNU/Linux para los futuros y los actuales administradores linux.
No hay comentarios:
Publicar un comentario