LFCS: supervisar l'ús de recursos dels processos de Linux i establir límits de processos per usuari - Part 14


A causa de les modificacions recents en els objectius de l'examen de certificació LFCS amb efecte a partir del 2 de febrer de 2016, també estem afegint els articles necessaris a la sèrie LFCE.

Tots els administradors de sistemes Linux han de saber com verificar la integritat i la disponibilitat del maquinari, els recursos i els processos clau. A més, establir límits de recursos per usuari també ha de formar part del seu conjunt d'habilitats.

En aquest article explorarem algunes maneres d'assegurar-nos que el sistema, tant el maquinari com el programari, es comporten correctament per evitar possibles problemes que puguin causar un temps d'aturada de producció inesperat i pèrdues de diners.

Estadístiques de processadors d'informes de Linux

Amb mpstat podeu veure les activitats de cada processador individualment o del sistema en conjunt, tant com una instantània única o dinàmica.

Per utilitzar aquesta eina, haureu d'instal·lar sysstat:

# yum update && yum install sysstat              [On CentOS based systems]
# aptitutde update && aptitude install sysstat   [On Ubuntu based systems]
# zypper update && zypper install sysstat        [On openSUSE systems]

Llegiu més sobre sysstat i les seves utilitats a Aprèn Sysstat i les seves utilitats mpstat, pidstat, iostat i sar a Linux

Un cop instal·lat mpstat, utilitzeu-lo per generar informes d'estadístiques dels processadors.

Per mostrar 3 informes globals d'utilització de la CPU (-u) per a totes les CPU (tal com s'indica per -P ALL) en un interval de 2 segons, feu:

# mpstat -P ALL -u 2 3
Linux 3.19.0-32-generic (linux-console.net) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:41:07  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:09  IST  all    5.85    0.00    1.12    0.12    0.00    0.00    0.00    0.00    0.00   92.91
11:41:09  IST    0    4.48    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   94.53
11:41:09  IST    1    2.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:09  IST    2    6.44    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   92.57
11:41:09  IST    3   10.45    0.00    1.99    0.00    0.00    0.00    0.00    0.00    0.00   87.56

11:41:09  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:11  IST  all   11.60    0.12    1.12    0.50    0.00    0.00    0.00    0.00    0.00   86.66
11:41:11  IST    0   10.50    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   88.50
11:41:11  IST    1   14.36    0.00    1.49    2.48    0.00    0.00    0.00    0.00    0.00   81.68
11:41:11  IST    2    2.00    0.50    1.00    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:41:11  IST    3   19.40    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   79.60

11:41:11  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:13  IST  all    5.69    0.00    1.24    0.00    0.00    0.00    0.00    0.00    0.00   93.07
11:41:13  IST    0    2.97    0.00    1.49    0.00    0.00    0.00    0.00    0.00    0.00   95.54
11:41:13  IST    1   10.78    0.00    1.47    0.00    0.00    0.00    0.00    0.00    0.00   87.75
11:41:13  IST    2    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:13  IST    3    6.93    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   92.57

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    7.71    0.04    1.16    0.21    0.00    0.00    0.00    0.00    0.00   90.89
Average:       0    5.97    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   92.87
Average:       1    9.24    0.00    1.16    0.83    0.00    0.00    0.00    0.00    0.00   88.78
Average:       2    3.49    0.17    1.00    0.00    0.00    0.00    0.00    0.00    0.00   95.35
Average:       3   12.25    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   86.59

