Friday, 3 November 2017

Consejos y trucos, artículos básicos sobre configuraciones que ayudan a un mejor desempeño de nuestros SO's. Cada proceso ha sido personalmente comprobado.


En este blog continuamos con la parte de comandos referentes a los archivos, así que sigamos aprendiendo acerca de los maravillosos y geniales comandos Linux.

El cajón de los comandos Linux es una guía de referencia rápida para todos los usuarios Linux que desean aprender los comandos de este gran SO. Los comandos se dividen en 15 categorías, lo cual nos permite tener un mayor entendimiento acerca de que comando utilizar en una específica situación. El agradecimiento total al creador de esta guía +Bobbin Zachariah.

Esta guía puede ser utilizada ya sea para usuarios nuevos o avanzados, proveyendo el mejor esfuerzo para dar a conocer los comandos Linux más relevantes. 
Así que empecemos con la 1a  parte de los comandos referentes a los procesos.

$ ps
En GNU/Linux, tenemos algunas alternativas sobre como mostrar el estado de los procesos ejecutándose en nuestro sistema, podemos usar algunos comandos para ello, como top que ya lo estudiamos anteriormente; pero en esta ocasión veremos el uso de ps.

¿Qué es el comando ps?
Según Wikipedia: Ps (Process Status) estado de procesos, es un comando asociado del sistema operativo UNIX que permite visualizar el estado de un proceso. 
El comando ps se utiliza para proporcionar información sobre los procesos que están corriendo actualmente, incluidos sus números de identificación de proceso (PID), USUARIO, TTY, porcentaje de CPU y porcentaje de memoria (MEM). A cada proceso se le asigna una identificación única en el sistema llamada PID, y el USUARIO es un nombre bajo el cual se ejecuta un proceso; TTY es el nombre de la consola o terminal en el que el usuario inició sesión, que también se puede encontrar utilizando el comando tty, información que generalmente es útil en una red multiusuario. El porcentanje de CPU% muestra el nivel de uso de este en un proceso y el MEM% nos imprime el  uso de la memoria.

Uso del comando ps.





Si no añadimos ninguna opción o parámetro, ps nos mostrará los procesos del usuario con el que hemos iniciado sesion, al utilizarlo con opciones, que es la forma más común y conveniente, podemos obtener información mucho más completa sobre los procesos actuales en el sistema. Los parámetros básicos que debemos conocer son los siguientes:

-aufx: Lista los procesos de todos los usuarios con información añadida.
-a: Lista los procesos de todos los usuarios.
-u: Lista información del proceso como por ejemplo el usuario que lo está corriendo, la utilización de CPU y memoria, etc.
-x: Lista procesos de todas las terminales y usuarios.
-l: Muestra información que incluye el UID y el valor “nice“.
-forest: Muestra el listado procesos en un formato tipo árbol que permite ver como los procesos interactúan entre si, podría ser algo similar al comando pstree.

Según las opciones utilizadas, el comando ps proporciona la siguiente información:
  • Estado actual del proceso
  • ID de proceso
  • ID de proceso principal
  • ID de usuario
  • Clase de programación
  • Prioridad
  • Dirección del proceso
  • Memoria utilizada
  • Tiempo de CPU utilizado
La siguiente tabla describe algunos de los campos de información proporcionados por ps, estos que veremos  dependen de la opción que seleccionemos. 

Campo    
Descripción
UID
El ID de usuario efectivo del propietario del proceso.
PID
El ID de proceso.
PPID
El ID de proceso principal.
C
El uso del procesador para la programación. Este campo no se muestra cuando se utiliza la opción -c.
CLS
La clase de programación a la que pertenece el proceso, como tiempo real, sistema o tiempo compartido. Este campo sólo se incluye con la opción -c.
PRI
La prioridad de programación del subproceso del núcleo. Los números más altos indican una prioridad superior.
NI
El número de nice del proceso, que contribuye a su prioridad de programación. Aumentar el valor del comando nice de un proceso significa reducir su prioridad.
ADDR
La dirección de la estructura proc.
SZ
El tamaño de la dirección virtual del proceso.
WCHAN
La dirección de un evento o bloqueo para el que el proceso está inactivo.
STIME
La hora de inicio del proceso en horas, minutos y segundos.
TTY
El terminal desde el cual se inició el proceso o su proceso principal. Un signo de interrogación indica que no existe un terminal de control.
TIME
La cantidad total de tiempo de CPU utilizado por el proceso desde que comenzó.
CMD
El comando que generó el proceso.

