Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Linux y Red Última actualización: 14 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

La resolución de problemas relacionados con el rendimiento en el mundo de las TI es siempre un reto y, si no se conocen las herramientas adecuadas, puede resultar frustrante.

Si está trabajando como soporte en un entorno de producción, lo más probable es que tenga que hacer frente a problemas relacionados con el rendimiento en el Linux entorno. Repasemos algunas de las utilidades de línea de comandos de Linux más utilizadas para diagnosticar problemas relacionados con el rendimiento.

Nota: Es posible que algunos de los comandos enumerados a continuación no estén instalados por defecto, por lo que tendrás que instalarlos manualmente.

lsof

lsof son las siglas de "lista de archivos abiertos" para ayudarle a encontrar todos los archivos y procesos abiertos junto con quien los abrió. La utilidad lsof puede ser conveniente utilizar en algunos escenarios.

Para listar, todos los archivos abiertos por un PID en particular.

# lsof -p PID

Contar el número de archivos y procesos

[root@localhost ~]# lsof -p 4271 | wc -l
34
[root@localhost ~]#

Compruebe el archivo de registro abierto actualmente

# lsof -p | grep log

Averiguar el número de puerto utilizado por el proceso

lsof -i -P |grep $PID
[root@localhost ~]# lsof -i -P |grep 4271

nginx 4271 root 6u IPv4 51306 0t0 TCP *:80 (ESCUCHAR)

nginx 4271 root 7u IPv4 51307 0t0 TCP *:443 (ESCUCHAR)

[root@localhost ~]#

Más información ejemplos de comandos lsof.

pidstat

pidstat puede utilizarse para monitorizar tareas gestionadas por el núcleo de Linux. Solucionar problemas relacionados con E/S puede ser fácil con este comando.

Lista de estadísticas de E/S de todos los PID

# pidstat -d

Para desplazar las estadísticas de E/S de un PID concreto

# pidstat -p 4271 -d

Si usted está haciendo la localización de averías en tiempo real para un cierto proceso, entonces usted puede supervisar el I/O en un intervalo. El siguiente ejemplo es para monitorear cada 5 segundos.

[root@localhost ~]# pidstat -p 4362 -d 5

Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 08/13/2016 _x86_64_ (2 CPU)

07:01:30 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Comando

07:01:35 PM 0 4362 0.00 0.00 0.00 nginx

07:01:40 PM 0 4362 0.00 0.00 0.00 nginx

07:01:45 PM 0 4362 0.00 0.00 0.00 nginx

07:01:50 PM 0 4362 0.00 0.00 0.00 nginx

top

Probablemente uno de los comandos más utilizados en Linux sería top. El comando top se puede utilizar para mostrar información de resumen del sistema y la utilización actual.

Basta con ejecutar el comando top para ver la utilización de la CPU, los detalles de los procesos, el número de tareas, la utilización de la memoria, el número de procesos zombis, etc.

top - 11:48:43 up 13 days, 17:25,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  90 total,   2 running,  88 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1829.7 total,    388.1 free,    220.3 used,   1221.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1369.4 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                              
    1 root      20   0  186820  13400   9092 S   0.0   0.7   0:10.87 systemd                                                                                                              
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.13 kthreadd                                                                                                             
    3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                                                                               
    4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                                                                           
    6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H                                                                                                         
    8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                                                                                                         
    9 root      20   0       0      0      0 S   0.0   0.0   0:07.35 ksoftirqd/0                                                                                                          
   10 root      20   0       0      0      0 R   0.0   0.0   0:07.30 rcu_sched                                                                                                            
   11 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0                                                                                                          
   12 root      rt   0       0      0      0 S   0.0   0.0   0:00.50 watchdog/0                                                                                                           
   13 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0                                                                                                              
   15 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kdevtmpfs                                                                                                            
   16 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns                                                                                                                
   17 root      20   0       0      0      0 S   0.0   0.0   0:00.68 kauditd                                                                                                              
   18 root      20   0       0      0      0 S   0.0   0.0   0:00.25 khungtaskd                                                                                                           
   19 root      20   0       0      0      0 S   0.0   0.0   0:00.00 oom_reaper                                                                                                           
   20 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 writeback                                                                                                            
   21 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kcompactd0                                                                                                           
   22 root      25   5       0      0      0 S   0.0   0.0   0:00.00 ksmd                                                                                                                 
   23 root      39  19       0      0      0 S   0.0   0.0   0:05.63 khugepaged                                                                                                           
   24 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 crypto                                                                                                               
   25 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kintegrityd                                                                                                          
   26 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kblockd

