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.
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.