Un ejemplo sería el siguiente:

Ahora veremos como usar el comando ps en Linux para saber cuanta memoria usa un proceso.
En este ejemplo veremos el uso de memoria en la primera columna, PID en la segunda y en la tercera la ruta de los procesos en ejecución:

¿Puedo limitar la cantidad de procesos que se muestran que estan usando  memoria?
Si, para mostrar los 2 procesos principales utilizando memoria, ingresamos el siguiente comando:


$ pmap

Qué es el comando pmap?
Pmap  Muestra o examina el mapa de memoria y las librerías de un proceso, a su vez informa sobre el rendimiento  y el consumo de memoria de un proceso específico.

El comando pmap se utiliza ingresando pmap más el PID, donde el PID es el identificador del proceso concreto que queremos examinar. En un servidor Linux, podemos listar fácilmente los detalles de un proceso activo y visualizar su consumo real de memoria, en ocasiones vemos que el ordenador se pone lento y tenemos que ser capaces de saber cual es el proceso que esta saturando la RAM, y el comando que nos permitirá controlar este aspecto es pmap.

Cuando hablamos de memoria, sabemos que son los parámetros más incomprendidos de todo el sistema, especialmente cuando se trata del sistema UNIX, ya que su flujo de trabajo de memoria es diferente a Linux, pero la administración de memoria de Unix no lo veremos en este artículo, sino que hablaremos principalmente de herramientas simples que podemos usar para evaluar la utilización de memoria por un proceso o un sistema en general.
Dos áreas principales son la memoria Kernel y la memoria de usuario, ahora vamos a ampliar un poco estos términos.

Memoria Kernel: Es la memoria administrada por el kernel que se compone de...
Texto: donde se almacena las partes de solo lectura del programa, este suele ser el código de instrucción real del programa; varias instancias del mismo programa pueden compartir esta área de memoria.

Datos estáticos: el área donde se asigna datos fijos en la memoria, esto es generalmente para variables globales y miembros estáticos de la clase C++. El sistema operativo asigna una copia de esta área de memoria para cada instancia del programa.

Memoria Arena también conocida como espacio de pausa: el área donde se almacena la memoria dinámica en tiempo de ejecución, la arena de memoria consiste en el cúmulo de memoria que no están utilizando los procesos y que puede ser removida toda de una sola vez.

Pila: cada vez que un programa realiza una llamada de función, el estado de esta debe guardarse en la pila, la pila crece desde una dirección de memoria más alta a una dirección de memoria inferior; existe una arena y una pila de memoria únicas para cada instancia del programa.

Memoria de usuario: Es la memoria usada por el usuario y es llamada por rutinas de memoria como malloc (), realloc, free (), callo ().

Entonces, la memoria juega un papel importante en el rendimiento del sistema y es uno de los componentes más críticos para analizar, tenemos muchas herramientas a través de las cuales se puede medir el rendimiento del sistema, pero a veces fallan, especialmente cuando no estamos verificando un laboratorio local sino una caja de producción críticamente activa con 60G de RAM, CPU multinúcleo y una gran cantidad de aplicaciones generando millones de conexiones y creando cuellos de botella de rendimiento, en tales escenarios, ejecutar un comando superior definitivamente no reflejará el uso real de memoria generalmente no confiamos mucho en ps o en los comandos principales ya que informan el uso de memoria del proceso sobre el concepto de que es el único proceso que se ejecuta en el sistema operativo, pero en realidad Linux también tiene algunos conceptos de librerías compartidas, por lo que hacemos un ps o top en un proceso para obtener el uso, ignora otras cosas relacionadas con la memoria, como las secciones compartidas, privadas que muestran el uso real de la memoria, el siguiente comando nos ayudará a ver los procesos exactos en ejecución.


