Cómo investigar la carga del servidor: Parte 1

Introducción

En esta serie de dos partes, describimos los pasos a seguir cuando se investiga dónde se origina la carga del servidor o se sobrecarga el servidor. Cuando se ejecuta un servidor que aloja varios sitios web, a menudo surgen problemas de alta carga. Para saber cómo y por qué ocurre esto, sigue leyendo.

¿Qué es la carga del servidor?

La carga del servidor es una medida del trabajo que experimenta un servidor. Los promedios de carga representan la carga promedio del sistema durante un período de tiempo. Los servidores calculan los promedios de carga como el promedio móvil ponderado/amortiguado exponencialmente de los números de carga. Los tres valores de promedio de carga se refieren a los últimos uno, cinco y quince minutos de operación del sistema. Si tiene una sola CPU, el promedio de carga es un porcentaje de la utilización del sistema durante un período de tiempo específico. Si tiene varias CPU, debe dividir por la cantidad de procesadores para obtener un porcentaje comparable. Para encontrar la cantidad de procesadores en el servidor, ejecute el siguiente comando.

                      
                        [email protected] [~]# grep processor /proc/cpuinfo | wc -l
4
[email protected] [~]#
                      
                    

Abordar problemas de carga

El primer paso para abordar cualquier problema de carga en un servidor es tener un punto de referencia para que el servidor determine su rendimiento en reposo. Si bien este puede parecer un momento inoportuno para intentar ejecutar un punto de referencia, debemos establecer una línea de base para ver qué tan bien están funcionando nuestros ajustes. A menudo vemos mejoras en el rendimiento utilizando la configuración y el almacenamiento en caché adecuados. Recomendamos ejecutar este punto de referencia cuando el servidor está en su punto menos ocupado. El comando principal utilizado para la evaluación comparativa se muestra a continuación.

                      
                        [email protected]:~ # ab -lt 10  -c3 -H "Accept-Encoding: gzip,deflate,br" "https://www.domain.com/"
                      
                    

El comando apachebench (o ab) se usa aquí para proporcionar un estándar con el que podemos juzgar el rendimiento.

Promedio de carga

Ahora que hemos completado nuestro punto de referencia, el siguiente elemento que queremos ver es cuántos procesos están esperando recursos de CPU. Esta medida se expresa como un promedio durante un período de tiempo. El comando superior mide la carga en incrementos a lo largo del tiempo. El término “carga alta” es relativo según la cantidad de recursos que la CPU tiene disponibles.

Un Linux experimentado admin tenía esto que decir.

“La carga del servidor no debe ser mayor que la cantidad total de núcleos que tiene el servidor. Si el servidor tiene ocho núcleos y se ejecuta con una carga de ocho, los ocho núcleos funcionan al 100 %”.

Un servidor dedicado con un promedio de carga de un minuto de ocho y utiliza un procesador octa-core no necesariamente tiene lo que se definiría como una “carga alta”. Sin embargo, un servidor VPS con un promedio de carga de un minuto de 8.0 y usando un procesador de cuatro núcleos es es probable que experimente una “carga alta” ya que todos los núcleos de la CPU funcionan al 200 % de su capacidad.

También debemos tener en cuenta la capacidad de respuesta del servidor. Si uno de los administrados Cloud Los servidores duo-core tienen un promedio de carga de un minuto de 4.0, se mantienen al día con las solicitudes entrantes y responden, lo más probable es que el servidor no experimente una “carga alta”.

Nota: El momento óptimo para investigar la carga del servidor es mientras está ocurriendo porque obtiene una imagen más clara del problema.

Podemos ver los promedios de carga de un minuto, cinco minutos y quince minutos usando el comando w o el comando top.

                      
                        [email protected] [~]# w
 17:17:40 up 6 days,  8:13,  0 users,  
                        
                          load average: 0.00, 0.03, 0.07

                        
                        
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
[email protected] [~]#
                      
                    
                      
                        [email protected] [~]# top
top - 17:18:30 up 6 days,  8:13,  0 users,  
                        
                          load average: 0.00, 0.02, 0.06
                        
                        
Tasks: 159 total,   1 running, 157 sleeping,   0 stopped,   1 zombie
%Cpu(s):  0.2 us,  0.1 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.4 st
KiB Mem :  3766984 total,   195752 free,  1307504 used,  2263728 buff/cache
KiB Swap:  2047996 total,   763476 free,  1284520 used.  2004704 avail Mem
                      
                    

Tipos de carga

Generalmente, la carga del servidor es causada por uno o más servicios o sus aplicaciones relacionadas. Aquí hay cuatro recursos principales que normalmente causan una sobrecarga en el servidor:

  • UPC
  • RAM
  • E/S de disco
  • Redes

UPC

