Files
felhom.eu/documentation/audits/sizing-2026-10-13/sizing.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

743 lines
16 KiB
JSON

{
"schema": 1,
"generated": "2026-10-13",
"units": {
"mem": "MB (MiB); docker-style used = memory.current - inactive_file",
"cpu": "% of the whole Intel N100 (4 cores = 100 %)"
},
"cpu_classes": {
"light": "rest < 1 % and busiest minute < 15 %",
"medium": "between",
"heavy-in-bursts": "busiest minute >= 50 % (two cores busy for a minute)"
},
"floor": {
"host_mem_used_mb": 2494,
"guest_mem_anon_mb": 200,
"platform_containers_mb": {
"felhom-controller": 29,
"cloudflared": 38,
"filebrowser": 75,
"traefik": 113
},
"platform_containers_total_mb": 255,
"note": "host_mem_used_mb is MemTotal-MemAvailable on the N100 with only the platform running (Proxmox, the agent, the guest and its four built-in containers); opengist, the one app deployed there, is excluded from the platform figures and is ~23 MB"
},
"power": {
"method": "Intel RAPL package energy (CPU package only) sampled every 5 s on the host — approximate, CPU only, not wall power. The operator had no plug-in meter on 2026-10-13.",
"rest_w": 3.9,
"rest_window": "floor: platform only, 15 min",
"work_w_avg": 12.5,
"work_w_peak_1m": 14.7,
"work_window": "Immich import of 200 photos + all jobs, 411 s",
"temp_c_max_during_work": 70.0,
"fan": "not reported"
},
"apps": [
{
"slug": "actualbudget",
"display_name": "ActualBudget",
"mem_typical_mb": 44,
"mem_peak_mb": 167,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "adventurelog",
"display_name": "AdventureLog",
"mem_typical_mb": 361,
"mem_peak_mb": 464,
"cpu_class": "medium",
"cpu_note": "at first start only",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "audiobookshelf",
"display_name": "Audiobookshelf",
"mem_typical_mb": 48,
"mem_peak_mb": 54,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "bentopdf",
"display_name": "BentoPDF",
"mem_typical_mb": 5,
"mem_peak_mb": 10,
"cpu_class": "light",
"cpu_note": "",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "bookstack",
"display_name": "BookStack",
"mem_typical_mb": 159,
"mem_peak_mb": 225,
"cpu_class": "light",
"cpu_note": "",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "calcom",
"display_name": "Cal.com",
"mem_typical_mb": 800,
"mem_peak_mb": 950,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-28"
},
{
"slug": "calibre-web",
"display_name": "Calibre-Web Automated",
"mem_typical_mb": 191,
"mem_peak_mb": 413,
"cpu_class": "medium",
"cpu_note": "only while it imports new books",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "claper",
"display_name": "Claper",
"mem_typical_mb": 248,
"mem_peak_mb": 248,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-28"
},
{
"slug": "code-server",
"display_name": "Code-Server",
"mem_typical_mb": 59,
"mem_peak_mb": 59,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "crafty-controller",
"display_name": "Crafty Controller",
"mem_typical_mb": 78,
"mem_peak_mb": 84,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "dawarich",
"display_name": "Dawarich",
"mem_typical_mb": 390,
"mem_peak_mb": 890,
"cpu_class": "light",
"cpu_note": "at first start only",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-01"
},
{
"slug": "docmost",
"display_name": "Docmost",
"mem_typical_mb": 415,
"mem_peak_mb": 495,
"cpu_class": "light",
"cpu_note": "",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "emby",
"display_name": "Emby",
"mem_typical_mb": 142,
"mem_peak_mb": 146,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "ghost",
"display_name": "Ghost",
"mem_typical_mb": 149,
"mem_peak_mb": 149,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "gitea",
"display_name": "Gitea",
"mem_typical_mb": 74,
"mem_peak_mb": 136,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "glance",
"display_name": "Glance",
"mem_typical_mb": 6,
"mem_peak_mb": 7,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "gokapi",
"display_name": "Gokapi",
"mem_typical_mb": 7,
"mem_peak_mb": 77,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "grafana",
"display_name": "Grafana",
"mem_typical_mb": 220,
"mem_peak_mb": 435,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "gramps-web",
"display_name": "Gramps Web",
"mem_typical_mb": 326,
"mem_peak_mb": 342,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-06"
},
{
"slug": "grimmory",
"display_name": "Grimmory",
"mem_typical_mb": 346,
"mem_peak_mb": 1095,
"cpu_class": "medium",
"cpu_note": "at first start only",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-01"
},
{
"slug": "grocy",
"display_name": "Grocy",
"mem_typical_mb": 30,
"mem_peak_mb": 114,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-10"
},
{
"slug": "home-assistant",
"display_name": "Home Assistant",
"mem_typical_mb": 318,
"mem_peak_mb": 328,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "homebox",
"display_name": "Homebox",
"mem_typical_mb": 17,
"mem_peak_mb": 118,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "homepage",
"display_name": "Homepage",
"mem_typical_mb": 82,
"mem_peak_mb": 83,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "immich",
"display_name": "Immich",
"mem_typical_mb": 1356,
"mem_peak_mb": 3061,
"cpu_class": "heavy-in-bursts",
"cpu_note": "only while it reads new photos: thumbnails, face and search indexing (200 photos took about 6 minutes)",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "jellyfin",
"display_name": "Jellyfin",
"mem_typical_mb": 191,
"mem_peak_mb": 373,
"cpu_class": "heavy-in-bursts",
"cpu_note": "only while it converts a film for a device that cannot play it (a 3-minute 1080p film took 41 seconds, CPU only)",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "karakeep",
"display_name": "Karakeep",
"mem_typical_mb": 361,
"mem_peak_mb": 1050,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-01"
},
{
"slug": "kimai",
"display_name": "Kimai",
"mem_typical_mb": 163,
"mem_peak_mb": 240,
"cpu_class": "light",
"cpu_note": "",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "komga",
"display_name": "Komga",
"mem_typical_mb": 442,
"mem_peak_mb": 496,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "lubelogger",
"display_name": "LubeLogger",
"mem_typical_mb": 53,
"mem_peak_mb": 113,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-10"
},
{
"slug": "mealie",
"display_name": "Mealie",
"mem_typical_mb": 273,
"mem_peak_mb": 431,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-24"
},
{
"slug": "metube",
"display_name": "MeTube",
"mem_typical_mb": 62,
"mem_peak_mb": 329,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-02"
},
{
"slug": "n8n",
"display_name": "n8n",
"mem_typical_mb": 321,
"mem_peak_mb": 550,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "navidrome",
"display_name": "Navidrome",
"mem_typical_mb": 14,
"mem_peak_mb": 18,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "nextcloud",
"display_name": "Nextcloud",
"mem_typical_mb": 314,
"mem_peak_mb": 525,
"cpu_class": "light",
"cpu_note": "while files are uploaded (500 MB: busiest minute 13 %)",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-23"
},
{
"slug": "nzbget",
"display_name": "NZBGet",
"mem_typical_mb": 5,
"mem_peak_mb": 5,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-12"
},
{
"slug": "onlyoffice",
"display_name": "OnlyOffice",
"mem_typical_mb": 364,
"mem_peak_mb": 488,
"cpu_class": "medium",
"cpu_note": "at first start only",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "opengist",
"display_name": "OpenGist",
"mem_typical_mb": 27,
"mem_peak_mb": 68,
"cpu_class": "light",
"cpu_note": "",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "outline",
"display_name": "Outline",
"mem_typical_mb": 282,
"mem_peak_mb": 393,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "paperless-ngx",
"display_name": "Paperless-ngx",
"mem_typical_mb": 568,
"mem_peak_mb": 659,
"cpu_class": "medium",
"cpu_note": "only while it reads new scanned documents (text recognition, about 4 pages a minute)",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "papra",
"display_name": "Papra",
"mem_typical_mb": 266,
"mem_peak_mb": 405,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-02"
},
{
"slug": "plant-it",
"display_name": "Plant-it",
"mem_typical_mb": 50,
"mem_peak_mb": 256,
"cpu_class": null,
"cpu_note": "",
"source": "unmeasured",
"measured_on": null,
"date": null,
"lifecycle": "abandoned"
},
{
"slug": "plex",
"display_name": "Plex",
"mem_typical_mb": 232,
"mem_peak_mb": 234,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "privatebin",
"display_name": "PrivateBin",
"mem_typical_mb": 40,
"mem_peak_mb": 59,
"cpu_class": "light",
"cpu_note": "",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-13"
},
{
"slug": "qbittorrent",
"display_name": "qBittorrent",
"mem_typical_mb": 163,
"mem_peak_mb": 318,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-12"
},
{
"slug": "radarr",
"display_name": "Radarr",
"mem_typical_mb": 96,
"mem_peak_mb": 100,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "radicale",
"display_name": "Radicale",
"mem_typical_mb": 27,
"mem_peak_mb": 27,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-01"
},
{
"slug": "rallly",
"display_name": "Rallly",
"mem_typical_mb": 360,
"mem_peak_mb": 479,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "recipe-importer",
"display_name": "Recipe Importer",
"mem_typical_mb": 63,
"mem_peak_mb": 72,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "romm",
"display_name": "RomM",
"mem_typical_mb": 528,
"mem_peak_mb": 769,
"cpu_class": "medium",
"cpu_note": "at first start; a library scan was not measured",
"source": "telemetry",
"measured_on": "demo-hp",
"date": "2026-10-04"
},
{
"slug": "sabnzbd",
"display_name": "SABnzbd",
"mem_typical_mb": 68,
"mem_peak_mb": 68,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-12"
},
{
"slug": "seerr",
"display_name": "Jellyseerr",
"mem_typical_mb": 166,
"mem_peak_mb": 168,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "sonarr",
"display_name": "Sonarr",
"mem_typical_mb": 77,
"mem_peak_mb": 77,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-01"
},
{
"slug": "sparkyfitness",
"display_name": "SparkyFitness",
"mem_typical_mb": 305,
"mem_peak_mb": 664,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-01"
},
{
"slug": "tandoor",
"display_name": "Tandoor Recipes",
"mem_typical_mb": 868,
"mem_peak_mb": 868,
"cpu_class": "medium",
"cpu_note": "at first start only",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-27"
},
{
"slug": "termix",
"display_name": "Termix",
"mem_typical_mb": 102,
"mem_peak_mb": 117,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "transmission",
"display_name": "Transmission",
"mem_typical_mb": 6,
"mem_peak_mb": 22,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-12"
},
{
"slug": "uptime-kuma",
"display_name": "Uptime Kuma",
"mem_typical_mb": 103,
"mem_peak_mb": 227,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
},
{
"slug": "vaultwarden",
"display_name": "Vaultwarden",
"mem_typical_mb": 44,
"mem_peak_mb": 99,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-06"
},
{
"slug": "vikunja",
"display_name": "Vikunja",
"mem_typical_mb": 20,
"mem_peak_mb": 104,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "wanderer",
"display_name": "Wanderer",
"mem_typical_mb": 143,
"mem_peak_mb": 147,
"cpu_class": "light",
"cpu_note": "",
"source": "measured",
"measured_on": "demo-felhom (N100)",
"date": "2026-10-13"
},
{
"slug": "wger",
"display_name": "wger",
"mem_typical_mb": 246,
"mem_peak_mb": 267,
"cpu_class": null,
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-10-01",
"lifecycle": "hidden"
},
{
"slug": "wishlist",
"display_name": "Wishlist",
"mem_typical_mb": 115,
"mem_peak_mb": 184,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-23"
},
{
"slug": "zipline",
"display_name": "Zipline",
"mem_typical_mb": 196,
"mem_peak_mb": 217,
"cpu_class": "light",
"cpu_note": "",
"source": "onboarding",
"measured_on": null,
"date": "2026-09-30"
}
]
}