Para mostrar los detalles del proceso para un usuario específico

# top -u nombredeusuario

Para matar el proceso, puede ejecutar la parte superior y pulse k. Se le pedirá que introduzca el PID a matar.

top - 11:49:39 up 13 days, 17:26,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  91 total,   1 running,  90 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1829.7 total,    386.9 free,    221.4 used,   1221.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1368.3 avail Mem 
PID to signal/kill [default pid = 21261] 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                              
 5834 nginx     20   0  148712   7428   4800 S   0.0   0.4   0:02.37 nginx

ps

ps significa estado del proceso y ampliamente utilizado comando para obtener una instantánea del proceso en ejecución. Muy útil para averiguar si un proceso se está ejecutando o no y si se está ejecutando entonces imprime el PID.

Para averiguar el PID y los detalles del proceso por alguna palabra

[root@lab ~]# ps -ef|grep nginx
root      5833     1  0 May24 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx     5834  5833  0 May24 ?        00:00:02 nginx: worker process
root     21267 18864  0 11:50 pts/0    00:00:00 grep --color=auto nginx
[root@lab ~]#

tcpdump

La solución de problemas de red es siempre un reto, y uno de los comandos esenciales a utilizar es tcpdump.

Puede utilizar tcpdump para capturar los paquetes de red en una interfaz de red.

Para capturar los paquetes de una determinada interfaz de red

[root@lab ~]# tcpdump -i eth0 -w /tmp/capture
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C9 packets captured
16 packets received by filter
0 packets dropped by kernel
[root@lab ~]#

Como se puede ver arriba ha capturado el flujo de tráfico en eth0 interfaz.

Para capturar el tráfico de red entre las IP de origen y destino

# tcpdump src $IP y dst host $IP

Captura de tráfico de red para el puerto de destino 443

# tcpdump dst puerto 443
tcpdump: tipo de enlace de datos PKTAP
tcpdump: salida verbose suprimida, use -v o -vv para decodificación completa del protocolo
escuchando en pktap, tipo de enlace PKTAP (Packet Tap), tamaño de captura 262144 bytes
12:02:30.833845 IP 192.168.1.2.49950 > ec2-107-22-185-206.compute-1.amazonaws.com.https: Flags [.], ack 421458229, win 4096, length 0
12:02:32.076893 IP 192.168.1.2.49953 > 104.25.133.107.https: Flags [S], seq 21510813, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 353259990 ecr 0,sackOK,eol], length 0
12:02:32.090389 IP 192.168.1.2.49953 > 104.25.133.107.https: Flags [.], ack 790725431, win 8192, length 0
12:02:32.090630 IP 192.168.1.2.49953 > 104.25.133.107.https: Flags [P.], seq 0:517, ack 1, win 8192, length 517
12:02:32.109903 IP 192.168.1.2.49953 > 104.25.133.107.https: Flags [.], ack 147, win 8187, length 0

Leer el archivo capturado

# tcpdump –r filename

Ej: para leer un archivo capturado anteriormente

# tcpdump –r /tmp/test

Más información tcpdump para capturar y analizar el tráfico de red.

iostat

iostat significa estadísticas de entrada-salida y a menudo se utiliza para diagnosticar un problema de rendimiento con los dispositivos de almacenamiento. Puede supervisar la CPU, el dispositivo y el informe de utilización del sistema de archivos de red con iostat.

Mostrar estadísticas de E/S de disco

[root@localhost ~]# iostat -d
Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 13/08/2016 _x86_64_ (2 CPU)
Dispositivo: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.82 55.81 12.63 687405 155546
[root@localhost ~]#

Mostrar estadísticas de la CPU

[root@localhost ~]# iostat -c
Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 13/08/2016 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
           0.59 0.02 0.33 0.54 0.00 98.52
[root@localhost ~]#

ldd

ldd significa lista de dependencias dinámicas para mostrar las bibliotecas compartidas que necesita la biblioteca. La dirección ldd puede ser útil para diagnosticar el problema de inicio de la aplicación.

Si algún programa no se inicia debido a que las dependencias no están disponibles, puedes usar ldd para averiguar las bibliotecas compartidas que está buscando.