El tipo de carga que experimenta un servidor se encuentra usando uno de varios comandos. El comando superior debe ser nuestra primera opción al evaluar la carga del servidor, ya que imprime un resumen del sistema utilizando los tres promedios de carga, estadísticas de tareas del sistema, estadísticas de CPU del sistema, estadísticas de RAM del sistema y estadísticas de intercambio del sistema.

Mientras se ejecuta el comando superior, podemos presionar la tecla “1”, que muestra las estadísticas de la CPU para cada núcleo de la CPU en el sistema. Estas estadísticas se dividen en ocho porcentajes y se consideran el porcentaje de tiempo que cada CPU se dedica a las tareas.

                      
                        top - 17:21:36 up 6 days,  8:16,  0 users,  load average: 0.09, 0.08, 0.08
Tasks: 158 total,   1 running, 156 sleeping,   0 stopped,   1 zombie

                        
                          %Cpu0
                        
                          :  0.0 
                        
                          us
                        
                        ,  0.0 
                        
                          sy
                        
                        ,  0.0 
                        
                          ni
                        
                        ,100.0 
                        
                          id
                        
                        ,  0.0 
                        
                          wa
                        
                        ,  0.0 
                        
                          hi
                        
                        ,  0.0 
                        
                          si
                        
                        ,  0.0 
                        
                          st
                        
                        
                          %Cpu1
                        
                          :  0.3 us,  0.0 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.7 st

                        
                          %Cpu2
                        
                          :  0.0 us,  0.0 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.7 st

                        
                          %Cpu3
                        
                          :  0.3 us,  0.0 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
KiB Mem :  3766984 total,   346856 free,  1283940 used,  2136188 buff/cache
KiB Swap:  2047996 total,   761516 free,  1286480 used.  2028524 avail Mem
                      
                    

La siguiente tabla define los identificadores anteriores.

Ver tabla

Etiqueta de tarea Descripción de la tarea
nosotros , usuario El tiempo de ejecución de los procesos de usuario.
su , sistema El tiempo de ejecución de los procesos del kernel.
no , agradable El tiempo de ejecución de los procesos de usuario agradables
identificación , inactivo Tiempo invertido en el controlador inactivo del kernel
Washington , IO-espera Tiempo de espera para la finalización de E/S
Hola El tiempo dedicado al servicio de interrupciones de hardware.
y El tiempo dedicado a dar servicio a las interrupciones del software.
S t El tiempo robado de la máquina virtual por el hipervisor

La cantidad de recursos de CPU se mide por el porcentaje de tiempo que la CPU dedica a procesar cargas de trabajo reales. Si el mayor porcentaje de tiempo de CPU se dedica a procesos de usuario o procesos del sistema, esto indica que el servidor está encargado de demasiados procesos que consumen muchos recursos. Estos son algunos ejemplos de procesos que provocan una sobrecarga de una(s) CPU(s) en un servidor:

  • Secuencias de comandos PHP
  • Múltiples procesos en segundo plano
  • Consultas de MySQL mal formadas
  • Apache procesos
  • Escaneo de malware

RAM

La RAM, también conocida como memoria de acceso aleatorio, se mide a nivel de servidor mediante el comando free -m. Este comando nos muestra la memoria total, la memoria utilizada, la memoria libre, la memoria compartida, los búferes/memoria caché y, por último, la memoria disponible.

                      
                        [email protected] [~]# free -m
              
                        
                          total
                        
                        
                          used
                        
                        
                          free
                        
                        
                          shared
                        
                        
                          buff/cache
                        
                        
                          available
                        
                        
                          Mem
                        
                        :        3678        1415         403      125     1859        1869

                        
                          Swap
                        
                        :        1999        1271         728
[email protected] [~]#
                      
                    

La memoria utilizada representa la memoria utilizada por todos los procesos en ejecución, incluido el núcleo, e incluye los búferes/memoria caché. La memoria disponible estima cuánta memoria está disponible para iniciar nuevos procesos sin intercambio.

El uso de la memoria por parte de un proceso se ve mediante el comando ps. los %MEM La columna es un porcentaje o proporción del tamaño del conjunto residente del proceso en comparación con la memoria física de la máquina. El tamaño del conjunto residente (o RSS) es la cantidad de memoria utilizada por el proceso que ocupa la memoria RAM física. Para decirlo de otra manera, %MEM es el porcentaje de RAM física utilizada por los procesos.

Algunos ejemplos son cosas que pueden maximizar la memoria RAM de un servidor:

  • PHP/Apache – Si las solicitudes de PHP (memory_limit * PHP-FPM’s Max_children) o FCGI (FCGIdMaxProcesses) superan la cantidad de RAM en el servidor, es posible que se bloquee debido al agotamiento de la memoria.
  • mysql – Si el límite máximo de memoria configurada de MySQL excede la cantidad de RAM disponible en un servidor, es posible que se bloquee debido al agotamiento de la memoria.

