Está en la página 1de 17

IES Ingeniero de la Cierva - Universidad de Murcia

Proyecto Universidad-Secundaria Incorporacion de contenidos de programacion paralela en la


rama de tecnologas informaticas

Modulo: Implantacion de Sistemas


Operativos
Ttulo: ASIR, Administracion de Sistemas
Informaticos en Red
Boletn de Practicas Supervision del rendimiento del sistema

Curso /
Indice
1. Introduccion 2

2. Objetivos 2

3. Ordenes utilizadas 2

4. Control y gestion de la CPU 3


4.1. La orden uptime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.2. La orden pstree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.3. La orden ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.4. La orden top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.5. La orden mpstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.6. La orden w . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.7. La orden ulimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.8. Numero nice y prioridad de procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.9. Envo de senales a procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.10. Procesos por lotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

5. Control y gestion de la memoria 9


5.1. La orden vmstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.2. Espacio para paginacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

6. Control y gestion de los sistemas de ficheros 11


6.1. La orden df . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.2. La orden du . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

7. Ejercicios 12

1
1. Introduccion
Es muy importante tener informacion esencial del rendimiento del sistema: procesos en ejecucion,
cantidad de memoria disponible, espacio disponible en disco, numero de particiones, etc. La eficiencia
de un sistema en un momento concreto es el resultado de la demanda total de los recursos, y de como
trata el sistema los procesos que demandan estos recursos. Los problemas de rendimiento pueden ser
debidos a muchas causas, incluyendo la falta de recursos y el control ineficiente de los que disponemos
Como administradores del sistema tenemos que ser capaces de controlar el rendimiento del sistema de
una manera eficiente, detectar posibles problemas que aparezcan, y, si fuese posible, solucionarlos.

2. Objetivos
Al finalizar este boletn vamos a ser capaces de:
Controlar del uso de la CPU: que procesos estan en ejecucion, carga media del sistema, porcentaje
de uso de la CPU, etc.
Priorizar la ejecucion de los procesos, asignando para ellos diferentes valores de prioridades.
Enviar senales a los procesos en ejecucion: terminarlos, finalizarlos, etc.
Limitar algunas de las acciones que se pueden realizar en un interprete de ordenes (numero
maximo de procesos en ejecucion, numero maximo de ficheros abiertos, etc.).
Programar tareas para que se ejecuten en un momento concreto, o programar tareas para que
se ejecuten con una cierta periodicidad.
Controlar el uso de la memoria: cantidad de memoria RAM ocupada o libre, cantidad de la
memoria de intercambio ocupada o libre, cantidad de memoria usada por un proceso, etc.
Controlar el espacio usado en un sistema de ficheros, o bien el espacio disponible. Numero de
ficheros creados en un sistema de ficheros y cuantos hay disponibles.

3. Ordenes utilizadas
Las ordenes que vamos a usar son:
uptime
pstree
ps
top
mpstat
vmtat
w
ulimit
nice y renice
kill y killall
free
mkswap, swapon, etc.
df y du

2
4. Control y gestion de la CPU
En esta seccion de este boletn nos vamos a centrar en el control de la CPU como principal recurso
del sistema.

4.1. La orden uptime


La orden uptime muestra la hora actual, cuanto tiempo lleva en marcha el sistema, el numero de
terminales de usuario abiertas, y la carga media del sistema en forma de numero promedio de procesos
en los ultimos 1, 5 y 15 minutos. Los procesos que se tienen en cuenta son tanto los que estan en
estado ejecutable (estado R), es decir, en ejecucion o listo, como los que estan en estado de bloqueado
no interrumpible a la espera una operacion de E/S de corta duracion (estado D).

# uptime
18:00:41 up 3 min, 1 users, load average: 1.53, 0.97, 0.40

4.2. La orden pstree


La orden pstree muestra los procesos del sistema en una estructura de arbol que es muy util para
poder observar las relaciones padre-hijo entre ellos, comenzando por el ancestro de todos, el proceso
systemd. En el formato en que se muestra esta informacion, cuando existen varios procesos identicos,
hijos del mismo padre, en lugar de repetir la rama de arbol, se simplifica la notacion, colocandose una
sola rama con el nombre del proceso entre corchetes junto al contador de repeticiones. Los threads
que se crean desde un proceso se muestran como una rama a partir de la del proceso creador, con el
nombre del proceso entre llaves junto al contador de repeticiones. En siguiente ejemplo, vemos que el
proceso systemd tiene, entre otros, 2 procesos hijos identicos, de nombre abrt-watch- log. Por
otro lado, se observa que el proceso accounts-daemon genera durante su ejecucion 4 threads.

systemd---+-NetworkManager-+-chclient
|-2*[abrt-watch-log]
|-abrtd
|-accounts-daemon--4*[{accounts-daemon}]
|
.
.
.

4.3. La orden ps
La orden ps muestra informacion de la actividad de los procesos en ejecucion. Si no anadimos
ningun parametro, ps mostrara los procesos del usuario actual. Los parametros mas basicos son los
siguientes:

