Auditoría de capacidad, térmica y estabilidad — 19 octubre 2026¶
Revisión autorizada por Ramon y coordinada con agentes. Lecturas SSH 23:02–23:05 CEST sin stress, scrub, test SMART, reinicios, migraciones, cambios RAM ni despertar equipos. Cambios locales de monitorización preparados por este agente; el coordinador realiza su revisión y despliegue. No se declara aplicado por el mero cambio local.
Hallazgo nuevo prioritario: térmica de pmx 51¶
/proc/cmdlineincluyethermal.off=1; persiste en/etc/default/grub.d/99-thermal-off.cfgconGRUB_CMDLINE_LINUX_DEFAULT="thermal.off=1". Nacimiento/mtime 1 agosto 2026,16:58 CEST.- Kernel del arranque 21:58:55 confirma
ACPI: thermal: thermal control disabled. La documentación del kernel define el parámetro como desactivación del control térmico ACPI. Esto no demuestra que se hayan desactivado las protecciones térmicas de hardware del procesador. - Sensores de CPU 78–81°C durante las muestras;
core_throttle_countCPU 0 aumenta: 155967 a 23:02:37 →156330 a 23:03:13, +363 en 36 s. Exporter confirma el contador package 156336 poco después, junto a temperatura 81°C. No se atribuyen todos los eventos a esa temperatura puntual: la señal de limitación puede tener otra causa. - Sensor
acpi_fanresponde N/A e I/Oerror; no prueba un ventilador físicamente parado. Gobernadorpowersave, frecuencia instantánea~2,8 GHz. Los trips ACPI publicados están entre 103,05 y 110,05°C; no se consideran umbrales operativos seguros nuevos. - No hay motivo documentado del parámetro en las fuentes revisadas, historial Git deinfra/docs ni memoria local. Otra sesión conserva el mismo cmdline, sin explicar su introducción. No retirar un posible workaround antiguo ni reiniciar a ciegas.
Acción concreta siguiente: comprobar físicamente giro/ruido, rejillas y flujo de aire, polvo y contacto/disipación con equipo fuera de servicio si necesita apertura. Buscar antecedente del cambio 1 agosto; preparar recuperación del fichero GRUB antes de una ventana donde se pueda restaurar la consola local. Solo entonces evaluar restablecer control ACPI y comprobar temperatura, contador y estabilidad bajo carga habitual; este informe no ordena un stress ni reproduce el cambio de arranque.
RAM y presupuesto N-1: sin nuevo recorte¶
Muestra 23:02 CEST:
| Medida | pmx 50 | pmx 51 |
|---|---|---|
| Mem Total Mi B | 29177 | 31875 |
| Mem Available Mi B | 13877 | 13752 |
| Swap usada Mi B | 186 | 0 |
| PSI memoria full 300 | 0% | 0% |
| ARC actual aproximado Mi B | 1157 | 2106 |
| ARC máximo Mi B | 1536 | 3984 |
memory_throttle_countZFS |
0 | 0 |
normalidad23:02 devuelve NORMAL:14 HAstarted,14 réplicas OK,quórum 3,
parejas Caddy/DNSactivas y 28 invitados con copia PBS<26 h. Sin embargo 10 HA
migrables consumen 10770 Mi B RAM+swap y el destino tiene 13646 Mi B disponibles;
tras reserva 2048 Mi B el margen es +828 Mi B, sin crédito balloon. Sigue estrecho
para picos. Los límites migrables son 19328 Mi B; lectura actual no acredita capacidad
simultánea de esos máximos. Exclusiones estrictas 110/172/217/218 y recursos sin HA
permanecen como ya documentó la revisión anterior.
VM 208 21:03:08 UTC: disponible 2445 Mi B, swap 3476 Mi B, PSI memoria full 10=1,49%, full 300=0,33%; IO full 10=7,83%, full 300=6,73%. No OOM. El host mantiene PSImemoria 0 y sus contadorespswpin/out no aumentaron entre las dos lecturas; no confundir su estado con el del invitado. La copia sigue pudiendo presionar al invitado aunque el host esté holgado. No reducir más RAM ahora ni cambiar ARC para fabricar margen; conservar seguimiento y procedimiento degradado existente.
Almacenamiento y estabilidad¶
- Ambos pools ONLINE, cero READ/WRITE/CKSUM, sin errores de datos conocidos. pmx 50:854 Gi B total,~649 Gi B asignados,76%ocupación,75%fragmentación; pmx 51:222 Gi B,129 Gi B,57%ocupación,56%fragmentación. Fragmentación no justifica borrar snapshots ni ejecutar scrub. pmx 50 tiene ~178 Gi B disponibles a nivel ZFS, distinto de~205 Gi BFREE físico del pool.
/pmx 50:17%,75 Gi B libres; pmx 51:41%,22 Gi B libres. PBS ocupa 301 Gi B en su dataset; la proyección y reserva ya tienen propietario en el trabajo de copias. No se duplicó su sistema de monitorización.- SMART pasivo de los tres discos PASSED. NVMe 50:41°C,10%used,
media/data integrityerrors 0;72 unsafe shutdowns históricos.427 errorentries:
entrada reciente
Invalid Field in Command, no error de integridad de medio. King Dian 51:40°C,0 sectores pendientes/reasignados/no corregibles/CRC, vida restante declarada 94%; VICK:33°C y sin fallo SMART. Valoresvendor no sustituyen prueba de restauración ni certifican hardware sano. - pmx 50 arranca 20:55:11 CEST y llevaba~2 h 7 m encendido. Causa previa reportada
hardware watchdog timer expired; sin volcado en/var/crashni pstore. Kernel 7.0.14-19,APSToff,max_cstate 1 yboost 0 permanecen. Kdumpready y journal-stream/pulso-tx activos. Sin nuevo MCE/OOM/timeout NVMe/error IO en el journal del arranque consultado. Dos horas sin fallo no resuelven los cuelgues. - pmx 50 CPU~51,5°C,DIMM 50,8/51°C; no reproduce los máximos históricos 89°C. No se reintentó UMA 512 M ni se alteró BIOS. El diagnóstico físico de 50 y un memtest completo fuera de servicio siguen pendientes tras asegurar las copias.
Corrección de monitorización preparada¶
Fuente mantenida:
ansible/roles/observability_collector/templates/alerts.yml.j2.
HighMemoryUsageyLowMemoryAvailableconservan nombres, umbrales y tiempos; usan Mem Available directo. La fuente seguía sumando todo ARC como crédito adicional, pudiendo ocultar disponibilidad baja; se alinea el criterio connormalidad.- Grupo
proxmox_thermal: aviso si package-throttle>6 eventos/min sostenido 10 m; aviso CPU>=85°C sostenido 10 m. Usa métricas nativas ya recogidas, sin cron/daemon ni activar colector nuevo. Agrupa porhost y filtra jobproxmox-nodes: los exporters LXC exponen countersdel mismohost y no deben duplicar avisos. Chips CPU concretos contrastados en Prometheus 217. No alerta missing por asumir que AMD exporta el contador Intel, ni usa DIMM/NVMecomo CPU. - Render fallaba por cuatro expresiones Prometheus sin escape Jinja, corregidas
sin cambiar el texto efectivo. Runtime contenía 8 alertas ausentes de fuente:
grupos
arr-saludyhomelab_rutas. Reconciliadas exactamente, conservando lógica,etiquetas,tiempos y anotaciones. Evita perderlas en un despliegue futuro.
Validación conpromtool 3.15.0 del contenedor Prometheus, usando solo temporales
propios retirados después: 83 reglas válidas y 6 escenarios unitarioscorrectos.
Cobertura:esperafor,burst/reset/histórico/LXC,sensor CPUvs DIMM,temperatura normal,
ARCenorme+Mem Availablebajo y memoria sana. YAMLrenderizado y candidato selectivo
son exactamente equivalentes porgrupo; solo cambia su orden.
Pruebas versionadas:
ansible/roles/observability_collector/tests/proxmox-thermal-alerts.test.yml.
Artefactos locales revisables en/tmp/homelab-capacity-alerts-20261019. más
rendered.yml,runtime.yml,selective.yml,test.yml ydiff.
El coordinador decide/aplica reloadsin reinicio tras validar el staging.
Actualización del coordinador: aplicado en CT217 mediante escritura conservando
inode y HUP, sin reinicio. Las 83 reglas terminaron evaluadas y saludables;
reloadConfigSuccess=true, lastConfigTime 2026-10-19T21:07:02Z. Hash final
<REDACTED>.
Recuperación y detalle del primer rollback por validación prematura en
coordinación.
Prioridades siguientes¶
- Revisar físicamente térmica 51 y recuperar el antecedente
thermal.offantes de tocar arranque. Alertar ya con datos existentes sirve para observarlo. - Resolver estabilidad 50 con evidencia y una ventana posterior a la copia; mantener diagnóstico remoto y no asignarle nuevas cargas para aprovechar un margen instantáneo. RAMadicional requiere reemplazar ambos DIMM y hardware compatible; no es una optimización de software pendiente de ejecutar.
- Registrar N-1 con carga caliente; +828 Mi Bno acredita holgura. Evitar nuevos recortes VM 208 con reclaim/IOen curso. Mantener procedimientosdegradados acotados y exclusiones HAexplícitas, sin parar sitios de propiedad no aclarada.
Seguimiento pasivo: 20 de octubre, 03:02:21 CEST¶
Una única query instantánea de Prometheus, a 01:02:21.680189 UTC /
03:02:21.680189 CEST, contrastó únicamente las dos instancias físicas del job
proxmox-nodes. Se usaron métricas ya recogidas: no hubo nuevas consultas a
hosts, tests SMART, probes, stress ni cambios de recursos o configuración. La
consulta local de CT217 tuvo cap de 2 MiB, timeout/alarma de diez segundos y no
devolvió warnings. La salida agrupada sustituyó las instancias por pmx50/pmx51;
no publicó labels privados.
| Medida | pmx50 | pmx51 |
|---|---|---|
| Scrape up | 1 | 1 |
| Tasa agregada de throttles, ventana 5 min | sin serie | 32,340351 eventos/s |
| Equivalente por minuto de esa tasa | sin serie | 1940,4211 eventos/min |
| ProxmoxCPUThrottling firing / pending | 0 / 0 | 1 / 0 |
| Máxima temperatura de sensores CPU filtrados | 54 °C | 84 °C |
| Load1 | 2,62 | 5,82 |
| MemAvailable | 13,4906 GiB | 10,3180 GiB |
| PSI memoria some, tasa media 5 min | 0 % | 0,000346 % |
| PSI memoria full, tasa media 5 min | 0 % | 0,000222 % |
| Edad de las muestras presentes | 6,353 s | 7,010 s |
La alerta sigue correspondiendo a pmx51. Se calculó con la misma expresión
de la regla: suma por instancia de rate(node_cpu_package_throttles_total[5m]);
el aviso exige superar 0,1 eventos/s durante diez minutos. Son tasas agregadas
de los contadores exportados, no una medida de porcentaje de rendimiento perdido.
La temperatura usa sólo chips CPU del filtro ya contrastado
platform_coretemp_.*|pci0000:00_0000:00:18_3; no mezcla DIMM o NVMe. Los 84 °C
son una muestra actual, inferior al umbral independiente de 85 °C durante diez
minutos, y no certifican que no hubiera picos. La ausencia de serie del contador
en pmx50 se conserva como desconocida: no equivale a cero throttling.
Esta consulta no revalida el cmdline ni thermal.off, identifica el estado del
ventilador o discrimina temperatura, límites de potencia y otras causas de
limitación. Tampoco atribuye los resets de pmx50 a la térmica de pmx51. La carga
y disponibilidad de memoria son muestras puntuales; no se ha calculado ni
certificado margen N-1, carga máxima o estabilidad futura. Se mantienen las
propuestas físicas y la necesidad de una ventana revisada del informe previo,
sin aplicar cambios ni lanzar más lecturas durante este seguimiento.
Nueva muestra pasiva: 20 de octubre, 04:54:02 CEST¶
Una única consulta a las 04:54:02,642386 CEST de métricas ya recogidas, con los mismos filtros de CPU y las dos instancias físicas, no produjo warnings. Sin nuevas consultas a hosts, probes, cambios de recursos ni escrituras.
| Medida | pmx50 | pmx51 |
|---|---|---|
| Scrape up | 1 | 1 |
| Máxima temperatura CPU filtrada | 48,875 °C | 70 °C |
| Load1 | 0,57 | 1,05 |
| Tasa agregada throttles, media 5 min | Sin serie | 1,27021555 eventos/s |
| Alerta throttling firing / pending | 0 / 0 | 1 / 0 |
| Alerta temperatura firing / pending | 0 / 0 | 0 / 0 |
| Edad de muestra temperatura/up | 2,317 s | 2,974 s |
Pmx51 presenta valores inferiores a los de03:02, pero mantiene throttling por encima de0,1 eventos/s y la alerta continúa firing. No se atribuye el descenso al hold ni se establece su causa física o relación con los resets de pmx50. La ausencia del contador en pmx50 sigue siendo desconocida, no cero. Son muestras puntuales, no máximos del intervalo ni certificación de margen N-1.
Nueva muestra pasiva: 20 de octubre, 07:06 CEST¶
Una lectura mínima por SSH de cada host a las 07:06:04,978775 y
07:06:05,038003 CEST obtuvo únicamente fecha, boot_id, uptime y loadavg.
Ambos boots coinciden con los anteriores: pmx50
<REDACTED_UUID> y pmx51
<REDACTED_UUID>. Esto acredita que no se observó otro
reset entre esas muestras, no la causa de los cinco resets ni estabilidad futura.
En la misma SSH de pmx51 se revalidó CT217 running en proxmox2 mediante la
API de recursos antes de una única consulta a Prometheus. A las
07:06:07,861377 CEST devolvió métricas ya recogidas, warnings0 y el mismo
filtro de chips CPU histórico; no se dispararon scrapes ni probes.
| Medida | pmx50 | pmx51 |
|---|---|---|
| Uptime del host | 17543,94 s (4 h 52 min 23,94 s) | 32833,13 s (9 h 7 min 13,13 s) |
| Load1 / load5 / load15 | 0,37 / 0,61 / 1,11 | 2,29 / 2,07 / 2,41 |
| Scrape up | 1 | 1 |
| Máxima temperatura CPU filtrada | 48,875 °C | 80 °C |
| Tasa agregada throttles, media 5 min | Sin serie | 3,03508772 eventos/s |
| Edad de las muestras de temperatura | 7,535 s | 8,192 s |
Respecto a04:54, pmx51 pasó de70 a80°C y de1,27021555 a3,03508772 eventos/s en estas muestras; pmx50 conserva48,875°C. No se consultó ALERTS en esta ronda: no se revalida el estado de las alertas con esa lectura. El contador ausente de pmx50 sigue siendo desconocido, no cero. No se infiere una causa térmica ni efecto del hold, y no se ha calculado margen N-1. Sin apps, HA, jobs, pings, pulls, cambios de recursos o configuración como parte de estas comprobaciones.
Nueva muestra pasiva: 20 de octubre, 07:53 CEST¶
Lecturas mínimas a las 07:53:02 CEST, una SSH por host, conservan los boot IDs anteriores. Pmx50 lleva 20361,33 s desde las02:13:41 (5h39min), y pmx51 35650,52 s desde las21:58:51 del19oct. No se observó un nuevo arranque; no se recontó el journal ni se aclaró la causa de los cinco resets históricos.
CT217 se revalidó running en proxmox2 antes de leer métricas almacenadas.
La consulta de 07:53:05,331080 CEST no produjo warnings.
| Medida | pmx50 | pmx51 |
|---|---|---|
| Load1 / load5 / load15 | 3,79 / 1,83 / 1,35 | 2,57 / 2,19 / 2,12 |
| Scrape up | 1 | 1 |
| Máxima temperatura CPU filtrada | 51,625 °C | 87 °C |
| Tasa agregada throttles, media5min | Sin serie, desconocido | 7,322807 eventos/s |
| Alerta throttling firing / pending | 0 / 0 | 1 / 0 |
| Alerta temperatura firing / pending | 0 / 0 | 0 / 0 |
| Edad de las muestras temperatura/up | 5,006 s | 5,663 s |
Pmx51 supera puntualmente85°C; eso no acredita diez minutos sostenidos ni contradice el estado de ALERTS de ese instante. Se mantiene la necesidad de comprobar físicamente refrigeración/ventilación. La carga puntual no demuestra la causa del throttling y éste no explica por sí mismo los resets de otro nodo. No se cambian límites, watchdog, kernel, BIOS ni RAM; no se despiertan apps ni se ejecutan backups, restores o cargas de prueba para esta observación.
Una consulta posterior de recursos PVE a las 07:54:00,360931 CEST mostró
20 invitados running en proxmox2. Contribuyentes principales estimados mediante
cpu × maxcpu: CT100≈1,43 cores, VM171≈0,45, CT217≈0,12, CT218≈0,07 y
CT110≈0,06. No se leyeron configuraciones ni argumentos de procesos. Son valores
puntuales del contador PVE: no identifican procesos ni acreditan la causa física
de los87°C. El techo maxmem de la API no se interpreta como memoria efectiva
balloon de los invitados ni modifica los ajustes anteriores.
Muestra nativa térmica: 20 de octubre, 18:17 CEST¶
Una SSH de sólo lectura por nodo revalidó su identidad y tomó dos muestras nativas separadas aproximadamente 2 s. No se consultaron aplicaciones, HA, exportadores ni NAS, ni se generó carga o se cambió configuración.
| Medida | pmx50 | pmx51 |
|---|---|---|
| Ventana CEST (UTC = CEST − 2 h) | 18:17:37,941966–18:17:39,942879 | 18:17:38,669915–18:17:40,671916 |
| Boot observado | 248d8d61…, inicio 15:55:04 |
86184726…, inicio 19oct21:58:51 |
| Uptime inicial | 8553,91 s | 73126,74 s |
| Temperatura CPU nativa | k10temp Tctl 49,75 → 48,375 °C | coretemp, package y cuatro cores 81 → 74 °C |
| Contadores core/package de cpu0–3 | No expuestos; desconocido | 1151279 → 1151279 en cada contador |
| Control turbo leído | cpufreq/boost=0; intel_pstate/no_turbo ausente |
cpufreq/boost ausente; intel_pstate/no_turbo=0 |
| Cmdline seleccionado | APST nvme_core.default_ps_max_latency_us=0, processor.max_cstate=1; sin thermal.off |
thermal.off=1 |
En pmx51, cero incrementos sólo describe esos 2,002 s: no equivale a la media Prometheus de 5 min ni acredita que se haya resuelto la alerta sostenida. Los contadores por CPU pueden representar el mismo evento de package; no se suman como eventos físicos independientes. La ausencia en pmx50 no significa cero. Los boots coinciden con las últimas identidades conocidas, sin acreditar estabilidad futura ni la causa de los resets anteriores.
intel_pstate/no_turbo=0 permite usar estados turbo; no demuestra que estuvieran
activos en el instante medido. Es la interfaz Intel correspondiente, distinta
de cpufreq/boost. Semántica oficial del kernel.
thermal.off=1 sigue tanto en el cmdline de pmx51 como en el fragmento
99-thermal-off.cfg, con el mtime histórico del 1 de agosto. No se retiró ni
se modificó turbo. Como se explicó al principio, desactivar control térmico
ACPI no demuestra desactivar las protecciones hardware de la CPU.
Estas dos muestras no justifican por sí solas cambiar controles. Sigue pendiente
revisar físicamente refrigeración/ventilación y el antecedente de thermal.off.
Un eventual ensayo reversible de turbo requeriría una ventana coordinada y
observación de temperatura y rendimiento; no se ha realizado aquí.
No se atribuye la variación térmica a trabajos paralelos, al hold o a nuestros cambios.
Evidencia privada, directorio ~/.local/state/native-thermal-20261020-f_2ft7rh/
(0700), proyecciones 0600:
pmx50.json, SHA256<REDACTED>.pmx51.json, SHA256<REDACTED>.