- Tomando como punto de partida la pantalla de htop en Ubuntu Server 16.04 x64, se rastrea qué significan realmente
uptime, load average, Tasks, PID, el árbol de procesos, los estados, el tiempo de CPU, la prioridad y los indicadores de memoria mediante/procy la salida de comandos - Muchos de los valores en pantalla provienen de procfs y de archivos del sistema como
/etc/passwd,/etc/group,/etc/shadowy/etc/nsswitch.conf, y constracese puede verificar qué archivos lee un programa - Load average no es lo mismo que el uso de CPU, sino un promedio móvil con decaimiento exponencial que incluye procesos en ejecución, en espera de ejecución y procesos en estado uninterruptible
- Códigos de estado como
R,S,D,Z,T,testán conectados con señales,killy el comportamiento defork/exec/wait, por lo que sirven como pista para determinar por qué un proceso se quedó detenido o sigue ahí VIRT,RES,SHR,MEM%muestran la memoria virtual, la memoria física y la memoria compartible desde perspectivas distintas, así que es difícil asegurar el uso real de memoria mirando solo un número
De dónde vienen los valores de htop
uptimemuestra cuánto tiempo lleva ejecutándose el sistema, y la misma información también puede verse con el comandouptime- El programa
uptimelee/proc/uptime- El primer número es el tiempo total, en segundos, que el sistema ha estado encendido
- El segundo número es el tiempo, en segundos, que el sistema ha estado en estado idle
- En sistemas multinúcleo, el tiempo idle puede sumarse por núcleo y ser mayor que el uptime total
- Con
strace uptime 2>&1 | grep openostrace -e open uptimese pueden ver los archivos que abreuptime- En la salida de ejemplo aparecen
/proc/uptime,/var/run/utmpy/proc/loadavg
- En la salida de ejemplo aparecen
- Los números de
/proc/uptimeson prácticos para usar en programas o scripts, mientras que la salida deuptimeestá formateada para que sea fácil de leer por personas
Load average y uso de CPU
- Los tres primeros valores de
/proc/loadavgrepresentan el load average del sistema en los últimos 1, 5 y 15 minutos - El cuarto valor muestra el número de procesos que se están ejecutando actualmente y el número total de procesos en un formato como
1/120, y el último valor es el último PID utilizado - Al ejecutar un proceso nuevo se le asigna un PID, y normalmente los PID van aumentando hasta que se agotan y luego se reutilizan
- El PID 1 pertenece a
/sbin/init, que se inicia durante el arranque
- El PID 1 pertenece a
- Si en
htopsolo se ve un proceso en ejecución, ese único proceso podría ser el propiohtop sleep 30no está en ejecución sino en estado sleep, así que no aumenta la cantidad de running processes- Un trabajo que usa CPU de forma continua, como
cat /dev/urandom > /dev/null, aumenta la cantidad de running processes y el load average - El load number cuenta los procesos que están ejecutándose o esperando ejecutarse, así como los procesos en estado uninterruptible
- El load average no es un promedio simple, sino un promedio móvil con decaimiento exponencial
- Incluso el load average de 1 minuto no refleja solo los últimos 60 segundos, sino que da más peso al último minuto e incluye en parte actividad anterior
- En un sistema de una sola CPU, si hay un proceso CPU-bound, puede simplificarse que un load average de
1.00equivale a un uso de CPU del 100%- En un sistema de 2 núcleos, la misma situación puede verse como 50% de uso de CPU
- En un sistema de 2 núcleos, el load average que puede simplificarse como equivalente a 100% de CPU es
2.00
- Esta simplificación no siempre es correcta porque los procesos en estado uninterruptible también se incluyen en la carga
- Es posible tener un load average alto aunque el uso de CPU no sea alto
- El uso instantáneo de CPU puede comprobarse con
mpstatsudo apt install sysstat -ympstat 1
Tasks, PID y árbol de procesos
- Tasks en la parte superior derecha de
htopmuestra el número total de procesos y el número de procesos en ejecución - Internamente, el kernel de Linux llama task a los procesos, y
htopusa Tasks en lugar de Processes para ahorrar espacio en pantalla - Con
Shift+Hse puede alternar la visualización de threads- Si aparece algo como
Tasks: 23, 10 thr, significa que los threads se están mostrando
- Si aparece algo como
- Con
Shift+Kse puede alternar la visualización de kernel threads- Si aparece algo como
Tasks: 23, 40 kthr, significa que los kernel threads se están mostrando
- Si aparece algo como
- Cada vez que se inicia un proceso nuevo se le asigna un PID
- Si se ejecuta en segundo plano con algo como
sleep 1000 &, se muestran el número de job y el PID - En
bash,$!se expande al ID del último proceso en segundo plano
- Si se ejecuta en segundo plano con algo como
- La información relacionada con los procesos está bajo
/proc/<pid>//proc/<pid>/cmdlinecontiene el comando ejecutado, y los argumentos están separados por bytes\0- Puede verse de forma más legible con
tr '\0' '\n' < /proc/<pid>/cmdlineostrings /proc/<pid>/cmdline /proc/<pid>/cwdes un enlace al directorio de trabajo actual, y/proc/<pid>/exees un enlace al binario ejecutado
- Herramientas de diagnóstico como
htop,topypsleen los detalles de los procesos desde/proc/<pid>/<file> - El proceso que crea uno nuevo es el parent process, y el recién creado es el child process; esta relación forma el árbol de procesos
- Al pulsar
F5enhtopse puede ver la jerarquía de procesosps fypstree -atambién muestran la misma relación
- Cuando se ejecuta
dateenbash,bashcrea una copia de sí mismo confork, carga/bin/dateen memoria conexec, y luego elbashpadre espera a que el child termine /sbin/initse inicia durante el arranque y lanzasshd; cuando se establece una conexión SSH,sshdcrea el proceso de sesión y esa sesión ejecuta la shellbash
Usuarios y permisos de los procesos
- Cada proceso pertenece a un usuario, y ese usuario se representa con un ID numérico
- Se puede comprobar el ID de usuario de un proceso con el campo
Uidde/proc/<pid>/status - Un comando como
id 1000muestra el nombre de usuario y los grupos correspondientes a ese ID numérico idelige la fuente para resolver nombres según la configuración de/etc/nsswitch.conf- En el sistema de ejemplo, lee
/etc/passwdy/etc/group compates el modo de compatibilidad; es igual afiles, pero permite entradas especiales- La información de usuarios también puede almacenarse en otras bases de datos o servicios, como LDAP
- En el sistema de ejemplo, lee
/etc/passwdy/etc/groupson archivos de texto plano que mapean IDs numéricos a nombres legibles para humanos- La información real de las contraseñas está en
/etc/shadow$6$significa el algoritmo de hashsha512- Después siguen un salt aleatorio para evitar ataques de rainbow table y el hash de password+salt
- Por defecto, los programas se ejecutan con los permisos del usuario que los lanzó
- Esto sigue siendo igual aunque el propietario del ejecutable sea otro usuario
- Para ejecutarlos como otro usuario o como
root, se usasudosudo idse ejecuta con el UID 0 deroot- Se puede ejecutar como un usuario específico con algo como
sudo -u daemon id
- Si intentas escribir directamente en
/etc/sudoerscon redirección, puede que soloechose ejecute como root y que el append lo haga el usuario actual, por lo que fallaráecho "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoerssudo bash -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers"
/etc/sudoersdebe editarse consudo visudo- Valida el contenido antes de guardar para evitar errores que dejen
sudoinutilizable
- Valida el contenido antes de guardar para evitar errores que dejen
/usr/bin/passwdpuede escribir en/etc/shadowaunque lo ejecute un usuario normal- Tiene una
sen los permisos del archivo, por lo que funciona como ejecutable setuid - Se ejecuta con los permisos del propietario del ejecutable, que es
root - Los ejecutables setuid propiedad de root se pueden encontrar con
find /bin -user root -perm -u+s
- Tiene una
Códigos de estado de los procesos
- La columna de estado de
htopse muestra con el nombreS, y sus valores principales son los siguientesR: running o runnable, en ejecución o esperando en la run queueS: interruptible sleep, esperando a que se complete un eventoD: uninterruptible sleep, normalmente esperando I/OZ: defunct zombie, terminó pero el parent no hizo reapT: detenido por una señal de job controlt: detenido por el debugger durante tracingX: dead, un estado que no debería aparecer
pstambién muestra subestados comoSs,R+,Ss+-
R: en ejecución o listo para ejecutarse
- El estado
Rsignifica que el proceso se está ejecutando en ese momento o está esperando en la cola de ejecución - El código fuente de un programa, tras compilarse, se convierte en instrucciones de CPU, y al ejecutarse se carga en memoria para que la CPU ejecute esas instrucciones
- Estar en ejecución significa que la CPU está ejecutando físicamente instrucciones
- El estado
-
S: sleep interrumpible
- En el estado
S, las instrucciones del proceso no se ejecutan en la CPU, sino que esperan un evento o condición - Cuando ocurre el evento, el kernel cambia el estado a running
sleep 1000es un ejemplo de espera durante un tiempo determinado- Este estado puede interrumpirse con una signal
- En
htop, se puede enviar una signal presionandoF9 killes la system call que envía una signal, y/bin/killes el programa en userland que la invoca- La signal predeterminada es
TERMy solicita la finalización del proceso - Las signals son numéricas; sus nombres suelen escribirse en mayúsculas y pueden llevar el prefijo
SIG - Ej.:
INT,KILL,STOP,CONT,HUP kill -INT 10089,kill -2 10089,/bin/kill -2 10089hacen lo mismo- Al presionar
CTRL+C,bashenvíaSIGINTal proceso en foreground - Enviar
SIGINToSIGTERMno garantiza que el proceso termine - Un programa puede configurar un signal handler para hacer tareas de limpieza y luego salir
SIGKILLo9hace que el kernel fuerce la terminación del proceso sin darle oportunidad de responder
- En el estado
-
D: sleep ininterrumpible
- El estado
Dno puede despertarse con signals, y comoSIGKILLtambién es una signal, no se puede matar ese tipo de procesos - Este estado se usa cuando un proceso debe esperar sin interrupción o cuando se espera que el evento ocurra rápidamente
- Ej.: lectura/escritura en disco
- Un proceso ininterrumpible suele estar esperando I/O después de un page fault
- Este estado puede aparecer con demoras en lectura o escritura sobre NFS
- También puede aparecer cuando hay muy poca memoria disponible y el proceso hace mucho swap
- Como ejemplo, si ejecutas
sudo mount 8.8.8.8:/tmp /tmp &,/sbin/mount.nfsquedará en estadoD - Si lo miras con
strace, verás que la system callmountbloquea el proceso - Si se usa la opción
intrenmount, puede ejecutarse de forma interrumpible sudo mount 8.8.8.8:/tmp /tmp -o intr
- El estado
-
Z: procesos zombie
- El estado
Zsignifica que el proceso terminó pero el parent todavía no hizo reap - Un proceso zombie puede ser normal si existe solo por poco tiempo
- Un proceso zombie que permanece mucho tiempo puede indicar un bug en el programa
- Los procesos zombie no consumen memoria; solo ocupan un PID
- No se puede hacer
killdirectamente a un proceso zombie - Se puede enviar
SIGCHLDal proceso parent para pedirle que haga reap del zombie - Si se mata al proceso parent, se puede eliminar al parent y a sus zombies
- Se puede reproducir el estado zombie con un programa en C donde, tras
fork, el child haceexit(0)y el parent hacesleep(20) - Cuando termina el parent, el zombie desaparece
- Los zombies se mantienen porque el parent necesita poder revisar el código de salida del child con la system call
wait
- El estado
-
T y t: procesos detenidos
- El estado
Tindica que el proceso está detenido por una señal de job control - Si ejecutas
cat /dev/urandom > /dev/nully presionasCTRL+Z, pasará al estadoT - Puedes reanudarlo con
fg - También se puede detener con la signal
STOPy reanudar con la signalCONT - El estado
tindica que está detenido mientras un debugger lo está trazando - Si haces attach a un proceso ejecutado con
nc -l 1234 &usandosudo gdb -p <pid>, quedará en estadot
- El estado
Tiempo de CPU, niceness y prioridad
- Linux es un sistema operativo multitarea, así que incluso en una sola CPU parece que varios procesos se ejecutan al mismo tiempo
- En realidad, una sola CPU solo puede ejecutar una instrucción a la vez, por lo que usa time sharing
- Un proceso se ejecuta brevemente y luego se interrumpe
- Otros procesos en espera de ejecución se van ejecutando por turno
- Al breve intervalo en que se ejecuta un proceso se le llama time slice
- Un time slice suele durar unos pocos milisegundos, así que si la carga del sistema no es alta normalmente no se percibe
- En un solo núcleo, si el load average es
1.0, puede considerarse que la CPU está usada al 100%- Si es mayor que
1.0, puede haber más procesos queriendo ejecutarse de los que la CPU puede manejar, lo que puede causar ralentización o demoras - Si es menor que
1.0, la CPU queda en estado idle algunas veces
- Si es mayor que
- La razón por la que el running time de un proceso puede no coincidir exactamente con el tiempo transcurrido real también se explica por el time sharing
- Si hay más tareas para ejecutar que núcleos de CPU disponibles, hay que decidir qué tarea ejecutar primero
- El scheduler del kernel de Linux elige el siguiente proceso desde la run queue, según el algoritmo de planificación del kernel
- En general no se puede controlar directamente el scheduler, pero sí se le puede indicar qué procesos son más importantes
- niceness, mostrado como
NI, es la prioridad en user-space- Su rango va de
-20a19 -20es la prioridad más alta y19la más baja- Puede verse como que un proceso más nice cede más a otros menos nice
- Su rango va de
PRIes la prioridad en kernel-space que usa el kernel de Linux- Su rango va de
0a139 0~99es para real time y100~139es el rango para usuario
- Su rango va de
- La relación entre el valor nice y la prioridad se explica con
PR = 20 + NI- El rango
-20~+19deNIse convierte en0~39dePR, y eso se mapea a100~139
- El rango
- Antes de ejecutar, la niceness se configura con
nice -n niceness program - La niceness de un proceso en ejecución se cambia con
renice -n niceness -p PID - Los colores del uso de CPU son los siguientes
- Blue: hilo de baja prioridad,
nice > 0 - Green: hilo con prioridad normal
- Red: hilo del kernel
- Blue: hilo de baja prioridad,
Métricas de memoria: VIRT, RES, SHR, MEM%
- Un proceso parece existir de manera independiente en memoria, y esto se implementa mediante memoria virtual
- Un proceso no accede directamente a la memoria física, sino que tiene su propio virtual address space
- El kernel puede traducir direcciones de memoria virtual a memoria física, o mapear parte de ella al disco
- Por eso puede parecer que un proceso usa más memoria que la que tiene instalada la computadora
- El uso de memoria de un proceso varía según si incluye los siguientes elementos
- biblioteca compartida
- memoria mapeada a disco
- memoria intercambiada a swap
- Los colores del uso de memoria son los siguientes
- Green: memoria usada
- Blue: buffers
- Orange: cache
-
VIRT/VSZ
VIRTes la cantidad total de memoria virtual que usa la tarea- Incluye código, datos, bibliotecas compartidas, páginas enviadas a swap y páginas mapeadas pero no usadas
- Aunque una aplicación pida 1 GB y solo use 1 MB,
VIRTpuede aparecer como 1 GB - Aunque se haga
mmapde un archivo de 1 GB y no se use realmente,VIRTpuede mostrarse como 1 GB - En la mayoría de los casos,
VIRTno es una cifra útil
-
RES/RSS
RESes la memoria física no enviada a swap, es decir, el uso de memoria residente que está actualmente en memoria físicaRESpuede reflejar mejor el uso real de memoria queVIRT, pero tiene limitaciones- No incluye la memoria enviada a swap
- Parte de la memoria puede compartirse con otros procesos
- Si un proceso usa 1 GB de memoria y luego hace
fork(), elRESde ambos procesos puede verse como 1 GB cada uno, pero en realidad Linux puede estar usando solo 1 GB gracias a copy-on-write
-
SHR
SHRes la cantidad de memoria compartida que usa la tarea- Refleja la memoria que potencialmente puede compartirse con otros procesos
- El programa de ejemplo en C muestra cómo cambian los valores
VIRT,RESySHRal pasar pormalloc, usar parte de la memoria,forky escribir memoria adicional - La sección de ejemplo de memoria correspondiente sigue pendiente como TODO
-
MEM%
MEM%es el porcentaje de memoria física disponible que la tarea está usando actualmente- Es el valor de
RESdividido entre la RAM total - Ejemplo: si
RESes400My la RAM es de 8 GB, entonces400/8192*100 = 4.88%
Procesos predeterminados de Ubuntu Server 16.04
-
Se investigaron los procesos que se inician en un Ubuntu Server 16.04.1 LTS x64 de un droplet nuevo de Digital Ocean.
-
/sbin/init/sbin/initcoordina el resto del boot process y configura el entorno de usuario.- Se convierte en el parent o grandparent de los procesos que se inician automáticamente.
- El resultado de
dpkg -S /sbin/initessystemd-sysv: /sbin/init, así que en ese sistema essystemd. - Aunque se mate el proceso, no pasa nada.
-
/lib/systemd/systemd-journaldsystemd-journaldes un servicio del sistema que recopila y almacena logging data.- Crea y mantiene un journal estructurado e indexado con base en la información de logs recibida de varias sources.
- Usa un formato de archivo especial optimizado para mensajes de log en lugar de archivos de log simples en texto plano.
- Se consulta con
journalctl. journalctl _COMM=sshdjournalctl _COMM=sshd -o json-prettyjournalctl --since yesterdayjournalctl -bjournalctl -fjournalctl --disk-usagejournalctl --vacuum-size=1G- Parece que no se puede eliminar ni desactivar, y solo se puede apagar el logging.
-
/sbin/lvmetad -flvmetadhace cache de los metadatos de LVM para que los comandos de LVM lean esos metadatos sin hacer disk scan.- El disk scan toma tiempo y puede interferir con el trabajo normal del sistema y del disco.
- LVM puede verse como “particiones dinámicas” con las que Linux puede crear, redimensionar y eliminar logical volumes mientras está en ejecución.
- La conclusión es que conviene mantenerlo si se está usando LVM.
-
/lib/systemd/udevdsystemd-udevdescucha los uevent del kernel y ejecuta, para cada evento, las instrucciones de coincidencia de las udev rules.udeves el device manager del kernel de Linux y administra principalmente los device nodes del directorio/dev.- No hay certeza de si es necesario en un servidor virtual.
-
/lib/systemd/timesyncdsystemd-timesyncdes un servicio del sistema que sincroniza el reloj local con servidores NTP remotos.- Reemplaza a
ntpd. - En el sistema de ejemplo,
timedatectl statusmuestrayestanto para network time como para NTP synchronized. - En la salida de
netstatsolo aparece el puerto SSH en estado listening, y no abre varios puertos UDP 123 comontpden Ubuntu 14.04.
-
/usr/sbin/atd -fatdejecuta los jobs que se ponen en cola para correr después.atybatchleen comandos desde stdin o desde un archivo para ejecutarlos más tarde.- A diferencia de cron, que programa ejecuciones repetidas,
atejecuta una sola vez a una hora específica. - En el ejemplo,
echo "touch /tmp/yolo.txt" | at now + 1 minutecrea un archivo un minuto después. - Si no se usa, se elimina con
sudo apt remove at -y --purge.
-
/usr/lib/snapd/snapd- Snappy Ubuntu Core se presenta como una edición de Ubuntu que usa transactional update.
- Se describe a snap como un formato universal de paquetes de Linux que permite que un solo binary package funcione en desktop, server, cloud y device de Linux.
- Puede entenderse como un paquete deb simplificado que distribuye las dependencias agrupadas dentro de un solo snap.
- Como no se ha usado snappy para deployar o distribuir aplicaciones en el servidor, se elimina con
sudo apt remove snapd -y --purge.
-
/usr/bin/dbus-daemon- D-Bus es un mechanism de IPC y RPC entre varios process que se ejecutan al mismo tiempo en la misma machine.
- Es necesario en un desktop environment, pero se duda de si hace falta en un server que ejecuta una web app.
- Al eliminar
dbus,timedatectl statusfalla conFailed to create bus connection: No such file or directory. - Por eso, la conclusión es que conviene mantenerlo.
-
/lib/systemd/systemd-logindsystemd-logindes un servicio del sistema que administra los inicios de sesión de usuario.
-
/usr/sbin/cron -fcrones un daemon que ejecuta comandos programados.-fsignifica que no se daemoniza y se ejecuta en foreground mode.- Las tareas que se ejecutan de forma periódica pueden programarse con cron.
crontab -e- La conclusión es que en Ubuntu se suele usar
/etc/cron.hourly,/etc/cron.daily, etc. - Los logs pueden verse de la siguiente manera.
grep cron /var/log/syslogjournalctl _COMM=cronjournalctl _COMM=cron --since="date" --until="date"- Es muy probable que cron se mantenga.
- Si no se va a eliminar, puede detenerse y desactivarse con
sudo systemctl stop cron,sudo systemctl disable cron. apt remove cronpuede intentar instalar postfix y otros paquetes.- Esto se debe a que cron sugiere un mail transport agent.
-
/usr/sbin/rsyslogd -nrsyslogdes una utilidad del sistema que soporta message logging.- Se encarga de llenar archivos de log en
/var/log/, como/var/log/auth.log. - Los archivos de configuración están en
/etc/rsyslog.d. - Se puede armar logging centralizado enviando logs a un servidor remoto.
- Con el comando
loggerse pueden dejar mensajes en/var/log/syslogdesde un background script. - Aunque ya exista
systemd-journald, rsyslog y journal tienen características distintas, así que puede ser útil usarlos juntos. - Por eso se mantiene por ahora.
-
/usr/sbin/acpidacpides un daemon de eventos ACPI.- Está diseñado para notificar eventos ACPI a programas en user space.
- ACPI se usa para descubrimiento y configuración de componentes de hardware, power management, monitoreo de estado y más.
- Como no se pretende usar suspend/resume en un servidor virtual, se probó eliminarlo.
rebootfuncionó, pero después dehalt, Digital Ocean seguía detectando la instancia como encendida, así que hubo que hacer Power Off desde la interfaz web.- Por lo tanto, la conclusión es que conviene mantenerlo.
-
/usr/bin/lxcfs /var/lib/lxcfs/lxcfses un filesystem FUSE diseñado para contenedores LXC.- Proporciona una vista virtualizada de algunos archivos de
/procy acceso filtrado al filesystem cgroup del host. - Hace que
uptime,topy otros comandos den resultados más “correctos” dentro del contenedor. - Si no se usan contenedores LXC, puede eliminarse con
sudo apt remove lxcfs -y --purge.
-
/usr/lib/accountservice/accounts-daemon- AccountsService proporciona una interfaz D-Bus y su implementación para consultar y manipular información de cuentas de usuario.
- La implementación se basa en los comandos
usermod(8),useradd(8)yuserdel(8).
-
Tras eliminarlo, se deja en “Time will tell” qué cosas se romperán
-
/sbin/mdadmmdadmes una utilidad de Linux para administrar y monitorear dispositivos RAID por software- RAID es una forma de usar varios discos duros como si fueran uno solo
- RAID 0 amplía la capacidad de las unidades
- RAID 1, RAID 5, RAID 6 y RAID 10 tienen como objetivo evitar la pérdida de datos en caso de falla de una unidad
- Se puede eliminar con
sudo apt remove mdadm -y --purge
-
/usr/lib/policykit-1/polkitd --no-debugpolkitdes el daemon de PolicyKit, y polkit es un framework de autorización- Se puede entender como un sudo de grano fino
- Puede dar a un usuario sin privilegios permiso para realizar ciertas acciones como root
- Ejemplo: permitir reiniciar en Linux de escritorio
- Se resume que en un servidor puede eliminarse con
sudo apt remove policykit-1 -y --purge - Qué cosas se rompen sigue siendo una duda
-
/usr/sbin/sshd -Dsshdes el daemon de OpenSSH- La opción
-Dhace que no se desacople ni se convierta en daemon, lo que facilita el monitoreo
-
/sbin/iscsidiscsides un daemon en segundo plano que funciona según la configuración de iSCSI y administra las conexiones- iSCSI es un estándar de redes de almacenamiento basado en IP que permite transmitir comandos SCSI por una red IP para usar almacenamiento remoto como si fuera un disco local
- Se puede eliminar con
sudo apt remove open-iscsi -y --purge
-
/sbin/agetty --noclear tty1 linuxagettyes una alternativa de getty para Linux- getty administra terminales físicas o virtuales y, cuando detecta una conexión, muestra el prompt de nombre de usuario y luego ejecuta el programa
login - En Digital Ocean se puede interactuar con esta terminal desde el navegador a través de
Consoleen los detalles del droplet - Tras eliminar los archivos relacionados con
getty@tty1.servicey reiniciar, era posible conectarse por SSH, pero no iniciar sesión desde la consola web de Digital Ocean
-
Sesión SSH, bash, htop
sshd: root@pts/0significa que la sesión SSH del usuariorootfue establecida en el pseudoterminalpts/0- Un pseudoterminal emula un terminal de texto real
bashes el shell en uso- Si lleva un guion al inicio, como
-bash, significa que se inició como login shell - Un shell cuyo primer carácter de argument zero es
-, o que se inicia con la opción--login, es un login shell - En ese caso lee un conjunto distinto de archivos de configuración
htopes el visor interactivo de procesos que se está ejecutando en la captura de pantalla
Experimento de eliminación de servicios
- La lista de eliminación general es la siguiente
sudo apt remove lvm2 -y --purgesudo apt remove at -y --purgesudo apt remove snapd -y --purgesudo apt remove lxcfs -y --purgesudo apt remove mdadm -y --purgesudo apt remove open-iscsi -y --purgesudo apt remove accountsservice -y --purgesudo apt remove policykit-1 -y --purge
- La edición Extreme incluye las siguientes tareas
sudo apt remove dbus -y --purgesudo apt remove rsyslog -y --purgesudo apt remove acpid -y --purgesudo systemctl stop cron && sudo systemctl disable cronsudo rm /etc/systemd/system/getty.target.wants/getty@tty1.servicesudo rm /lib/systemd/system/getty@.service
- La configuración de nginx, PHP7 y MySQL siguiendo las instrucciones de unattended installation of WordPress on Ubuntu Server funciona
Apéndice: herramientas de investigación y comportamiento del shell
-
Buscar código fuente
- Cuando
stracepor sí solo no es suficiente, se puede revisar el código fuente - Se busca la ubicación del binario con
which uptimey el paquete de Ubuntu condpkg -S /usr/bin/uptime - En el ejemplo,
uptimepertenece al paqueteprocps - En packages.ubuntu.com se puede buscar el paquete y encontrar el enlace al repositorio del código fuente
- Cuando
-
Descriptores de archivo y redirección
- Para redirigir stderr a stdout se usa
2>&1 echo something > fileescribe stdout en el archivo, y es lo mismo queecho something 1> fileecho something 2> fileescribe stderr en el archivoecho something 2>1significa redirigir stderr a un archivo llamado1- En
2>&1, donde se agrega&, el1no es un nombre de archivo sino un ID de flujo
- Para redirigir stderr a stdout se usa
-
Problema de colores en PuTTY
- Si faltan elementos de
htopen PuTTY, se puede resolver en la configuración Window → Colours - Clic derecho en la barra de título
- Change settings...
- Window → Colours
- Seleccionar el botón de opción Both
- Apply
- Si faltan elementos de
-
Shell simple hecho en C
- Un shell simple escrito en C muestra el uso de las llamadas al sistema
fork,execywait - Si la entrada es
exit, termina como built-in del shell - Los demás comandos se ejecutan con
execlpen el child después defork, y el parent espera el estado de salida conwaitpid - En los ejemplos de ejecución de
date,trueyfalse, se imprime el código de salida del child en cada caso - La razón por la que el mensaje de finalización de un proceso en background como
sleep 1 &solo aparece después de presionar Enter es que el shell se queda esperando entrada y verifica el estado del proceso en background cuando se introduce un comando
- Un shell simple escrito en C muestra el uso de las llamadas al sistema
Elementos pendientes de investigar e historial de cambios
- Los temas que quedan por investigar incluyen process state substatus, kernel thread,
/dev/pts, memoriaCODE·DATA·SWAP, duración del time slice, algoritmos del scheduler de Linux, core pinning, manual page, colores de las barras de CPU/memoria, límite de process ID y fork bomb,lsof,ionice,schedtool, entre otros - Las principales correcciones y actualizaciones incluyen lo siguiente
- El idle time de
/proc/uptimees la suma de todos los cores - Se corrigieron los
printfde parent/child en el ejemplo de zombie en C - Se agregó que
apt remove cronintenta instalarpostfixpor la dependencia con MTA idpuede cargar información también desde otras fuentes además de/etc/passwda través de/etc/nsswitch.conf- Se agregó la explicación del formato de hash de contraseña de
/etc/shadow /etc/sudoersdebe editarse de forma segura convisudo- Se agregó la explicación de
MEM% - La sección sobre load average fue reescrita
- Se corrigió que la señal predeterminada de
kill 1234no esINT, sinoTERM - Se agregó la explicación de las barras de color de CPU y memoria
- El idle time de
1 comentarios
Opiniones en Hacker News
Últimamente me cambié a btop y la interfaz me pareció lo suficientemente moderna y útil, con una cantidad de información más que suficiente
Como dijeron otros, parece que también muestra consumo eléctrico (Watts), además de red, GPU y disco
https://github.com/aristocratos/btop
No se puede desactivar la barra de uso de disco, así que si la consola no es bastante grande, el gráfico de velocidad de I/O se ve muy aplastado
Los gráficos de CPU/GPU ocupan demasiado espacio y, en general, me gustaría que la tabla de archivos abiertos tuviera más lugar
Hay 2 configuraciones que siempre cambio al usar htop, y la diferencia es grande
Primero, desactivo los hilos de usuario. Normalmente solo llenan de ruido la pantalla de htop y casi no aportan información útil
Segundo, activo la vista de árbol de procesos. Muchas veces es más importante saber de dónde salió un proceso que cualquier otro dato, y también se vuelve más fácil seguir cosas como procesos de compilador que consumen CPU mientras manejan muchos archivos
Personalmente, creo que ambas deberían ser el comportamiento por defecto de htop
Da gusto ver una explicación que deja claro que no se puede confiar fácilmente en la memoria virtual. La forma en que el Administrador de tareas de Windows la muestra por defecto va en esa línea y es bastante mala
El tamaño del conjunto residente (RSS) es el indicador más confiable, y otros valores pueden inflarse erróneamente por cosas como archivos mapeados en memoria que en realidad no causan un problema
Por ejemplo, aunque mapees en memoria un archivo de logs de 2 GB, esas páginas solo se cargan cuando lees esa parte, así que no significa que realmente estés usando esa memoria; pero el usuario ve el proceso y dice: “¿por qué esta app está usando tanta memoria?”
Chrome también tuvo este problema durante un tiempo y redujo el uso de archivos mapeados en memoria, no porque fueran malos, sino porque los usuarios reaccionaban de más al ver cifras que no representaban el uso real de memoria física
En la web hasta hay guías que dicen que hay que juzgar el uso de memoria por la cantidad de memoria virtual asignada, pero este artículo al menos acierta en ese punto
Referencia: https://en.wikipedia.org/wiki/Proportional_set_size
Si usas I/O normal de archivos, no se incluyen. En clústeres HPC donde vigilan el uso de memoria de cada trabajo y lo matan si supera el límite solicitado, esto produce resultados bastante curiosos
Cuando empieza la presión de memoria, deja de ser representativo. He visto malas decisiones por este malentendido, e incluso una vez quité este valor de un gráfico para evitar que alguien del equipo sacara la conclusión equivocada
Como dice el nombre, solo muestra la parte mapeada a memoria física asignada de forma privada a ese proceso, y se parece más al Resident Set de Unix
Probablemente se referían al uso de memoria en la pestaña de rendimiento, pero lo aclaro porque se puede malinterpretar como si aplicara a todas las métricas de uso de memoria
En top, si usas el carácter
>, se ordena por uso de memoriaA veces lo uso cuando trato de encontrar por qué un host se está poniendo lento, y también se puede ver a
swapdcomiéndose la CPUMmayúscula para memoria yPmayúscula para CPULeer cosas así me hace darme cuenta de que, incluso después de usar Linux a diario por más de 20 años, todavía solo estoy aprovechando una parte de su potencial. Buen artículo
Siento que HN se está recuperando otra vez
Ojalá esto signifique que no era la etapa fantasma ambulante de HN
Si alguien no conoce
nmon, también vale la pena echarle un vistazoSi presionas
h, aparece la lista de monitores disponibles; si lo vuelves a presionar, desaparece, y conqsaleshttps://nmon.sourceforge.io/pmwiki.php
En especial, el rendimiento de disco e I/O que se ve con las teclas
dyDes bastante útilMe gusta que el gráfico ancho de uso de CPU maneja fácilmente equipos con muchos núcleos
Como forma de uso distinta a la familia
*top, terminé prefiriendo el reporte diferencial, más calmado, estilops, junto con reportes de sistema completo comovmstatAsí todo queda en el buffer de scrollback de la terminal: https://github.com/c-blake/procs
Está escrito en el poco común pero eficiente y expresivo lenguaje Nim
Tengo este artículo guardado en marcadores desde 2016 y lo he vuelto a consultar varias veces a lo largo de los años