-a: Lista los procesos de todos los usuarios.

-u: Lista informacion del proceso como, por ejemplo, el usuario que lo esta ejecutando, la
utilizacion de CPU y memoria, etc.

-x: Lista procesos de todas las terminales y usuarios.

-l: Muestra informacion que incluye el UID y el valor nice (ver seccion 4.8).

Algunos de los datos mas importantes que nos muestra por cada proceso son:

USER: usuario que lanzo el programa.

PID: identificador del proceso.

3
PPID: identificador del proceso padre.

%CPU: porcentaje entre el tiempo usado realmente y el que lleva en ejecucion.

%MEM: fraccion de memoria consumida (es una estimacion).

VSZ: tamano virtual del proceso (codigo+datos+pila), en KB.

RSS: memoria real usada, en KB.

TTY: terminal asociado con el proceso.

STAT: estado del proceso:

R: en ejecucion o listo.
N: prioridad baja (valor mayor que 0).
S: durmiendo.
<: prioridad alta (valor menor que 0).
T: parado.
Z: proceso zombie.
D: durmiendo ininterrumpiblemente (normalmente por E/S de corta duracion).
l: tiene multi-threads.
+: proceso ejecutandose en primer plano.

4.4. La orden top


La orden top proporciona una vision continuada de la actividad del procesador en tiempo real,
muestra las tareas que mas uso hacen de la CPU, y tiene una interfaz interactiva para manipular
procesos.
Las cinco primeras lneas muestran informacion general del sistema:

Las estadsticas de la orden uptime.

Estadsticas sobre los procesos del sistema (numero de procesos, procesos en ejecucion, durmien-
do, parados o zombies).

El estado actual de la CPU (porcentaje en uso por usuarios, por el sistema, por procesos con
valor nice positivo (ver seccion 4.8), por procesos esperando E/S, desocupada, tratando inte-
rrupciones hardware o software, en espera involuntaria por virtualizacion).

La memoria (memoria total disponible, usada, libre, cantidad usada en buffers y en memoria
cache de paginas).

El espacio de swap (swap total disponible, usada y libre).

Los datos de la parte inferior son en su mayora similares a los del ps, indicando para cada proceso:

Columna PR: El valor de la prioridad dinamica (ver seccion 4.8).

Columna NI: El valor nice, que indica la prioridad base (ver seccion 4.8).

Columna VIRT: La cantidad de memoria virtual que usa. Se corresponde con la columna VSZ
de ps.

Columna RES: La cantidad de memoria fsica, no intercambiada a disco, que usa. Se corresponde
con la columna RSS de ps.

4
Columna SHR: La cantidad de memoria que podra ser potencialmente compartida con otros
procesos.

Columna S: El estado del proceso.

Columna %CPU: El porcentaje de CPU usado durante el intervalo de actualizacion del top. En
ps esta columna corresponde al porcentaje de tiempo que ha estado en la CPU desde que se
creo el proceso.

Columna %MEM: El porcentaje de memoria RAM ocupada.

Columna TIME+: El total de tiempo de CPU utilizado desde que se creo. Se corresponde con la
columna TIME de ps.

Por defecto, el listado de los procesos se hace por orden decreciente de uso de la CPU, actua-
lizandose la lista normalmente cada 5 segundos.
Una ventaja de top respecto a ps es que top actualiza periodicamente la informacion que aparece
por pantalla. Otra ventaja es que permite ordenar los procesos segun un determinado criterio. Por
ejemplo, si pulsamos M, top ordenara los procesos segun la columna %MEM, es decir, segun el por-
centaje de memoria RAM ocupada, mientras que si pulsamos P los ordenara por consumo de CPU
(columna %CPU). Una desventaja de top, sin embargo, es que no muestra informacion para todos los
procesos en ejecucion en el sistema (ya que, por lo general, hay mas procesos que lneas se pueden ver
en pantalla). La orden top nos puede ser muy util para saber si hay algun proceso que puede estar
afectando al rendimiento del sistema, haciendo que este vaya anormalmente lento.
La orden top permite realizar una serie de tareas sobre los procesos, como por ejemplo:

Cambiar la prioridad de alguno utilizando la opcion r (ver seccion 4.8).

Matar o enviar una senal con la opcion k.

Ordenarlos segun diferentes criterios (por PID con N, uso de CPU con P, tiempo con T, etc.).

Con n se cambia el numero de procesos que se muestran.

Para salir se utiliza la letra q.

4.5. La orden mpstat


La orden mpstat muestra estadsticas del procesador (o procesadores) junto con la media global
de todos los datos mostrados:

CPU: numero del procesador.

%user: porcentaje de uso de la CPU con tareas a nivel de usuario.

%nice: porcentaje de uso de la CPU con tareas a nivel de usuario con prioridad base (numero
nice) mayor que 0 (ver seccion 4.8).

