23 KiB
Ollama na nvidia.hell — ucelený report
Stav k: 2026-09-13 21:30 (poslední ověřený záznam)
Pro: agenta, který na problému bude pokračovat
Zdroje: history.md (záznamy 2026-09-12 21:10 až 2026-09-13 21:30),
knowledge.md, todo.md, done.md, explore/negativni-zjisteni.md
1. Shrnutí v pěti větách
Ollama na nvidia.hell opakovaně shodila celý stroj (load 81 na 4 jádrech,
SSH neprošlo ani banner exchange, 45 minut nedostupnosti). Příčina není jeden
bug, ale řetěz tří nezávislých mechanismů: (1) ollama vypíná mmap podle
vzorce, který na tomhle stroji nemůže být nikdy splněn, takže model teče
do anonymní paměti místo zahoditelné page cache; (2) architektura PLE u
gemma4 drží 5,9 GiB vah v RAM hostitele bez ohledu na volnou VRAM;
(3) každé přerušení loadu (kill i vlastní timeout scheduleru) natrvalo
leakne napinovanou host paměť v nvidia driveru — uvolní ji jen reboot.
Nasazená pojistka je cgroup strop na ollama.service; ověřeně drží dostupnost
stroje (240/240 heartbeatů), ale retest v konečné podobě ještě neproběhl.
2. Prostředí
| Položka | Hodnota |
|---|---|
| Stroj | nvidia.hell — VM pod Proxmox (pve.hell, 192.168.4.47) |
| RAM | původně 11,4 GiB, uživatel snížil na 9,5 GiB (viz §5.3) |
| Swap | 32 GB, vm.swappiness=60 |
| CPU | 4 jádra |
| GPU | NVIDIA RTX 4060 Ti 16 GB (16380 MiB) |
| Ollama | 0.33.2 nativně (ne v kontejneru), unit /etc/systemd/system/ollama.service |
| Nejnovější upstream | v0.34.0 (5. 9. 2026) — release notes neřeší scheduler ani mmap |
| Frontendy | OpenWebUI (podman, :8080), LibreChat (192.168.4.45), nanobot.hell (192.168.4.64) |
| Další služby | traefik, jupyterhub, docker, nvidia-persistenced, zabbix-agent |
Klienti jsou důležití: nanobot.hell je skutečný zdroj zátěže — posílá
dávky desítek POST /api/chat a /v1/chat/completions přes ~10 různých modelů
během minut a drží qwen3-embedding:0.6b periodickými POST /api/embed.
LibreChat byl v obou incidentech jen zesilovač (po 15min timeoutu load
okamžitě zopakoval).
3. Kauzální řetěz — jak se stroj položí
nanobot.hell pošle dávku requestů přes ~10 modelů
│
▼
[1] ollama rozhoduje "fits alongside existing models" podle VRAM,
ne podle volné RAM → pustí další model i při system_free = 115 MiB
│
▼
[2] týmž dechem "disabling mmap due to host memory pressure"
(podmínka nemůže být na 9,5GiB stroji nikdy nesplněna)
→ model jde do ANONYMNÍ paměti místo page cache
│
▼
[3] u gemma4 navíc PLE drží 5901 MiB vah v host bufferu
(do VRAM jde jen 2966 MiB z 16076 volných)
│
▼
[4] RAM dojde → swap thrashing (pswpin 4512/s), %system 90 %, load 81
→ stroj nedostupný, SSH neprojde
│
▼
[5] load je přerušen (kill zvenčí NEBO vlastní timeout scheduleru)
→ llama-server umírá uprostřed CUDA init
→ napinovaná host paměť se NEUVOLNÍ → trvalý leak
│
└──► leak ubere RAM → další load se vejde ještě hůř → smyčka
Klíčové: body [1] a [2] jdou proti sobě — jedno rozhodnutí říká „vejde se", druhé v téže vteřině říká „je málo paměti". Bod [5] je ta část, která z jednoho incidentu udělá degradaci trvající do rebootu.
4. Ověřená fakta (co platí a čím je to doloženo)
4.1 Vypínání mmapu
sched.go, disableMmapForHostPressure:
FreeMemory < modelSize + max(8 GB, TotalMemory/10) → vypni mmap
Headroom je konstanta 7,45 GiB až do 80 GB RAM. Pro gemma4
(model_size="8.9 GiB") je potřeba 16,4 GiB volné RAM. Stroj má 9,5 GiB
celkem → podmínka je splněná nepodmíněně, bez ohledu na klienta i na to,
kolik je zrovna volno.
Důkaz z journalu — tři loady při zcela různé volné paměti, všechny tři
disabling mmap ... headroom="7.5 GiB":
| čas | system_free |
|---|---|
| 12:09:20 | 8,4 GiB |
| 12:44:50 | 3,4 GiB |
| 13:00:03 | 115,1 MiB |
Kontraintuitivní důsledek: čím prázdnější je karta, tím spíš se mmap vypne —
při těsné VRAM zůstává zapnutý (sched.go ř. 1235).
4.2 gemma4 / PLE
gemma4:e4b (8,95 GiB, gemma4:latest je alias téhož blobu) hlásí
offloaded 43/43 layers to GPU, ale reálně:
| - CUDA0 (RTX 4060 Ti) | 16076 = 15951 + (2966 = 2829 + 29 + 107) + -2842 |
| - Host | 5938 = 5901 + 0 + 37 |
Per-Layer Embeddings drží embeddingy na CPU záměrně
(HuggingFace blog: „PLE reduces
accelerator memory usage by offloading embeddings to the CPU"). Ollama si
ten CPU buffer započítá do předpovědi predicted="9.4 GiB", jako by šel celý
do VRAM. Na 9,5GiB stroji je 5,9 GiB host bufferu neufinancovatelné —
gemma4 se sem nevejde a nikdy nevejde, ať je karta jakkoli prázdná.
4.3 Leak napinované paměti (nejzávažnější zjištění)
Každé přerušení loadu llama-serveru uprostřed CUDA inicializace natrvalo ztratí host paměť napinovanou přes GUP (get_user_pages).
Nezáleží na tom, kdo proces ukončil. Doloženo pro obě varianty:
- externí
SIGTERMod earlyoomu (~15 killů = 9,27 GiB), - zrušení samotným ollama schedulerem (
Load failed: timed out waiting for llama-server to start: context canceledpo odpadnutí klienta) = 5,19 GiB z jednoho zrušení.
Diagnostika (jediné, co leak ukáže):
# počet napinovaných stránek
awk '/nr_foll_pin_acquired/{a=$2} /nr_foll_pin_released/{r=$2} END{print a-r, "stránek =", (a-r)*4096/1073741824, "GiB"}' /proc/vmstat
# druhý příznak: Active(anon)+Inactive(anon) >> AnonPages
grep -E 'AnonPages|Active\(anon\)|Inactive\(anon\)|MemAvailable' /proc/meminfo
Co leak NEUKÁŽE: ps -eo rss (~250 MB přes všechny procesy),
nvidia-smi (2 MiB / 16380 MiB, „No running processes found"),
systemd-cgtop (žádná služba nic nedrží), sar (nemá pro to sloupec —
proto ve vzorcích z 13:40 nesedělo 9,4 GB do žádné kategorie).
Co leak neuvolní:
systemctl restart ollama—foll_pindelta identická, navíc paměť uteče z cgroup do rodiče (memory.currentollamy spadne na 18 MB,system.slicesi 5,9 GiB nese dál) → kontejnerování platí jen do prvního restartu.rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia— proběhl čistě (lsmodprázdný), delta bit za bit stejná (2 307 318 stránek). Ověřeno 2026-09-13 20:20. Tím padl dřívější předpoklad, že teardown pomůže.
Co leak uvolní: jen reboot. Ověřeno 2026-09-13 20:26 —
MemAvailable 89 MB → 7,6 GiB, Inactive(anon) 5,9 GiB → 0.
Poznámka: nenulová foll_pin delta při běžícím modelu je normál
(po rebootu 252 949 stránek = 0,96 GiB pro načtený qwen3-embedding:0.6b).
Leak se pozná podle toho, že delta zůstane, když neběží žádný llama-server.
4.4 Cgroup pojistka — co funguje
Nasazeno v /etc/systemd/system/ollama.service.d/override.conf
(záloha override.conf.bak-20260913):
MemoryMax=6G
MemorySwapMax=0 # nejdůležitější řádek
CPUQuota=200%
CPUWeight=20
# MemoryHigh záměrně NENASTAVENO — viz §5.1
Plus /etc/systemd/system/ssh.service.d/10-oom-protect.conf:
OOMScoreAdjust=-900, MemoryMin=32M (ověřeno, že ssh.socket má
Accept=no, takže listener žije v ssh.service).
Zátěžový test 2026-09-13 16:55–17:05 (heartbeat à 2 s, každý úder nové SSH
spojení; spouštěč curl /api/generate na gemma4:latest):
| Kritérium | Výsledek |
|---|---|
| Dostupnost SSH | 240/240 úderů, 0 výpadků |
MemAvailable minimum |
3204 MiB (kritérium bylo 2 GiB) |
loadavg max |
3,41 (při incidentu 81) |
OOM killer v dmesg |
žádný |
MemorySwapMax=0 je z toho nejdůležitější — nedostupnost dělal swap thrash,
ne OOM. MemoryMax= sám o sobě mapuje na memory.max, což je strop jen pro
RAM; po jeho dosažení kernel proces nezabije, ale začne ho swapovat.
4.5 Rozlišení, proč ollama spadla
dmesg | grep -i 'oom\|constraint'
constraint=CONSTRAINT_NONE ... global_oom→ globální OOM killer, pojistka nezasáhla (stroj byl sežraný leakem, ollama se ke svému 6G stropu vůbec nedostala)constraint=CONSTRAINT_MEMCG→ cgroup limit, pojistka zafungovala
Smyčku Start request repeated too quickly dělá Restart=always +
RestartSec=30 + StartLimitBurst=3/300s z drop-inu — to je záměr, ne chyba.
5. Slepé uličky — co nezkoušet znovu
5.1 MemoryHigh je past
Nastaveno MemoryHigh=5G + MemoryMax=6G. gemma4 potřebuje host buffer
5901 MiB → padlo přesně doprostřed pásma:
memory.events: high 84358 max 0 oom 0 oom_kill 0
memory.peak: 5,46 GiB
Cgroup 84 tisíckrát reclaimovala, proces se plazil, tvrdý strop nezasáhl ani
jednou a load visel 600 s bez jediné chybové odpovědi — ani neselhal,
ani neproběhl. Pro chování „rychle selhat" se MemoryHigh nesmí nastavit.
Odstraněno.
5.2 earlyoom — zavržen, odinstalován
Nasazen 14:20, do večera pryč. Tři samostatné problémy:
- Ve výchozí konfiguraci by nezasáhl nikdy. Podmínky
-ma-splatí současně. Ze swapu bylo obsazeno 1,4 z 32 GB (~95 % volných), takžeswap <= 10 %nemohlo nastat. Man page: „You can use-s 100to have earlyoom effectively ignore swap usage." - SIGKILL práh je polovina zadané.
-s 100dá kill až přiswap <= 50 %→ nutné psát-s 100,100. - Je to zesilovač, ne pojistka. Killy llama-serveru uprostřed CUDA init
leakují (§4.3). Po ~15 killech chybělo 9,27 GiB, práh
-m 10se trvale posunul pod klidovou spotřebu a ollama už nenačetla vůbec nic — každý nový llama-server umíral už při 300 MiB RSS. Kladná zpětná vazba.
Poučení: proti procesu, který drží GPU kontext, je externí zabíječ horší než
nic. Totéž se dá čekat od systemd-oomd (PSI varianta téhož principu) —
nenasazováno, odvozeno, neověřeno měřením. Balík earlyoom je ve stavu rc,
zbývá apt purge.
5.3 Navýšení RAM neřeší nic
Headroom je konstanta 7,45 GiB do 80 GB RAM → pro gemma4 by mmap zůstal zapnutý až u ~20GiB VM. Uživatel proto paměť naopak ubral z 11,4 na 9,5 GiB.
5.4 Konfigurace ollamy nemá páku
OLLAMA_NO_MMAPneexistuje. Issue #4895, PR #6854 nikdy nesloučen („upstream changes broke this patch"). Vollama serve --helpvolba pro mmap není. Jediné, co existuje, jePARAMETER use_mmapv Modelfile — a není doloženo, žetruepřebije automatické vypnutí kvůli host memory pressure.- Ollama nemá admission control. Ověřeno z
--help(v0.33.2): neexistuje proměnná „odmítni load, když se nevejde do VRAM". K dispozici je jenOLLAMA_MAX_LOADED_MODELS,OLLAMA_MAX_QUEUE,OLLAMA_NUM_PARALLEL,OLLAMA_GPU_OVERHEAD,OLLAMA_CONTEXT_LENGTH,LLAMA_ARG_FIT_TARGET,OLLAMA_LOAD_TIMEOUT. Ollama je navržená tak, že do CPU přeteče vždycky. - Omezování počtu modelů završeno.
OLLAMA_MAX_LOADED_MODELS=1+NUM_PARALLEL=1+MAX_QUEUE=8byly v plánu a uživatel je vyhodil oprávněně: stroj shodila hostitelská RAM, ne VRAM (karta má 16 GB volných) a 49 requestů z nanobotu nepoložilo stroj frontou, ale sekvencí loadů, na cožMAX_QUEUEnesahá. - Zvedat
OLLAMA_LOAD_TIMEOUTzavrženo (online se doporučuje jako „turns a hard failure into a slow success") — u nás by jen prodloužilo thrashing z 5 na 15 minut. - Upgrade ollamy neřeší nic — v0.34.0 release notes: ChatGPT Desktop, structured output na Apple Silicon, OpenAI tool search. Nic o scheduleru ani mmapu.
5.5 Proxmox ballooning je pro LLM stroje nevhodný
pvestatd (auto_ballooning) počítá cíl z volné paměti hostitele, ne
z tlaku v guestu — ten určuje jen prioritu ve frontě. maxchange je 100 MB
na cyklus à 10 s (~10 MB/s): navýšení o 8 GB trvá ~14 minut, zatímco načtení
modelu 17 s. Během incidentu zůstalo total na 7,4 GiB, přestože guest padl
na 136 MB volných. Řešení: balloon: 0 a pevná paměť.
6. Chybné závěry, které byly cestou opraveny
| Původní závěr | Oprava |
|---|---|
| „Viníkem je LibreChat" | Uživatel reprodukoval zatuhnutí i z ollama CLI. LibreChat byl jen zesilovač; spouštěčem je samotný model. |
| „Embedding drží LibreChat" | Drží ho nanobot.hell (192.168.4.64), ne LibreChat (192.168.4.45). |
| „Regresi 0.32.10 způsobil Vulkan" | Rozbor na dev.to ji připisuje Vulkanu na iGPU — na nás nesedí (CUDA, diskrétní karta). Náš log uvádí jiný spouštěč (host memory pressure), ale ústí do téhož --load-mode none. Potvrzuje #18373. |
| „Leakuje jen externí kill" | Leakuje i zrušení vlastním schedulerem — jedno stálo 5,19 GiB. |
| „Leak uvolní teardown nvidia driveru" | rmmod neuvolnil ani stránku. Jen reboot. |
„failed (Result: oom-kill) = zafungoval cgroup strop" |
constraint=CONSTRAINT_NONE → globální OOM. Pojistka nezasáhla. |
„~9,4 GB v sar nesedí do žádné kategorie" |
Byla to právě ta napinovaná paměť; sar pro ni nemá sloupec. |
7. Upstream — nahlášené a neopravené
| Issue | Co říká | Stav |
|---|---|---|
| #18373 | Regrese načítání: 0.33.3 load 2m34s vs. 0.23.4 28s, SSD 600 MB/s místo 3 GB/s. Explicitně „all models", hlášeno i na NVIDII. | otevřené, bez reakce maintainerů |
| #10104 | 200 GB RAM, 80 GB VRAM, ollama sama nasadí --no-mmap a load selže. |
zavřené bez řešení |
| #10341 | gemma plní RAM navzdory volné VRAM, na RTX 4060 Ti 16 GB — stejná karta. | duplikát #10040 |
| #8654 | „Available memory check should be disabled when mmap is in use" | otevřené od 1/2025 |
| #4895 + PR #6854 | Žádost o globální řízení mmapu. | PR nesloučen |
První výskyt disabling mmap v journalu nvidia.hell je 2026-06-05 —
předtím ani jednou za 13 měsíců. Jde tedy o regresi, ne o vlastnost od začátku.
8. Chyby v systemd konfiguraci (obecně použitelné)
StartLimitIntervalSec/StartLimitBurstpatří do[Unit], ne[Service]— tam se tiše ignorují.RestartSecnaopak do[Service]. Property se navíc jmenujeRestartUSec→systemctl show -p RestartSecnevrátí nic.MemoryMaxsám nelimituje swap → nutnéMemorySwapMax(§4.4).- Instalátor ollamy přepisuje unit soubor.
install.sh(ř. 215) bezpodmínečně přepíše/etc/systemd/system/ollama.servicepřestee, doollama.service.d/nesahá → vlastní nastavení patří do drop-inu. Zavrženo: držet kopii unitu a po upgradu ji kopírovat zpět — konzervuje i upstream řádky (ExecStart,User,PATH). - ⚠ Limity z 12. 9. ze stroje nevysvětleně zmizely. Zapsány ve 21:10,
ve 21:44 už v
override.confnebyly (zůstaly jenStartLimit*,RestartSec,Environment). Při incidentu 13. 9. protosystemctl show ollamahlásilMemoryMax=infinity. Příčina nikdy nezjištěna. Proto existuje zálohaoverride.conf.bak-20260913a kontrola limitů musí být součástí každého ověření. - Překlep v drop-inu: zakomentovaný řádek
Environment="LLAMA_MAX_LOADED_MODELS=1"— správněOLLAMA_MAX_LOADED_MODELS, nefungoval by ani po odkomentování.
9. Ostatní zjištění k ollamě / modelům
OLLAMA_KV_CACHE_TYPE=q4_0 rozbíjí modely s head_dim nedělitelným 32
granite-code (n_embd_head_k=80) padá na
K cache type q4_0 with block size 32 does not divide n_embd_head_k=80.
12. 9. kvůli tomu spadl 6× po sobě (12:08:36–12:09:04) a každý pokus přitom
nastartoval llama-server a načetl 1,9 GiB s vypnutým mmapem. Proměnná je
globální — nastavit jde jen pro všechny modely naráz.
Stále nastaveno, neopraveno.
Capability tools neznamená, že model nástroje použije
Za 13. 9. odešly jen 3 tools/call: gemma4:e4b (2×) a glm-5.3:cloud (1×).
mistral:latest dostal ve stejné relaci stejných 5 nástrojů jako glm-5.3
a nezavolal ani jeden (job skončil za 4 s textovou odpovědí), přestože
v ollama show má capability tools. Flag říká jen to, že šablona
nástroje podporuje.
Modely bez tools (nikdy nebudou fungovat): llama3, llama2-uncensored,
tinyllama, aya, phi4, phi3.5, codellama, exaone-deep,
deepseek-coder-v2, granite-code:8b.
sar přežije reboot a chybějící vzorek je sám o sobě důkaz
/var/log/sysstat/saDD + perzistentní journal umožnily dohledat incident až
po restartu VM. Kolektor sa1 běží à 10 min z /etc/cron.d/sysstat; když
vzorek ve výpisu chybí, stroj byl v tu chvíli tak zahlcený, že cron nedoběhl —
tím se dá datovat začátek incidentu (vzorek 12:50 chyběl).
10. Aktuální stav (po rebootu 2026-09-13 20:26)
MemAvailable 7,6 GiB (bylo 89 MB)
MemFree 5,8 GiB
Inactive(anon) 0 (bylo 5,9 GiB)
foll_pin delta 252 949 stránek = 0,96 GiB ← legitimní, drží běžící model
OOM killů od bootu: 0
Běží: ollama, nvidia-persistenced, traefik, jupyterhub, docker, ssh.
Cgroup pojistka aktivní a ve správné podobě: MemoryMax=6G, MemorySwapMax=0,
MemoryHigh=infinity, CPUQuota=200%, StartLimitBurst=3/5min.
11. Co zbývá udělat
Seřazeno podle priority:
- Zastavit dávky z nanobot.hell (192.168.4.64) — bez toho je leak zpátky během minut. Zatím neuděláno.
- Retest cgroup pojistky bez
MemoryHigh— potvrdit, že load selže v řádu sekund přes cgroup OOM (memory.events→oom_kill > 0) místo desetiminutového plazení. Odblokováno rebootem. Kritéria z minulého testu: SSH heartbeat à 2 s bez výpadku,MemAvailable> 2 GiB,loadavgpod kontrolou,dmesg→constraint=CONSTRAINT_MEMCG(neCONSTRAINT_NONE). - Doladit
MemoryMaxpodle naměřenéhomemory.peakz retestu. - Rozhodnout osud gemma4 —
gemma4:latest/gemma4:12b/gemma4:e4bpotřebují kvůli PLE ~5,9 GiB host bufferu bez ohledu na volnou VRAM. Na 9,5GiB stroji se nevejdou nikdy. Otázka pro uživatele: vyřadit je? Jediné skutečné „admission control", které ollama nabízí, je nenabízet nebezpečné modely. OLLAMA_KV_CACHE_TYPE=q4_0— buď proměnnou zrušit, nebogranite-codenepoužívat.- Drobnosti:
apt purge earlyoom(balík ve stavurc, zbyly/etc/default/earlyooma/etc/default/earlyoom.bak-20260913)- snížit
--log-verbosity 4u llama-serveru (journald při incidentu žral 1,9 % CPU, journal zaplevelený) - opravit
Hostname=Zabbix serverv/etc/zabbix/zabbix_agentd.confnanvidia(agent běží a míří nazabbix.hell, ale s defaultním jménem) - LibreChat:
titleConvo: true+titleModel: "current_model"posílá na týž model druhý souběžný požadavek (v loguTitle generation timeout) - otázka: jaký monitoring doinstalovat?
sysstatna postmortem stačil. Chybí (a) alerting v reálném čase a (b) hlídač, který zakročí — ale pozor, „hlídač, který killuje" je právě ta zavržená cesta (§5.2).
12. Rychlá kuchařka pro triáž
# 1) Leakuje pinned paměť?
awk '/nr_foll_pin_acquired/{a=$2} /nr_foll_pin_released/{r=$2} \
END{print (a-r), "stránek =", (a-r)*4096/1073741824, "GiB"}' /proc/vmstat
grep -E 'MemAvailable|AnonPages|Active\(anon\)|Inactive\(anon\)' /proc/meminfo
# Active+Inactive(anon) >> AnonPages → leak.
# Když neběží žádný llama-server a delta je nenulová → leak. Řešení: REBOOT.
# 2) Platí vůbec limity? (už jednou zmizely!)
systemctl show ollama -p MemoryMax -p MemorySwapMax -p MemoryHigh -p CPUQuotaPerSecUSec
grep . /sys/fs/cgroup/system.slice/ollama.service/memory.{max,swap.max,high,current,peak}
cat /sys/fs/cgroup/system.slice/ollama.service/memory.events
# 3) Spadla ollama na cgroup stropu, nebo globálně?
dmesg | grep -iE 'oom|constraint'
# CONSTRAINT_MEMCG → pojistka zafungovala
# CONSTRAINT_NONE / global_oom → stroj byl sežraný leakem, pojistka se nedostala ke slovu
# 4) Kdo to spustil?
journalctl -u ollama --since -2h | grep -E 'disabling mmap|fits alongside|Load failed|system_free'
journalctl -u ollama --since -2h | grep -oE '192\.168\.4\.[0-9]+' | sort | uniq -c
# 192.168.4.64 = nanobot.hell (skutečný zdroj), 192.168.4.45 = LibreChat (zesilovač)
# 5) Postmortem po rebootu
sar -r -f /var/log/sysstat/sa$(date +%d) # chybějící vzorek = stroj nestíhal ani cron
sar -q -f /var/log/sysstat/sa$(date +%d) # ldavg
journalctl -b -1 -u ollama
13. Zálohy a rollback na stroji
| Co | Kde |
|---|---|
| Unit + skripty před zásahem 12. 9. | ~/backup/ollama-20260912-2108/ |
| Drop-in před cgroup pojistkou | /etc/systemd/system/ollama.service.d/override.conf.bak-20260913 |
| earlyoom config | /etc/default/earlyoom.bak-20260913 |
| SSH OOM ochrana (přidáno) | /etc/systemd/system/ssh.service.d/10-oom-protect.conf |
| Upgrade skripty | ~/bin/upgrade-ollama.sh, ~/bin/upgrade-openwebui.sh |
# rollback cgroup pojistky
sudo cp -a /etc/systemd/system/ollama.service.d/override.conf.bak-20260913 \
/etc/systemd/system/ollama.service.d/override.conf
sudo rm -f /etc/systemd/system/ssh.service.d/10-oom-protect.conf
sudo systemctl daemon-reload && sudo systemctl restart ollama ssh
# návrat driveru po rmmod (kdyby to někdo zkusil znovu — nemá to smysl)
sudo modprobe nvidia && sudo modprobe nvidia_uvm && sudo modprobe nvidia_modeset
sudo systemctl start nvidia-persistenced
Pozn.: ~/bin/nvidia-reload na stroji existuje, ale nemá smysl —
postaven na předpokladu, že rmmod leak uvolní, což bylo vyvráceno (§4.3).
14. Plné záznamy
Chronologicky v history.md:
| Záznam | Obsah |
|---|---|
| 2026-09-12 21:10 | Paměťové limity přes systemd drop-in (limity pak záhadně zmizely) |
| 2026-09-13 12:05 | LibreChat: web search bez klíčů + Python přes MCP |
| 2026-09-13 13:40 | Průzkum: nvidia.hell zahlcená na 45 minut (load 81) |
| 2026-09-13 14:00 | Oprava diagnózy: viník není LibreChat, ale práh pro mmap |
| 2026-09-13 14:20 | Rešerše upstreamu + nasazení earlyoom |
| 2026-09-13 15:45 | Ollama nefunkční, 9,3 GiB leaklé pinned paměti |
| 2026-09-13 17:10 | Cgroup pojistka nasazena a otestována, MemoryHigh past |
| 2026-09-13 20:20 | rmmod nvidia leak NEuvolnil, leak vyrostl na 8,8 GiB |
| 2026-09-13 21:30 | Reboot uvolnil leak, stroj zdravý |
Další: knowledge.md (ověřená fakta), todo.md (otevřené body),
explore/negativni-zjisteni.md (podrobný soupis negativních zjištění).