[root@localhost sbin]# ldd httpd
            linux-vdso.so.1 => (0x00007ffe7ebb2000)
            libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fa4d451e000)
            libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa4d42f9000)
            libaprutil-1.so.0 => /lib64/libaprutil-1.so.0 (0x00007fa4d40cf000)
            libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fa4d3e98000)
            libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fa4d3c6e000)
            libdb-5.3.so => /lib64/libdb-5.3.so (0x00007fa4d38af000)
            libapr-1.so.0 => /lib64/libapr-1.so.0 (0x00007fa4d3680000)
            libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa4d3464000)
            libdl.so.2 => /lib64/libdl.so.2 (0x00007fa4d325f000)
            libc.so.6 => /lib64/libc.so.6 (0x00007fa4d2e9e000)
            liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fa4d2c79000)
            /lib64/ld-linux-x86-64.so.2 (0x00007fa4d4a10000)
            libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fa4d2a73000)
            libfreebl3.so => /lib64/libfreebl3.so (0x00007fa4d2870000)
[root@localhost sbin]#

netstat

netstat (Estadísticas de la red) es un comando muy utilizado para imprimir conexiones de red, estadísticas de interfaz y solucionar problemas relacionados con la red.

Para mostrar las estadísticas de todos los protocolos

# netstat -s

Puede utilizar grep para averiguar si se ha producido algún error

[root@localhost sbin]# netstat -s | grep error
   0 errores de recepción de paquetes
   0 errores de búfer de recepción
   0 errores en el búfer de envío
[root@localhost sbin]#

Para mostrar la tabla de enrutamiento del kernel

[root@localhost sbin]# netstat -r
Tabla de enrutamiento IP del núcleo
Destination Gateway Genmask Flags MSS Window irtt Iface
puerta de enlace predeterminada 0.0.0.0 UG 0 0 0 eno16777736
172.16.179.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777736
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
[root@localhost sbin]#

Más información ejemplos de comandos netstat.

gratis

Si tu servidor Linux se está quedando sin memoria o simplemente quieres saber cuánta memoria disponible hay, entonces el comando free te ayudará.

[root@localhost sbin]# free -g
             total usado buff/cache compartido libre disponible
Mem:             5 0 3 0 1 4
Intercambio: 5 0 5
[root@localhost sbin]#

-g significa mostrar los detalles en GB. Como puede ver, la memoria total disponible es de 5 GB y hay 3 GB libres.

sar

sar (Informe de actividad del sistema) será útil para recoger un número de un informe incluyendo CPU, Memoria, y la carga del dispositivo.

Con sólo ejecutar sar le mostrará la utilización del sistema durante todo el día.

sar-salida

Por defecto, almacena el informe de utilización en 10 minutos. Si necesita algo más breve en tiempo real, puede utilizarlo como se indica a continuación.

Mostrar informe de CPU 3 veces cada 3 segundos

[root@localhost sbin]# sar 3 2
Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 13/08/2016 _x86_64_ (2 CPU)
11:14:02 PM CPU %user %nice %system %iowait %steal %idle
11:14:05 PM todos 1.83 0.00 0.50 0.17 0.00 97.51
11:14:08 PM todos 1.50 0.00 0.17 0.00 0.00 98.33
Media: all 1.67 0.00 0.33 0.08 0.00 97.92
[root@localhost sbin]#

Mostrar informe de uso de memoria

# sar -r

Mostrar informe de red

# sar -n TODOS

ipcs

ipcs (Sistema de comunicación entre procesos) proporciona un informe sobre el semáforo, la memoria compartida y la cola de mensajes.

Para listar la cola de mensajes

# ipcs -q

Para listar los semáforos

# ipcs -s

Para listar la memoria compartida

# ipcs -m

Para visualizar el estado de uso actual de la CIP

[root@localhost sbin]# ipcs -u

------ Mensajes Estado --------
colas asignadas = 0
cabeceras utilizadas = 0
espacio utilizado = 0 bytes

------ Estado de la memoria compartida --------
segmentos asignados 5
páginas asignadas 2784
páginas residentes 359
páginas intercambiadas 0
Rendimiento de intercambio: 0 intentos 0 aciertos

------ Estado del Semáforo --------
matrices utilizadas = 0
semáforos asignados = 0
[root@localhost sbin]#

ioping

ioping es un comando externo que puedes instalar desde aquí. Puede ser muy útil para controlar la latencia de E/S del disco en tiempo real.

Conclusión

Espero que los comandos anteriores ayuden en las diversas situaciones en su administración del sistema trabajo. Los comandos mencionados arriba son buenos para usar bajo demanda. Sin embargo, si necesitas monitorizar servidores Linux todo el tiempo entonces deberías considerar usar software de supervisión de servidores.

Y, para saber más sobre el rendimiento de Linux, puede consultar esto Curso Udemy.

  • Chandan Kumar
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre Linux
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba el lunes
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder