{"id":25458,"date":"2020-03-09T20:07:05","date_gmt":"2020-03-09T19:07:05","guid":{"rendered":"https:\/\/eltallerdelbit.com\/?p=25458"},"modified":"2020-09-04T12:54:23","modified_gmt":"2020-09-04T10:54:23","slug":"como-saber-que-procesos-consumen-mas-cpu-en-linux","status":"publish","type":"post","link":"https:\/\/eltallerdelbit.com\/como-saber-que-procesos-consumen-mas-cpu-en-linux\/","title":{"rendered":"\u00bfC\u00f3mo saber qu\u00e9 procesos consumen m\u00e1s CPU en Linux?"},"content":{"rendered":"
<\/p>\n
En este art\u00edculo:<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
El comando top<\/em> muestra datos relacionados con el rendimiento del sistema. Por defecto se actualiza cada 5 segundos.<\/p>\n <\/p>\n <\/p>\n Adem\u00e1s de comprobar la cantidad de procesos en ejecuci\u00f3n, podemos ver la carga de la CPU:\u00a0 %CPU<\/em><\/strong><\/p>\n<\/li>\n Tambi\u00e9n es interesante el porcentaje de CPU idle<\/em><\/strong>, que es el porcentaje de la CPU que est\u00e1 inactivo, sin carga de trabajo (cuanto menor sea este porcentaje, m\u00e1s saturado est\u00e1 el sistema).<\/p>\n<\/li>\n Con top<\/em> podemos encontrar los procesos zombies<\/a> si los hay..<\/p>\n<\/li>\n<\/ul>\n <\/p>\n En la primera l\u00ednea del resultado de top<\/em>, podemos ver un resumen de los procesos. Una m\u00e9trica importante es la de load average<\/em><\/strong>. Load average<\/em><\/strong><\/a> es el Promedio de carga del sistema<\/strong><\/em>, calculado en intervalos de 1, 5 y 15 minutos.<\/p>\n <\/p>\n Interpretaciones de Load Average<\/em><\/a>:<\/span><\/p>\n <\/p>\n <\/p>\n <\/p>\n top<\/em><\/strong> permite ordenar el resultado mostrado, eligiendo el campo deseado para el filtro. En este caso elegiremos el campo de CPU : %CPU Para usar el filtrado por campos, debemos usar el par\u00e1metro -o<\/em><\/strong>, y el nombre del campo:<\/p>\n <\/p>\n <\/p>\n <\/p>\n Si quisi\u00e9ramos ordenar\/filtrar por otros campos, podemos usar la letra f<\/em> para mostrar todos los campos disponibles:<\/p>\n * PID = Process Id TGID = Thread Group Id <\/br> <\/p>\n Despu\u00e9s, nos colocamos encima del campo deseado, pulsamos la tecla s<\/em><\/strong> (sort<\/em>), y la tecla q<\/em><\/strong> (quit<\/em>) para salir del men\u00fa,<\/p>\n y veremos el nuevo resultado del filtrado que har\u00e1 top:<\/p>\n <\/p>\n <\/p>\n <\/p>\n Diferenciaci\u00f3n b\u00e1sica:<\/p>\n <\/p>\n <\/p>\n El comando ps<\/em> por defecto muestra una instant\u00e1nea de los procesos en ejecuci\u00f3n en el sistema.<\/p>\n <\/p>\n <\/p>\n <\/p>\n salida del comando:<\/p>\n <\/p>\n <\/p>\n <\/p>\n salida del comando:<\/p>\n \n <\/p>\n <\/p>\n <\/p>\n salida del comando:<\/p>\n <\/p>\n salida del comando:<\/p>\n <\/p>\n Adem\u00e1s, los campos pueden ir precedidos por el s\u00edmbolo “–<\/strong>” o “+<\/strong>“, indicando que se use el orden descendente o ascendente respectivamente.<\/p>\n <\/p>\n <\/p>\n A continuaci\u00f3n vemos c\u00f3mo se ordenan los procesos en orden descendiente (de mayor a menor consumo de CPU):<\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n Los especificadores de formato los podemos encontrar en el manual del comando ps, en la secci\u00f3n: STANDARD FORMAT SPECIFIERS<\/p>\n <\/p>\n <\/p>\n <\/p>\n -n : el intervalo en segundos<\/p>\n ps -o : utiliza un formato definido por el usuario.<\/p>\n <\/p>\n Esto es lo que el anterior comando mostrar\u00e1 por pantalla:<\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n El comando vmstat<\/em> muestra estad\u00edsticas sobre los procesos del sistema, memoria, intercambio, Entrada\/Salida y rendimiento de la CPU. <\/p>\n <\/p>\n Vemos que vmstat<\/em> muestra varias columnas y dentro de ellas varios valores:<\/p>\n <\/p>\n <\/p>\n Vamos a intentar centrarnos en las m\u00e9tricas m\u00e1s importantes de vmstat<\/em><\/strong> y su interpretaci\u00f3n:<\/span><\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n Por defecto, vmstat<\/em> se ejecuta una vez. este comando es \u00fatil cuando observamos su ejecuci\u00f3n cada ciertos segundos, y contrastamos los resultados.<\/p>\n Para ello usamos el comando y un n\u00famero, que ser\u00e1n los segundos entre una ejecuci\u00f3n y la siguiente:<\/p>\n De esta forma es m\u00e1s f\u00e1cil observar si nuestra m\u00e1quina Linux tiene alg\u00fan problema, quiz\u00e1s observando el n\u00famero de procesos bloqueados, o la cantidad de memoria f\u00edsica y de intercambio utilizadas.<\/p>\n <\/p>\n <\/p>\n <\/p>\n El comando sar permite monitorizar el rendimiento de la CPU, memoria, E\/S .. en tiempo real.<\/p>\n La salida del comando sar<\/em> muestra :<\/p>\n <\/p>\n <\/p>\n <\/p>\n\n
\n <\/p>\n
\n <\/p>\n\n
\n–> Lo m\u00e1s adecuado es encontrar valores por denbjo de 1 en cada procesador.
\n <\/p>\nUsando filtros en top<\/em><\/strong> para filtrar por porcentaje de CPU<\/span><\/h4>\n
\n <\/p>\ntop -o %CPU<\/pre>\n
\n <\/p>\nOtros campos (fields<\/em>) que muestra el comando top<\/span><\/h4>\n
\n* USER = Effective User Name ENVIRON = Environment vars <\/br>
\n* PR = Priority vMj = Major Faults delta <\/br>
\n* NI = Nice Value vMn = Minor Faults delta <\/br>
\n* VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB) <\/br>
\n* RES = Resident Size (KiB) nsIPC = IPC namespace Inode <\/br>
\n* SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode <\/br>
\n* S = Process Status nsNET = NET namespace Inode <\/br>
\n* %CPU = CPU Usage nsPID = PID namespace Inode <\/br>
\n* %MEM = Memory Usage (RES) nsUSER = USER namespace Inode <\/br>
\n* TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode <\/br>
\n* COMMAND = Command Name\/Line <\/br><\/p>\n
\n <\/p>\nComando ps<\/em><\/strong><\/a><\/span><\/span><\/h3>\n
\nLo primero que tenemos que tener en cuenta con el comando ps<\/em><\/strong> es que acepta la sintaxis BSD<\/em> y la sintaxis de UNIX<\/em>.
\n <\/p>\n\n
\n <\/p>\nMostrar todos los procesos con ps<\/em><\/strong>:<\/span><\/h4>\n
\n
ps ax<\/pre>\n
ps -e<\/pre>\n<\/p>\n
\n <\/p>\nMostrar info detallada de los procesos:<\/span><\/h4>\n
\n
ps aux<\/pre>\n
ps -ef<\/pre>\n<\/ul>\n
ps aux<\/pre>\n
\n
\n <\/p>\nps-ef<\/pre>\n
\n <\/p>\nOrdenando la salida del comando ps<\/em>, seg\u00fan el consumo de CPU o Memoria<\/h4>\n
\nSe pueden especificar m\u00faltiples campos cuando se usa la opci\u00f3n “–sort<\/em><\/strong>” , separados por una coma.<\/p>\nps aux --sort=-pcpu<\/pre>\n
\npcpu<\/em><\/strong> es compatible con %cpu<\/em><\/strong>, seg\u00fan los especificadores standard de formato (STANDARD FORMAT SPECIFIERS<\/em>):<\/p>\n
\nAqu\u00ed vemos el resultado de la salida ordenada, usando %cpu<\/em><\/strong> en lugar de pcpu<\/em><\/strong>:<\/p>\nps aux --sort -%cpu<\/pre>\n
Utilizar el comando watch<\/em> junto con ps<\/em><\/strong> para monitorizar procesos en tiempo real<\/span><\/h4>\n
\nEl comando watch<\/em><\/strong> ejecuta un comando peri\u00f3dicamente, mostrando su salida por pantalla cada x segundos.
\n
\nAs\u00ed, podemos utilizar el comando ps<\/strong><\/em> junto con el comando watch<\/strong><\/em>, para que cada segundo muestre el resultado del comando ps -e<\/em><\/strong> (todos los procesos), a\u00f1adiendo la opci\u00f3n -o<\/em> que permite utilizar un formato definido por el usuario (mostrar el pid<\/em> del proceso, sus ppid<\/em>, el cmd<\/em> y el porcentaje de CPU utilizado).
\n <\/p>\n
\nAs\u00ed que vamos a lanzar el comando watch con el comando ps y unos especificadores de formato concretos:<\/p>\nwatch -n 1 'ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head'<\/pre>\n
el comando vmstat<\/em><\/strong><\/span><\/h3>\n
\n <\/p>\n
\n <\/p>\n\u00bfQu\u00e9 es lo que nos interesa revisar del resultado de vmstat<\/em><\/a>?<\/span><\/h4>\n
\n
\n
\n
\n
vmstat 3<\/pre>\n
\n <\/p>\nComando Sar<\/a><\/span> (Systat)<\/span><\/h3>\n
\n
\n
\n