Lo que podemos concluir es que el uso de la memoria de procesos en Linux es una cuestión compleja; no podemos simplemente ejecutar el comando ps y saber que está pasando.

Así  que podemos usar la herramienta pmap, vamos a definirlo oficialmente según la página MAN:

Entonces podemos ver el mapa de proceso de cualquier proceso y su consumo real y no real de memoria, el promedio impreciso reportado por el proceso superior.

Filosofía Linux
La filosofía en Linux es que un recurso no utilizado es un recurso desperdiciado. Por lo tanto, el kernel utilizará la mayor cantidad de RAM posible para almacenar en caché la información de los sistemas de archivos y discos locales y remotos. Esto aumenta con el tiempo a medida que las lecturas y escrituras se realizan en el sistema tratando de mantener los datos almacenados en la memoria RAM lo más relevantes posible para los procesos que se han estado ejecutando en nuestro sistema. Este caché es reportado por el sistema como la suma de dos números, búferes y cache. El caché se recupera, no en el momento de la salida del proceso (puede iniciar otro proceso pronto que necesita los mismos datos), pero a pedido, es decir, cuando se inicia un proceso que necesita mucha memoria para ejecutarse, el kernel de Linux puede reclamar la memoria que había estado almacenando datos en caché y dársela al nuevo proceso.

Dicho esto, hay algunas cosas que se informan como 'cacheadas' pero que no están directamente disponibles para el kernel:

1. Mmaps anónimos, que no están respaldados por un archivo, sino por el área de intercambio.

2. Regiones de memoria compartida, tanto System V IPC como POSIX / dev / shm.

3. Algunos servidores de aplicaciones y bases de datos (por ejemplo, SAP y Oracle DB) hacen uso de esas instalaciones de memoria compartida como una forma muy conveniente de compartir datos entre múltiples procesos.

Aunque tanto los mmaps anónimos como las regiones de memoria compartida se pueden intercambiar de la memoria al disco, por lo que teóricamente sus aplicaciones podrían usar esa memoria, es probable que nuestro sistema experimente problemas de rendimiento en caso de que esto ocurra.

En consecuencia, si nuestro sistema está utilizando cualquiera de las instalaciones anteriores, debemos tener en cuenta que no toda la memoria informada como "almacenada en caché" debe considerarse como disponible para sus aplicaciones.

Sin embargo, estos se reportarán en contra de todos los procesos asociados, a diferencia del caché normal que no forma parte del espacio de direcciones de ningún proceso en ejecución, sino que es simplemente un mapeo del kernel.

Por ejemplo (las unidades están en megabytes):

En este ejemplo, en lo que respecta a las aplicaciones, el sistema está utilizando solo 1763 MB de memoria y tiene 4441 MB libres y disponibles para usar si es necesario (siempre que no haya mapas de memoria anónimos o regiones de memoria compartida).

Veamos otro  ejemplo:

Los elementos a tener en cuenta aquí son:

El escenario anterior explica un ejemplo perfecto del uso gratuito de herramientas, ya que la comprensión de todos y cada uno de los parámetros del resultado puede derivar conclusiones asombrosas y puede reducir el capital total de gastos de actualización de servidores en el mismo.

Conclusión
Esta herramienta es básica en un sistema Linux; en el caso que necesitemos saber más sobre los procesos que se ejecutan en nuestro sistema. Como de costumbre, siempre podemos encontrar más detalles desde la terminal, ya sea con man ps o ps --help.

Así que aquí hemos discutido free y pmap para obtener la utilización exacta de la memoria y podemos evitar los vagos resultados superiores en escenarios críticos de producción.

Saludos especiales a tod@s espero este aporte pueda ser de ayuda. Si les fue útil compartan y comenten.

No comments:

Post a Comment