%sys: porcentaje de uso de la CPU para tareas del sistema (no incluye el tratamiento de
interrupciones) (modo nucleo).

%iowait: porcentaje de tiempo que la CPU estaba desocupada durante el cual el sistema
tiene pendientes peticiones de e/s de disco.

%irq: porcentaje de tiempo que la CPU gasta con interrupciones.

%soft: porcentaje de tiempo que la CPU gasta con interrupciones software.

%steal: porcentaje de tiempo empleado en una espera involuntaria de una CPU virtual mien-
tras que el hypervisor esta sirviendo otro procesador virtual (temas de virtualizacion).

5
%idle: porcentaje de tiempo que la CPU estaba desocupada y el sistema no tiene peticiones
de disco pendientes.

intr/s: numero de interrupciones por segundo recibidas por el procesador.

La sintaxis sera:

mpstat [intervalo] [numero]

donde los argumentos son:

intervalo: Cada cuantos segundos debe mostrar los datos.

numero: Cuantos muestreos se solicitan.

Ejemplo:

# mpstat 10 5
Linux 2.6.27.37-170.2.104.fc10.x86_64 (ditec.um.es) 29/04/13

13:18:46 CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
13:18:56 all 0,02 0,00 0,02 0,05 0,02 0,00 0,00 99,88 2167,60
13:19:06 all 0,23 0,00 0,70 0,18 0,00 0,00 0,00 98,90 2301,30
13:19:16 all 0,02 0,00 0,02 0,00 0,00 0,00 0,00 99,95 2188,50
13:19:26 all 0,00 0,00 0,00 0,02 0,00 0,00 0,00 99,98 2162,20
13:19:36 all 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00 2179,90
Media: all 0,05 0,00 0,15 0,05 0,00 0,00 0,00 99,74 2199,90

En caso de que no se le pasen argumentos, esta orden muestra la informacion estadstica que
corresponde al periodo de tiempo desde el arranque del sistema hasta el momento actual.

4.6. La orden w
La orden w muestra quien esta conectado y que esta haciendo. Entre la informacion mostrada
encontramos:

JCPU: tiempo usado por todos los procesos asociados al terminal correspondiente (incluye los
procesos en background actuales, pero no los pasados).

PCPU: tiempo de CPU usado por el proceso actual.

4.7. La orden ulimit


La orden ulimit permite controlar los recursos disponibles para un shell y los procesos lanzados
por ese shell. Cada shell tendra sus restricciones, que heredaran los procesos creados desde este shell,
pero, a su vez, cada uno estos procesos puede lmitar aun mas el uso de cada recurso.
Usando esta orden con las opciones -H y -S establecemos un lmite hard y soft, respectivamente,
para el recurso especificado. Para un proceso de un usuario normal, el lmite hard no se puede incre-
mentar una vez que se ha establecido, solamente podra hacerse mas restrictivo. Por su parte, el lmite
soft puede variarse cuando se desee, teniendo como tope maximo el valor establecido previamente para
el lmite hard.
Las opciones de uso mas comunes son:

-a: Muestra todos los lmites que actualmente estan establecidos para los diferentes recursos.

-c: Establece el tamano maximo de los ficheros core.

-d: Establece el tamano maximo del segmento de datos.

6
-f: Establece el tamano maximo para un fichero.

-l: Establece el tamano maximo de memoria que puede ser bloqueada.

-m: Establece el tamano maximo de la memoria RAM.

-n: Establece el numero maximo de ficheros abiertos.

-p: Establece el tamano de las tuberas (en bloques de 512 bytes).

-s: Establece el tamano maximo de la pila.

-t: Establece el tiempo maximo que se puede utilizar por cada segundo de CPU.

-u: Establece el numero maximo de procesos disponibles para un usuario.

-v: Establece el tamano maximo de memoria virtual.

4.8. Numero nice y prioridad de procesos


Linux realiza una planificacion por prioridades dinamicas. Inicialmente, al lanzar un proceso se le
asigna un valor de prioridad base (el numero nice), cuyo valor marca la prioridad del proceso:

Valores bajos (negativos): mas prioridad.

Valores altos (positivos): menos prioridad.

El rango de prioridad base va desde -20 (maxima prioridad) a 20 (mnima prioridad), teniendo
como valor especial el 19 (o 20) que indica que al proceso solo se le da la CPU cuando nadie mas
la quiera. Por defecto, cada proceso hereda la prioridad base de su proceso padre. Asignar un valor
negativo o que disminuya (mejore) la prioridad base del proceso solo puede hacerlo el root.
Finalmente, la prioridad dinamica del proceso se calcula en funcion de la prioridad base, teniendo
en cuenta factores como el consumo de CPU realizado, ejecucion de codigo dentro del nucleo, etc.
Ordenes relacionadas:

nice -incremento orden a ejecutar

Ejemplo: Ejecuta el proceso konqueror, aumentando en 5 el valor por defecto del numero
nice para empeorar la prioridad de este proceso:

nice -5 konqueror

Ejemplo: Ejecuta el proceso konqueror, disminuyendo en 10 el valor por defecto del nume-
ro nice para mejorar la prioridad de este proceso (solo puede hacerlo el root):

nice --10 konqueror

renice nueva prioridad pid

Ejemplo: Fija el valor del numero nice en 14 para el proceso cuyo PID es 890:

renice 14 890

7
4.9. Envo de senales a procesos
En ocasiones es necesario enviar senales a los procesos para pararlos, con la senal SIGSTOP (19),
para eliminarlos, con la senal SIGKILL (9), para hacer que continuen, con la senal SIGCONT (18),
etc. Este envo se realiza mediante la orden kill, con la sintaxis:

kill [-senal] pids

La senal que se enva por defecto es SIGTERM (15), que ordena al proceso receptor que termine
su labor, de forma correcta y controlada. Esta senal puede ser capturada. En cambio, si la senal que
se enva es la SIGKILL (9) tendremos la seguridad que el proceso receptor finaliza.
Se puede hacer un envo mas generico usando el nombre del proceso, en lugar de su PID, con la
orden killall, siguiendo la sintaxis:

killall [-senal] nombre_proceso

O incluso enviar una senal usando el nombre u otros atributos o criterios (uid, gid, terminal, ...)
mediante las ordenes pkill o skill.
Finalmente, habra que indicar que hay procesos que no mueren a pesar de recibir la senal KILL:

Procesos zombies.

Procesos que esperan una peticion de E/S hecha a un dispositivo de disco.

Procesos que esperan un recurso va NFS que no esta disponible.

4.10. Procesos por lotes


En ocasiones, se necesita ejecutar ordenes en un momento concreto, o con cierta periodicidad, y
que no requieran de nuestro control absoluto.
La orden at se utiliza para ejecutar tareas a una determinada hora, pudiendo recibir como parame-
tro un fichero de texto con las ordenes, o bien recibir estas ordenes desde teclado, con un prompt
especial (>), hasta finalizar con Ctrl+D.
El demonio encargado de ejecutar las ordenes es atd, de manera que si este demonio no esta en
ejecucion las tareas no se lanzaran. La orden atq sirve para consultar la lista de ordenes pendientes,
mientras que con atrm podremos eliminar algunas de estas ordenes.
Ejemplo:

# at 18:40
at> /sbin/controlimpresora
at> /bin/ls /tmp/ > /home/pilar/salida_ls_at
at> <EOT> # Finalizar con Ctrl+D
job 10 at 2010-01-29 18:40

Para ejecutar tareas periodicamente podemos hacer uso del servicio cron mediante la orden
crontab. Opciones de la orden crontab:

-e: para anadir/modificar tareas, se abre un editor (normalmente vim) en el que indicar, segun
el formato, tarea a lanzar y periodicidad.

-l: para listar las tareas programadas.

Formato de cada lnea de planificacion: minutos hora dia mes da semana tarea
Ejemplos:

8
05 09 * * * tareadiaria #cada da a las 9:05
15 14 1 * * tareames #primer da del mes, a las 14:15
00 22 * * 1-5 tareasemanal #de lunes a viernes, a las 22:00
23 0-23/2 * * * tareacada2horas #a las 2, 4, etc., y 23 minutos
05 04 * * sun tareadomingos #domingo a las 4:05

El fichero /etc/cron.d/0hourly es el fichero para el servicio cron del sistema. Esta preparado
para ejecutar, usando el script run-parts, una serie de tareas cada hora. Las tareas a ejecutar se
copian como ficheros ejecutables en el directorio /etc/cron.hourly/. De esta manera, el fichero
/etc/cron.d/0hourly podra terner un formato como este:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly

Si observamos entre las tareas planificadas para ejecutarse cada hora (ls /etc/cron.hourly/),
encontramos el ejecutable anacron. El anacron sirve de complemento al propio servicio cron,
pues se trata de un planificador de tareas periodicas (diarias, semanales o mensuales) que no asume
que la maquina tenga que estar encendida continuamente. De este forma, cada hora se pondra a
funcionar este planificador, que leera la lista de trabajos especificados en el fichero de configuracion
/etc/anacrontab y los pondra a funcionar, usando el script run-parts, teniendo en cuenta el
periodo de ejecucion y el margen de posible variacion en la hora de comienzo establecidos para cada
trabajo en dicho fichero de configuracion. Un ejemplo de fichero /etc/anacrontab podra ser:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO:root
#the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#
#period delay
#in days in minutes job-identifier command
#------- ---------- -------------- --------------------------------
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

5. Control y gestion de la memoria