Per veure les mateixes estadístiques per a una CPU específica (CPU 0 a l'exemple següent), utilitzeu:

# mpstat -P 0 -u 2 3
Linux 3.19.0-32-generic (linux-console.net) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:42:08  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:42:10  IST    0    3.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:42:12  IST    0    4.08    0.00    0.00    2.55    0.00    0.00    0.00    0.00    0.00   93.37
11:42:14  IST    0    9.74    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   89.74
Average:       0    5.58    0.00    0.34    0.85    0.00    0.00    0.00    0.00    0.00   93.23

La sortida de les ordres anteriors mostra aquestes columnes:

  1. CPU: número de processador com a nombre enter, o la paraula tot com a mitjana per a tots els processadors.
  2. %usr: percentatge d'utilització de la CPU mentre s'executen aplicacions a nivell d'usuari.
  3. %nice: igual que %usr, però amb una bona prioritat.
  4. %sys: percentatge d'utilització de la CPU que s'ha produït durant l'execució d'aplicacions del nucli. Això no inclou el temps dedicat a tractar interrupcions o a gestionar el maquinari.
  5. %iowait: percentatge de temps en què la CPU determinada (o tota) estava inactiva, durant el qual hi havia una operació d'E/S que consumeix molts recursos programada en aquesta CPU. Podeu trobar una explicació més detallada (amb exemples) aquí.
  6. %irq: percentatge de temps dedicat al servei d'interrupcions de maquinari.
  7. %soft: igual que %irq, però amb interrupcions de programari.
  8. %robar: percentatge de temps dedicat a l'espera involuntària (temps robat o robat) quan una màquina virtual, com a convidada, està \guanyant l'atenció de l'hipervisor mentre competeix per la(s) CPU(s) . Aquest valor s'ha de mantenir el més petit possible. Un valor alt en aquest camp significa que la màquina virtual s'està aturant, o ho serà aviat.
  9. %guest: percentatge de temps dedicat a executar un processador virtual.
  10. %idle: percentatge de temps en què les CPU no estaven executant cap tasca. Si observeu un valor baix en aquesta columna, això és una indicació que el sistema està col·locat sota una càrrega pesada. En aquest cas, haureu de mirar més de prop la llista de processos, tal com parlarem d'aquí a un minut, per determinar què l'està causant.

Per posar el processador sota una càrrega una mica alta, executeu les ordres següents i, a continuació, executeu mpstat (tal com s'indica) en un terminal independent:

# dd if=/dev/zero of=test.iso bs=1G count=1
# mpstat -u -P 0 2 3
# ping -f localhost # Interrupt with Ctrl + C after mpstat below completes
# mpstat -u -P 0 2 3

Finalment, compareu amb la sortida de mpstat en circumstàncies normals:

Com podeu veure a la imatge de dalt, la CPU 0 estava sota una gran càrrega durant els dos primers exemples, tal com indica la columna %idle.

A la següent secció parlarem de com identificar aquests processos que fan falta de recursos, com obtenir més informació sobre ells i com prendre les mesures adequades.

Informes de processos Linux

Per llistar processos ordenant-los per ús de la CPU, utilitzarem la coneguda ordre ps amb -eo (per seleccionar tots els processos amb un format definit per l'usuari) i --sort (per especificar un ordre d'ordenació personalitzat), com ara:

# ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

L'ordre anterior només mostrarà el PID, el PPID, l'ordre associada al procés i el percentatge d'ús de CPU i RAM ordenat pel percentatge d'ús de CPU en ordre descendent. . Quan s'executa durant la creació del fitxer .iso, aquí teniu les primeres línies de la sortida:

Un cop hem identificat un procés d'interès (com ara el que té PID=2822), podem navegar a /proc/PID (/proc/2822 en aquest cas) i feu una llista de directoris.

Aquest directori és on es guarden diversos fitxers i subdirectoris amb informació detallada sobre aquest procés en particular mentre s'executa.

  1. /proc/2822/io conté estadístiques d'IO per al procés (nombre de caràcters i bytes llegits i escrits, entre d'altres, durant les operacions d'IO).
  2. /proc/2822/attr/current mostra els atributs de seguretat SELinux actuals del procés.
  3. /proc/2822/cgroup descriu els grups de control (cgroups per abreujar) als quals pertany el procés si l'opció de configuració del nucli CONFIG_CGROUPS està habilitada, que podeu verificar amb:

# cat /boot/config-$(uname -r) | grep -i cgroups

Si l'opció està activada, hauríeu de veure:

CONFIG_CGROUPS=y

Utilitzant cgroups podeu gestionar la quantitat d'ús de recursos permès per procés, tal com s'explica als capítols 1 a 4 de la secció Grups de control de la documentació del servidor Ubuntu 14.04.

El /proc/2822/fd és un directori que conté un enllaç simbòlic per a cada descriptor de fitxer que hagi obert el procés. La imatge següent mostra aquesta informació per al procés que es va iniciar a tty1 (el primer terminal) per crear la imatge .iso:

La imatge de dalt mostra que stdin (descriptor de fitxer 0), stdout (descriptor de fitxer 1) i stderr (descriptor de fitxer 2) estan assignats a /dev/zero, /root/test.iso i /dev/tty1, respectivament.

Es pot trobar més informació sobre /proc al document \El sistema de fitxers /proc conservat i mantingut per Kernel.org, i al Manual del programador de Linux.

Establir límits de recursos per usuari a Linux

Si no aneu amb compte i permeteu que qualsevol usuari executi un nombre il·limitat de processos, és possible que eventualment experimenteu un tancament inesperat del sistema o que us bloquegeu quan el sistema entra en un estat inutilitzable. Per evitar que això passi, hauríeu de posar un límit al nombre de processos que els usuaris poden iniciar.

Per fer-ho, editeu /etc/security/limits.conf i afegiu la línia següent a la part inferior del fitxer per establir el límit:

*   	hard	nproc   10

El primer camp es pot utilitzar per indicar un usuari, un grup o tots ells (*), mentre que el segon camp imposa un límit dur al nombre de processos (nproc) a 10. Per aplicar els canvis, tancar la sessió i tornar a iniciar és suficient.

Per tant, vegem què passa si un determinat usuari que no sigui root (ja sigui legítim o no) intenta iniciar una bomba de forquilla de shell. Si no haguéssim implementat límits, això inicialment llançaria dues instàncies d'una funció i després duplicaria cadascuna d'elles en un bucle interminable. Per tant, finalment portaria el vostre sistema a un rastreig.

Tanmateix, amb la restricció anterior en vigor, la bomba de forquilla no té èxit, però l'usuari encara es bloquejarà fins que l'administrador del sistema mati el procés associat amb ella:

SUGGERIMENT: Altres possibles restriccions possibles per ulimit estan documentades al fitxer limits.conf.

Linux Altres eines de gestió de processos

A més de les eines comentades anteriorment, un administrador del sistema també pot necessitar:

a) Modificar la prioritat d'execució (ús dels recursos del sistema) d'un procés mitjançant renice. Això vol dir que el nucli assignarà més o menys recursos del sistema al procés en funció de la prioritat assignada (un nombre conegut com a \amabilitat en un interval de -20 a 19). codi>).