E/S de disco

La E/S de disco se refiere a la transferencia operativa de datos en un disco físico hacia y desde un destino. Si leemos datos de archivos en un disco, la CPU requiere tiempo para leer los archivos. Lo mismo se aplica a la escritura. La E/S de disco puede contribuir a un aumento de la carga de varias formas. Estos son algunos ejemplos que pueden superar la E/S de disco de un servidor:

  • Quedarse sin RAM y cambiar la memoria a un disco.
  • Consultas MySQL que escriben tablas temporales en un disco.
  • Se está enviando una cantidad sustancial de correo electrónico desde el servidor.
  • Grandes copias de seguridad que se ejecutan durante un largo período de tiempo.

El uso del comando iotop puede mostrar la cantidad real de E/S de disco que se está utilizando.

                      
                        [email protected] [~]# iotop

Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
     1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 22
     2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
     4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
     6 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
     7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
     8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
     9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
    10 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [lru-add-drain]
    11 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    12 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
                      
                    

Redes

El rendimiento de Ethernet puede afectar la carga general en el servidor. Si se recibe una cantidad significativa de tráfico, pueden producirse cuellos de botella en la red. Por lo general, esto sucede cuando la comunicación entre dispositivos carece del ancho de banda o la potencia de procesamiento necesarios para completar una tarea rápidamente. Durante períodos de alto tráfico, ataques DDOS o ataques loris lentos, el rendimiento de la red necesario para cumplir con las solicitudes al servidor puede exceder la capacidad o bloquearse. Cuando esto ocurre, la carga del servidor puede aumentar. Un sitio web optimizado no suele encontrarse con este tipo de carga.

El uso de una herramienta de línea de comandos como iftop proporciona una visión general sólida del uso de la red.

                      
                        [email protected] [~]# iftop
interface: eth0
IP address is: 68.228.87.126
MAC address is: 52:54:00:91:87:6f

12.5Kb               25.0Kb               37.5Kb              50.0Kb              62.5Kb
└──────────────────────┴────────────────────┴───────────────────┴───────────────────┴────────────────────────────────────
host.domain.com   => 430461.cloudwaysapps.com                       40.1Kb  15.1Kb  12.5K      <=     7.12Kb  1.99Kb  1.65Kb
host.domain.com   => dc2-176.vpn.domain.com                         1.39Kb  6.24Kb  5.46Kb     <=     160b   1.49Kb  1.29Kb
host.domain.com   => 151.139.128.11                                 0b   1.14Kb   973b         <=     0b   5.34Kb  4.45Kb
host.domain.com   => lvps87-230-15-219.dedicated.hosteurope.de      0b   1.23Kb  1.02Kb        <=     0b   3.77Kb  3.14Kb
host.domain.com   => 10.10.10.10                                    0b   1.50Kb  1.33Kb.       <=     0b   2.78Kb  2.44Kb
host.domain.com   => 10.30.9.124                                    0b   1.40Kb  1.17Kb        <=     0b    920b    767b
host.domain.com   => 10.30.9.125                                    0b   1.40Kb  1.16Kb        <=     0b    920b    767b
host.domain.com   => 10.30.9.122                                    2.91Kb   640b    656b      <=     1.50Kb   353b    473b
host.domain.com   => 10.30.9.138                                    0b    468b    427b.        <=     0b    310b    295b
───────────────────────────────────────────────────────────────────────────────────────────
TX:             cum:   48.8KB   peak:   46.7Kb     rates:   46.7Kb  30.3Kb  32.5Kb
RX:                    24.6KB           56.6Kb              11.3Kb  18.8Kb  16.4Kb
TOTAL:                 73.3KB           81.9Kb 
                      
                    

Conclusión

Esto finaliza la primera parte de nuestra serie de artículos de dos partes sobre la investigación de la carga del servidor. La carga del servidor es la medida del trabajo que experimenta un servidor. Cuando surgen problemas con el uso de la CPU, los déficits de RAM, el aumento de E/S de disco o la congestión de la red, se manifestarán problemas de carga. En la segunda parte de esta serie, exploraremos los medios y métodos para localizar y abordar problemas de carga en el servidor.

¡Nos enorgullecemos de ser los seres humanos más serviciales en Hosting™!

Nuestros equipos de soporte están llenos de técnicos experimentados en Linux y administradores de sistemas talentosos que tienen un conocimiento profundo de múltiples tecnologías de alojamiento web, especialmente las que se analizan en este artículo. Si tiene alguna pregunta con respecto a esta información, siempre estamos disponibles para responder cualquier consulta con temas relacionados con este artículo.

Related Posts