La memoria tienen un gran efecto sobre el rendimiento global del sistema, por tanto es necesario
que el sistema disponga de una cantidad de memoria adecuada. La paginacion y el intercambio son
las tecnicas que Linux usa para distribuir la memoria disponible entre los procesos cuando el conjunto
total de memoria que necesitan excede la memoria fsica. El intercambio consiste en llevar un proceso
a disco para liberar la memoria que esta utilizando, posteriormente el proceso volvera a memoria para
continuar su ejecucion. La paginacion implica llevar parte de la memoria de los procesos en unidades
llamadas paginas a disco para liberar memoria, que se traeran posteriormente a memoria, cuando se
vuelvan a necesitar. Es responsabilidad del administrador la gestion de RAM y de la zona o espacio
de intercambio o swap.

9
5.1. La orden vmstat
La orden vmstat presenta informacion sobre la memoria virtual y tambien de los procesos en
ejecucion:

Procesos:

r: Numero de procesos esperando para ejecutar.


b: Numero de procesos bloqueados.

Memoria

swpd: Cantidad de memoria virtual (espacio de intercambio) empleada (en KBs).


free: Cantidad de memoria sin usar (en KBs).
buff: Cantidad de memoria empleada como buffers para E/S (en KBs).
cache: Cantidad de memoria empleada como cache.

Espacio de intercambio (swap)

si: Cantidad de memoria trada del espacio de intercambio a memoria (en KB/s).
so: Cantidad de memoria intercambiada al disco (en KB/s).

Entrada/Salida

bi: Bloques recibidos desde un dispositivo de bloques (en bloques/s).


bo: Bloques enviados a un dispositivo de bloques (en bloques/s).

Sistema

in: El numero de interrupciones por segundo, incluyendo el reloj.


cs: El numero de cambios de contexto por segundo.

La sintaxis de uso de esta orden es:

vmstat [intervalo] [numero]

siendo:

intervalo: Cada cuantos segundos debe mostrar los datos.

numero: Cuantos muestreos se solicitan.

Esta orden mostrara en cada lnea la informacion correspondiente a cada periodo de tiempo es-
tablecido, siendo la informacion que muestra en la primera lnea la que corresponde al intervalo de
tiempo desde que se arranco el sistema hasta el momento actual. En caso de que no se le pasen argu-
mentos, se muestra unicamente esta primera lnea. La informacion relativa a los procesos (columnas
r y b) y a la memoria (columnas swpd, free, buff y cache) corresponden a valores instantaneos
de cada momento.
Ejemplo:

# vmstat 5 3
procs ---------memory---------- -swap-- ---io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 92 187340 290868 2366352 0 0 48 79 0 0 1 0 99 0 0
0 0 92 186952 290872 2366352 0 0 0 31 2229 2063 0 0 100 0 0
0 0 92 186952 290888 2366344 0 0 0 12 2163 2038 0 0 100 0 0

10
5.2. Espacio para paginacion
El tamano adecuado para la particion de intercambio depende de varios aspectos:

Memoria requerida por los trabajos, tamano de los programas, numero de trabajos simultaneos,
etc.

Demanda del sistema.

En portatiles: para posibilitar la hibernacion, se necesita al menos tanto espacio como memoria
RAM.

Se puede utilizar una particion de intercambio o bien un fichero de paginacion. Normalmente es


preferible la particion frente al fichero porque se puede obtener mejor rendimiento si, por ejemplo, como
particion que se va a usar frecuentemente, se coloca en la parte mas rapida del disco (los cilindros
exteriores). Ademas, a la particion no le afectan los problemas de fragmentacion que puede tener
cualquier fichero individual, incluido un fichero de intercambio.
Se puede asignar valores de prioridad de uso mediante la opcion pri=valor (numeros altos signi-
fican mayor prioridad). En tiempo de arranque se activan todas las zonas de intercambio o paginacion
indicadas en el fichero /etc/fstab. As, por ejemplo, podemos activar en el arranque una particion
de intercambio y un fichero de intercambio, indicando que se use la particion prioritariamente, si
tenemos en el /etc/fstab:

/dev/sda2 swap swap defaults,pri=5 0 0


/.fichero_swap swap swap defaults,pri=3 0 0

Con la orden swapon se activa una particion de intercambio, mientras que con swapoff se
desactiva. Una vez desactivada una particion, esta se podra usar para otras cosas cuando tengamos
la garanta de que toda la informacion de la memoria virtual que maneja cada proceso que esta en
funcionamiento se encuentra ya definitivamente almacenada en la memoria secundaria asignada a
dicho proceso.
La creacion de un fichero de intercambio se realiza en varios pasos:

# dd if=/dev/zero of=/.fichero_swap bs=1048576 count=1024


# mkswap /.fichero_swap
# sync
# swapon /.fichero_swap

Con la orden free podemos obtener informacion sobre el estado de la memoria, (los campos tienen
el mismo significado que los mostrados en las primeras lneas al ejecutar la orden top).

6. Control y gestion de los sistemas de ficheros


6.1. La orden df
La orden df informa de la capacidad de un sistema de ficheros, del espacio libre y el usado y de su
punto de montaje. En su ejecucion por defecto, la primera columna muestra el nombre de la particion
tal como aparece en el directorio /dev. Las columnas siguientes muestran el espacio total, bloques
asignados y bloques disponibles. Por ejemplo:

# df
S.ficheros Bloques de 1K Usado Dispon Uso (porc) Montado en
/dev/sda3 497699 244502 227493 52 /
/dev/sda4 474321 388512 61310 86 /seguridad

11
La sintaxis de uso de esta orden es:

df [opciones]

siendo las opciones mas importantes:

-h: Muestra los tamanos en formato legible por humanos.

-i: Lista informacion de inodos en vez de uso de bloques.

-T: Muestra el tipo de sistema de archivos.

Es importante tener en cuenta que si el sistema de ficheros raz se quedase sin espacio, o bien
sin nodos-i libres, el sistema tendra problemas para funcionar normalmente, ya que, por ejemplo, no
podra arrancar.

6.2. La orden du
La orden du se usa para informar de cuanto espacio en disco ocupa un archivo o directorio. Esta
informacion la muestra en unidades de 1KB.
La sintaxis de uso de esta orden es:

du [opciones] directorios

siendo las opciones:

-a: Muestra el uso de espacio de cada archivo.

-s: En vez de el salida por defecto, informa solo de la suma total de cada uno de los archivos
especificados.

-L: Procesa los enlaces simbolicos usando el archivo o directorio al que el enlace simbolico
referencia, en vez de el enlace en s mismo.

-x: Evalua solo aquellos archivos que se encuentren en el mismo dispositivo que el directorio
especificado como argumento.

7. Ejercicios
Antes de empezar a resolver estos ejercicios es importante que tengas en cuenta lo siguiente:

Para realizar algunos de estos ejercicios es necesario tener el paquete sysstat. Comprueba con
rpm -q sysstat si esta instalado. En caso de que no lo este, realiza su instalacion con yum.

Al resolver los ejercicios no debes limitarte a ejecutar las ordenes de manera automatica. Lo
interesante es analizar los numeros que muestran, y ver como estos varan cuando producimos
cambios en el contexto de ejecucion. Es importante, por tanto, que prestes atencion a las ordenes
que ejecutas, y sobre todo a los datos que se obtienen.

1. Con la orden uptime:

1.1 Cuanto tiempo lleva en marcha el sistema?


1.2 Cuantas terminales de usuario hay abiertas?
1.3 Cual es la carga media del sistema en los ultimos 15 minutos?
1.4 Que ordenes ofrecen en su cabecera la misma informacion que uptime?

12
1.5 A continuacion vamos a aumentar la carga media del sistema, ejecutando para ello varios
procesos que consumen mucha CPU, y no realizan operaciones de E/S.
1) Compila el programa ejemplo multmatrices.c:

gcc -o multmatrices multmatrices.c -lm

2) Ejecuta el nuevo programa, multmatrices, varias veces, al menos 5 veces, todas a la


vez. Usa para ello la opcion de ejecutar las ordenes en background, usando &
Date cuenta que puedes usar el siguiente script para lanzarlo 5 veces:
for i in seq 1 5
do
./multmatrices &
done
Prueba a escribirlo directamente en una consola, sin crear fichero especfico para ello.
3) En una consola distinta ejecuta la orden uptime para comprobar como va aumentando
la carga media del sistema, y conforme avanza el tiempo tambien se va incrementando
la carga media de los ultimos 5 minutos y de los ultimos 15 minutos.
Con este script ejecutas la orden uptime 120 veces, durmiendo 1 segundo despues de
cada ejecucion:
for i in seq 1 120
do
uptime
sleep 1
done
Prueba a escribirlo directamente en una consola, sin crear fichero especfico para ello.

2. La orden pstree muestra el arbol de procesos que hay en ejecucion. Comprueba, haciendo uso
de la orden ps la y de los valores PID y PPID mostrados para cada proceso, que efectivamente
los procesos son padre e hijo.
3. En muchos casos nos interesara seleccionar columnas. Recuerda el uso de tr y cut. Por ejemplo,
que muestra la ejecucion de esta instruccion?

ps aux | tr -s | cut -f 2,11 -d

Como podras obtener la misma informacion usando unicamente la orden ps?

4. Crea el fichero /tmp/bucle con el siguiente contenido y asgnale permisos de ejecucion.

#!/bin/bash
echo nada > /dev/null
exec /tmp/bucle

4.1 Ejecuta la orden top en una terminal y comprueba el estado del sistema. A continuacion
lanza /tmp/bucle en otra. Observa como cambia el estado del sistema al lanzar el script.
En una tercera terminal, comprueba con ps los procesos en ejecucion.
4.2 Usando la combinacion de teclas Control-Z para el proceso bucle. Una vez parado la
informacion mostrada por top va cambiando, hasta que no muestra mas informacion sobre
dicho proceso. Fjate que ha aumentado el numero de procesos parados.
4.3 Reinicia el proceso con la orden fg y comprueba que vuelve a aparecer la informacion sobre
el proceso.
4.4 Observa si mientras esta en ejecucion ese proceso cambia la carga media del sistema.