Com més baix sigui el valor, més gran serà la prioritat d'execució. Els usuaris habituals (que no sigui root) només poden modificar la qualitat dels processos que tenen a un valor més alt (és a dir, una prioritat d'execució més baixa), mentre que root pot modificar aquest valor per a qualsevol procés i pot augmentar-lo o disminuir-lo.

La sintaxi bàsica de renice és la següent:

# renice [-n] <new priority> <UID, GID, PGID, or empty> identifier

Si l'argument després del nou valor de prioritat no està present (buit), s'estableix en PID per defecte. En aquest cas, la qualitat del procés amb PID=identifier s'estableix en .

b) Interrompre l'execució normal d'un procés quan sigui necessari. Això es coneix comunament com matar el procés. Sota el capó, això significa enviar al procés un senyal per acabar la seva execució correctament i alliberar els recursos utilitzats de manera ordenada.

Per matar un procés, utilitzeu l'ordre kill de la següent manera:

# kill PID

Alternativament, podeu utilitzar pkill per finalitzar tots els processos d'un propietari determinat (-u), o d'un propietari del grup (-G), o fins i tot aquells processos que tenen un PPID en comú (-P). Aquestes opcions poden anar seguides per la representació numèrica o el nom real com a identificador:

# pkill [options] identifier

Per exemple,

# pkill -G 1000

matarà tots els processos propietat del grup amb GID=1000.

I,

# pkill -P 4993 

matarà tots els processos el PPID dels quals sigui 4993.

Abans d'executar un pkill, és una bona idea provar primer els resultats amb pgrep, potser utilitzant l'opció -l també per llistar els noms dels processos. Pren les mateixes opcions, però només retorna els PID dels processos (sense fer cap altra acció) que es matarien si s'utilitza pkill.

# pgrep -l -u gacanepa

Això s'il·lustra a la següent imatge:

Resum

En aquest article hem explorat algunes maneres de controlar l'ús dels recursos per verificar la integritat i la disponibilitat dels components de maquinari i programari crítics en un sistema Linux.

També hem après com prendre les mesures adequades (ja sigui ajustant la prioritat d'execució d'un procés determinat o finalitzant-lo) en circumstàncies inusuals.

Esperem que els conceptes explicats en aquest tutorial hagin estat útils. Si teniu cap pregunta o comentari, no dubteu a posar-vos en contacte amb nosaltres mitjançant el formulari de contacte següent.