Files
felhom.eu/documentation/audits/sizing-2026-10-13/evidence/b7/summary.json
T
admin c885b5acf4 Audit: what a Felhom box needs — floor, 64 apps' memory and CPU, power (N100 bench); R-993..R-995; R-231 due check read green
Measured on demo-felhom (N100, 16 GB): 61 apps deployed and removed through the
product, sampled every 5 s; heavy apps with one real action (Immich 200 photos,
Jellyfin transcode, Paperless OCR, Nextcloud 500 MB, ...). sizing.json for the
estimator (tools/build_sizing.py), SIZING.md with the proposed minimum machine,
METHOD.md. Power is RAPL CPU-package only (no meter). R-993 asks the operator to
approve the minimum machine; R-994 lists catalog limits/requests that are too low;
R-995 records leftover unnamed volumes after removal. R-231's dated check measured:
dooplex-backup.service success, journal green.
2026-10-13 13:23:51 +02:00

256 lines
5.5 KiB
JSON

{
"apps": {
"felhom-controller": {
"samples": 223,
"rest_samples": 179,
"mem_rest_avg_mb": 85,
"mem_rest_p95_mb": 87,
"mem_peak_used_mb": 118,
"mem_peak_anon_mb": 58,
"mem_rest_anon_avg_mb": 26,
"kernel_memory_peak_mb": 210,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.25,
"cpu_peak_1m_pct": 1.3,
"cpu_peak_5s_pct": 6.7,
"work_seconds": 1116,
"containers": {
"felhom-controller": {
"peak_used_mb": 118,
"peak_anon_mb": 58,
"limit_mb": null
}
}
},
"cloudflared": {
"samples": 223,
"rest_samples": 179,
"mem_rest_avg_mb": 23,
"mem_rest_p95_mb": 23,
"mem_peak_used_mb": 23,
"mem_peak_anon_mb": 16,
"mem_rest_anon_avg_mb": 16,
"kernel_memory_peak_mb": 68,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.11,
"cpu_peak_1m_pct": 0.1,
"cpu_peak_5s_pct": 0.4,
"work_seconds": 1116,
"containers": {
"cloudflared": {
"peak_used_mb": 23,
"peak_anon_mb": 16,
"limit_mb": null
}
}
},
"filebrowser": {
"samples": 223,
"rest_samples": 179,
"mem_rest_avg_mb": 25,
"mem_rest_p95_mb": 25,
"mem_peak_used_mb": 25,
"mem_peak_anon_mb": 15,
"mem_rest_anon_avg_mb": 15,
"kernel_memory_peak_mb": 101,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.03,
"cpu_peak_1m_pct": 0.0,
"cpu_peak_5s_pct": 0.2,
"work_seconds": 1116,
"containers": {
"filebrowser": {
"peak_used_mb": 25,
"peak_anon_mb": 15,
"limit_mb": 256
}
}
},
"traefik": {
"samples": 223,
"rest_samples": 179,
"mem_rest_avg_mb": 35,
"mem_rest_p95_mb": 38,
"mem_peak_used_mb": 43,
"mem_peak_anon_mb": 26,
"mem_rest_anon_avg_mb": 18,
"kernel_memory_peak_mb": 125,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.01,
"cpu_peak_1m_pct": 0.3,
"cpu_peak_5s_pct": 1.0,
"work_seconds": 1116,
"containers": {
"traefik": {
"peak_used_mb": 43,
"peak_anon_mb": 26,
"limit_mb": null
}
}
},
"opengist": {
"samples": 223,
"rest_samples": 179,
"mem_rest_avg_mb": 41,
"mem_rest_p95_mb": 41,
"mem_peak_used_mb": 45,
"mem_peak_anon_mb": 23,
"mem_rest_anon_avg_mb": 20,
"kernel_memory_peak_mb": 46,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.03,
"cpu_peak_1m_pct": 0.0,
"cpu_peak_5s_pct": 0.2,
"work_seconds": 1116,
"containers": {
"opengist": {
"peak_used_mb": 45,
"peak_anon_mb": 23,
"limit_mb": 128
}
}
},
"plex": {
"samples": 217,
"rest_samples": 179,
"mem_rest_avg_mb": 232,
"mem_rest_p95_mb": 233,
"mem_peak_used_mb": 234,
"mem_peak_anon_mb": 228,
"mem_rest_anon_avg_mb": 227,
"kernel_memory_peak_mb": 247,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.22,
"cpu_peak_1m_pct": 3.4,
"cpu_peak_5s_pct": 15.2,
"work_seconds": 1086,
"containers": {
"plex": {
"peak_used_mb": 234,
"peak_anon_mb": 228,
"limit_mb": 2048
}
}
},
"emby": {
"samples": 211,
"rest_samples": 179,
"mem_rest_avg_mb": 142,
"mem_rest_p95_mb": 145,
"mem_peak_used_mb": 146,
"mem_peak_anon_mb": 95,
"mem_rest_anon_avg_mb": 92,
"kernel_memory_peak_mb": 159,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.18,
"cpu_peak_1m_pct": 1.9,
"cpu_peak_5s_pct": 14.9,
"work_seconds": 1056,
"containers": {
"emby": {
"peak_used_mb": 146,
"peak_anon_mb": 95,
"limit_mb": 2048
}
}
},
"komga": {
"samples": 205,
"rest_samples": 179,
"mem_rest_avg_mb": 442,
"mem_rest_p95_mb": 443,
"mem_peak_used_mb": 444,
"mem_peak_anon_mb": 439,
"mem_rest_anon_avg_mb": 438,
"kernel_memory_peak_mb": 452,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.15,
"cpu_peak_1m_pct": 0.5,
"cpu_peak_5s_pct": 3.6,
"work_seconds": 1025,
"containers": {
"komga": {
"peak_used_mb": 444,
"peak_anon_mb": 439,
"limit_mb": 768
}
}
},
"navidrome": {
"samples": 199,
"rest_samples": 179,
"mem_rest_avg_mb": 14,
"mem_rest_p95_mb": 19,
"mem_peak_used_mb": 20,
"mem_peak_anon_mb": 18,
"mem_rest_anon_avg_mb": 13,
"kernel_memory_peak_mb": 33,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.04,
"cpu_peak_1m_pct": 0.1,
"cpu_peak_5s_pct": 0.2,
"work_seconds": 995,
"containers": {
"navidrome": {
"peak_used_mb": 20,
"peak_anon_mb": 18,
"limit_mb": 256
}
}
},
"audiobookshelf": {
"samples": 193,
"rest_samples": 179,
"mem_rest_avg_mb": 48,
"mem_rest_p95_mb": 49,
"mem_peak_used_mb": 52,
"mem_peak_anon_mb": 47,
"mem_rest_anon_avg_mb": 43,
"kernel_memory_peak_mb": 57,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.04,
"cpu_peak_1m_pct": 0.1,
"cpu_peak_5s_pct": 0.3,
"work_seconds": 965,
"containers": {
"audiobookshelf": {
"peak_used_mb": 52,
"peak_anon_mb": 47,
"limit_mb": 512
}
}
},
"crafty-controller": {
"samples": 181,
"rest_samples": 179,
"mem_rest_avg_mb": 78,
"mem_rest_p95_mb": 78,
"mem_peak_used_mb": 84,
"mem_peak_anon_mb": 60,
"mem_rest_anon_avg_mb": 55,
"kernel_memory_peak_mb": 330,
"oom_kills": 0,
"cpu_rest_avg_pct": 0.09,
"cpu_peak_1m_pct": 0.2,
"cpu_peak_5s_pct": 1.8,
"work_seconds": 904,
"containers": {
"crafty-controller": {
"peak_used_mb": 84,
"peak_anon_mb": 60,
"limit_mb": 2048
}
}
}
},
"host": {
"host_mem_used_rest_avg_mb": 3302,
"host_mem_used_peak_mb": 3610,
"guest_mem_current_rest_avg_mb": 8520,
"guest_anon_rest_avg_mb": 1126,
"rapl_pkg_w_rest_avg": 4.19,
"rapl_pkg_w_peak_5s": 14.18,
"rapl_pkg_w_peak_1m": 9.09,
"pkg_temp_c_max": 62.0
}
}