13
4.5 Por que el proceso bucle siempre tiene el mismo PID si se lanza a s mismo una y otra
vez durante su ejecucion?
4.6 Desde el top, cambia la prioridad base (el numero nice) del proceso (que esta actualmente
en valor 0), dandole un valor menor, por ejemplo -10.
4.7 Usando la orden nice lanza otro proceso bucle con la prioridad base (valor del numero
nice) de -15.
4.8 Observa que la CPU se le asignara mas al segundo bucle lanzado. Esto es debido a que este
segundo bucle tiene el valor de nice (columna NI) mas pequeno, lo que conlleva un valor
de la prioridad dinamica (columna PR) tambien mas pequeno, que en definitiva significa
que tiene mas prioridad de uso de la CPU.
4.9 Asigna mediante renice una prioridad base de -1 al bucle que lanzaste anteriormente
con prioridad -15. Como afecta esto a la ejecucion de los dos procesos?
4.10 Lanza ahora el proceso multmatrices del ejercicio 1. Observa en la orden top como se
distribuye la CPU entre los tres procesos. Cual de los tres obtiene un mayor porcentaje
de CPU, el bucle con nice -10, el bucle con nice -1 o el multmatrices? Por que?
4.11 Desde el top mata el bucle con nice -10. Fjate que ahora, a pesar de que el bucle
que queda tiene nice -1, se le asigna mas de la CPU que antes, al haber muerto el mas
prioritario.
4.12 Haciendo uso de la orden kill, enva la senal de parar al proceso bucle que aun esta en
ejecucion. Despues, usando tambien kill reanudalo y, finalmente, elimnalo. Usa la orden
kill -l para obtener el listado de senales.

5. Estudia el uso que se hace de la CPU, con mpstat, y el uso de memoria, con vmstat, que estan
haciendo en este momento los procesos en ejecucion y con top el uso de CPU, y que procesos
se estan ejecutando.
Abre, por tanto, 3 terminales, y en cada una de ellas ejecuta una de las ordenes anteriores.
Respecto a mpstat y vmstat tienen que dar la informacion cada 3 segundos, y de manera
indefinida, es decir, no tienes que fijarle cuantas muestras queremos.
Para que el sistema tenga tareas a realizar y acceso al disco al mismo tiempo, ejecuta las siguientes
ordenes, de nuevo en 3 terminales distintos, lanzarlas con unos segundos de separacion entre ellas,
para que no abran al mismo tiempo el mismo fichero.
find / -type f -exec cat {} > /dev/null \;
find / -type f -exec tac {} > /dev/null \;
find / -type f -exec sort {} > /dev/null \;
Observa en la ventana que estes ejecutando la orden top que la memoria compartida indicada
por los 3 procesos find es la misma.
Con las ordenes top y mpstat comprueba como se va repartiendo el tiempo de CPU (usuario,
sistema, en espera de E/S, interrupciones software, interrupciones hardware, . . . )
Con la orden vmstat observa si se esta usando o no el espacio de intercambio, si cambia la
cantidad de memoria libre, o la cantidad de bloques que se leen o escriben en disco.
Finalmente, usando la orden killall mata todos los find lanzados.

6. Prueba las opciones de ulimit. Ten en cuenta que una vez establecido un lmite con ulimit,
para cambiar a un valor menos restrictivo es necesario finalizar ese interprete de ordenes, a no
ser que seas el supersusuario. Crea un usuario llamado iso, entra al sistema con ese usuario y
realiza los siguientes ejercicios:

6.1 Limita el numero de ficheros abiertos a 2. A continuacion ejecuta la orden ls. Que sucede?
6.2 Limita el tamano del fichero core a 2K.

14
6.3 Limita el numero de procesos en ejecucion a 1. Ejecuta a continuacion una orden, por
ejemplo, ps. Que esta sucediendo?

Que podemos hacer para que tengan efecto siempre sobre cierto usuario? (Pista: ficheros
profile).

7. Ordenes: at, atq, atrm. (Para poder recibir un correo cuando una orden programada con at
se ejecute es necesario que este en ejecucion el demonio sendmail).
Para lanzar el demonio usa la orden systemctl start sendmail.service.

7.1 Si el demonio atd no esta en ejecucion, lanzalo (systemctl start atd.service).


7.2 Programa con la orden at un ls / dentro de unos minutos. Comprueba que at enviara un
e-mail con el resultado de la instruccion ejecutada.
7.3 Utiliza la orden atq para averiguar que hay en la cola.
7.4 Programa con la orden at un ls /tmp > $HOME/salida tmp dentro de unos minu-
tos. Ten en cuenta que, al haber redirigido la salida de la instruccion a ejecutar, at no
avisara sobre la realizacion de la tarea.
7.5 Utiliza la orden atq para averiguar que hay en la cola.
7.6 Para finalizar este ejercicio, comprueba que las dos ordenes programadas con at se han
ejecutado. La primera habra mandado el resultado por e-mail, mientras que la segunda
habra creado el fichero con la salida de la orden. (Para leer el correo puedes usar la orden
mail).

8. Finaliza el demonio de impresion usando la orden systemctl stop cups.service A conti-


nuacion programa la herramienta crontab para que se active de lunes a viernes, estableciendo
la hora de lanzamiento dentro de 5 minutos.
La orden a usar para lanzar el demonio es systemctl start cups.service.
Por ejemplo, si ahora mismo fuesen las 11:35, la hora a fijar sera las 11:40. La idea es que en 5
minutos compruebes que el demonio se ha lanzado.
Configura tambien que esos mismos das a las 10 de la noche se pare el mismo demonio. Si el
demonio crond no esta en ejecucion, lanzalo para poder resolver este ejercicio.

9. Entra al sistema con el usuario iso y programa la herramienta crontab para que en el da de
hoy y de este mes, durante la hora actual y cada 5 minutos se ejecute la orden /bin/ls -R
$HOME, y el resultado se guarde en el fichero /tmp/tareasiso. Comprueba si esta haciendo
la tarea observando el contenido /tmp/tareasiso.
Una vez que has visto que se ejecuta la tarea, elimina la entrada introducida por el usuario iso
en el cron.

10. Si han transcurrido 5 minutos desde que hiciste el ejercicio 8, comprueba si el demonio cups se
ha lanzado de nuevo.

11. Ejecuta un programa multithreading:

Observa el codigo fuente del programa de ejemplo generando 2 hilos.c. Al ejecutar


este programa se generara un proceso con 2 threads que funcionan indefinidamente.
Compila este programa:
gcc -o generando_2_hilos generando_2_hilos.c -lpthread

Pon el programa a funcionar en segundo plano:

15
generando_2_hilos &

12. Comprueba con la orden ps que el proceso correspondiente al programa generando 2 hilos
se ha puesto a funcionar y anota su PID.

13. Comprueba, usando la orden pstree, los procesos que son los ancestros de este proceso puesto
en marcha. Observa igualmente los threads que produce dicho proceso: el thread principal del
proceso y el thread hijo, que aparece a continuacion encerrado entre {}.

14. Repite los 3 ejercicios anteriores con el programa generando 3 hilos.c

15. Ejecuta la orden ps con las opciones eLf. Anota, para todos los threads que genera el proce-
so generando 3 hilos, los valores de los campos denominados PID, PPID, LWP, NLWP y
STIME. Razona apropiadamente los valores obtenidos para cada campo.

16. Ejecuta la orden top. Para el proceso generando 3 hilos, anota los valores de los campos
PID, VIRT, RES, %CPU y TIME+. Explica su significado. Observa y anota el valor aproximado
en que aumenta el campo TIME+ por cada segundo que transcurre y razona tu respuesta.

17. Desde top ejecuta la orden H para ver al detalle todos los threads de cada proceso en funciona-
miento. Para todos los threads generados por el proceso generando 3 hilos, anota los valores
de los campos PID, VIRT, RES, %CPU y TIME+. Compara estos valores con los obtenidos en
el ejercicio anterior para el proceso en su conjunto y razona tu respuesta.

18. Siguiendo en top, ejecuta ahora la orden 1. Observa y anota la informacion que ahora te ofrece
esta orden sobre el uso de los diferentes cores de la CPU.

19. Finaliza los procesos generando 2 hilos y generando 3 hilos usando la orden kill.

20. Con la orden free averigua el estado de la memoria principal y de la zona de intercambio del
sistema en este momento. Anota el tamano total de la zona de intercambio.

21. Ejecuta la orden vmstat obteniendo 4 muestras cada 2 segundos. Anota, de la ultima muestra,
la informacion mostrada sobre la cantidad de memoria de intercambio usada.

22. Crea un fichero de paginacion y anadelo a tu sistema. Para crear el fichero de paginacion:

# dd if=/dev/zero of=/.swap1 bs=524288 count=1024


# mkswap /.swap1
# sync; sync
# swapon /.swap1

22.1 Cambian los valores mostrados por vmstat? Y los mostrados por free? Por que?
22.2 Que habra que hacer para que el fichero se active en el momento del arranque del sistema?
22.3 Si ademas del fichero de swap creado, el sistema tiene una particion de swap, que prioridad
asignaras a cada uno?

23. Comprueba el uso de bloques de datos que se esta haciendo en la particion raz. Obten la misma
informacion pero expresada en Megabytes o Gigabytes. Pista: consulta la pagina de manual para
ver que opcion hay que usar.

24. Cuantos nodos-i se estan usando en la particion raz? Cuantos ficheros nuevos se podran crear
en esa misma particion raz?

25. Cual es el tamano total de todos los ficheros contenidos en el directorio /etc?

26. Obten el numero de bloques de 4 KB usados por el directorio /etc y sus subdirectorios.

16

También podría gustarte