perf(ram) : plafond de tas Node — 197 Mo de RSS pour un addon qui n'en a pas besoin #39

Merged
foXaCe merged 1 commit from passe-20261018-164000-plafond-tas into main 2026-10-18 13:50:48 +02:00
Owner

[M] Mesuré le 2026-10-18 sur le LXC 112 : ultramax tenait 197 Mo de RSS pour un service qui
sert des catalogues, sans aucun réglage de tas. Node 24 prend le défaut du système (≈2 Go sur ce
conteneur) et le tas monte à ce que l'application alloue, pas à ce dont elle a besoin.

Le plafond ne coupe rien : il force le ramasse-miettes à travailler avant que le tas ne gonfle.

NODE_OPTIONS=--max-old-space-size=128

La mesure, avant/après, sur le service vivant

RSS avant         : 197 156 Ko
RSS après 45 s    : 135 156 Ko
RSS sur 4 min     : 138 828 · 158 080 · 99 356 · 99 356 Ko   (le GC travaille)
total du LXC 112  : 897 Mo → 782 Mo

⚠ Ce qui prouve que le service vit encore

$ curl -o /dev/null -w "%{http_code} %{size_download}" http://127.0.0.1:7002/manifest.json
200 64671

journal : « Ultra MAX v8.0.0 running on port 7000 »
          « Total catalog defs: 570 » · « [home-rows-warm] 9/9 page(s) posée(s) »
          0 erreur, 0 « out of memory » depuis le redémarrage

Le port publié est 7002 (PORT=7002 dans .env), pas 7000 : 7000 est le port interne.

Pourquoi 128 Mo, et pas moins

Le tas observé tournait autour de 120–150 Mo avant le plafond. Descendre plus bas ferait
travailler le GC pour rien et rapprocherait du out of memory sur une bibliothèque chaude. 128
laisse de la marge sous le pic observé tout en supprimant le gonflement.

⚠ Ce chiffre se remesure si les catalogues grossissent : un plafond qu'on ne relit pas devient un
plafond qui coupe. La même passe a mesuré que le total du conteneur n'était pas une fuite —
882→893 Mo sur cinq minutes, plat, avant tout réglage.

Ce que cette PR ne fait pas

Elle ne touche pas aiostreams (déjà réglé : --max-semi-space-size=8), ni wacustom (63 Mo, très
actif), ni la plomberie Docker (130 Mo, incompressible à quatre conteneurs).

`[M]` Mesuré le 2026-10-18 sur le LXC 112 : `ultramax` tenait **197 Mo** de RSS pour un service qui sert des catalogues, **sans aucun réglage de tas**. Node 24 prend le défaut du système (≈2 Go sur ce conteneur) et le tas monte à ce que l'application **alloue**, pas à ce dont elle a besoin. Le plafond ne coupe rien : il force le ramasse-miettes à travailler avant que le tas ne gonfle. ```yaml NODE_OPTIONS=--max-old-space-size=128 ``` ## La mesure, avant/après, sur le service vivant ``` RSS avant : 197 156 Ko RSS après 45 s : 135 156 Ko RSS sur 4 min : 138 828 · 158 080 · 99 356 · 99 356 Ko (le GC travaille) total du LXC 112 : 897 Mo → 782 Mo ``` ## ⚠ Ce qui prouve que le service vit encore ``` $ curl -o /dev/null -w "%{http_code} %{size_download}" http://127.0.0.1:7002/manifest.json 200 64671 journal : « Ultra MAX v8.0.0 running on port 7000 » « Total catalog defs: 570 » · « [home-rows-warm] 9/9 page(s) posée(s) » 0 erreur, 0 « out of memory » depuis le redémarrage ``` Le port publié est **7002** (`PORT=7002` dans `.env`), pas 7000 : 7000 est le port interne. ## Pourquoi 128 Mo, et pas moins Le tas observé tournait autour de **120–150 Mo** avant le plafond. Descendre plus bas ferait travailler le GC pour rien et rapprocherait du `out of memory` sur une bibliothèque chaude. 128 laisse de la marge sous le pic observé tout en supprimant le gonflement. ⚠ **Ce chiffre se remesure** si les catalogues grossissent : un plafond qu'on ne relit pas devient un plafond qui coupe. La même passe a mesuré que le total du conteneur n'était **pas une fuite** — 882→893 Mo sur cinq minutes, plat, avant tout réglage. ## Ce que cette PR ne fait pas Elle ne touche pas `aiostreams` (déjà réglé : `--max-semi-space-size=8`), ni `wacustom` (63 Mo, très actif), ni la plomberie Docker (130 Mo, incompressible à quatre conteneurs).
perf(ram) : plafond de tas Node — 197 Mo de RSS pour un addon qui n'en a pas besoin
All checks were successful
Porte / porte (pull_request) Successful in 2m29s
3bfe98b6fd
`[M]` Mesuré le 2026-10-18 sur le LXC 112 : `ultramax` tenait **197 Mo** de RSS pour un service qui
sert des catalogues, sans aucun réglage de tas. Node 24 prend le défaut du système (≈2 Go sur ce
conteneur) et le tas monte à ce que l'application ALLOUE, pas à ce dont elle a besoin.

Le plafond ne coupe rien : il force le ramasse-miettes à travailler avant que le tas ne gonfle.

    NODE_OPTIONS=--max-old-space-size=128

## La mesure, avant/après, sur le service vivant

```
RSS avant         : 197 156 Ko
RSS après 45 s    : 135 156 Ko
RSS sur 4 min     : 138 828 · 158 080 · 99 356 · 99 356 Ko   (le GC travaille)
total du LXC 112  : 897 Mo → 782 Mo
```

⚠ **CE QUI PROUVE QUE LE SERVICE VIT ENCORE** :

```
$ curl -o /dev/null -w "%{http_code} %{size_download}" http://127.0.0.1:7002/manifest.json
200 64671

journal : « Ultra MAX v8.0.0 running on port 7000 » · « Total catalog defs: 570 »
          « [home-rows-warm] 9/9 page(s) posée(s) » · 0 erreur, 0 « out of memory »
```

## Pourquoi 128 Mo, et pas moins

Le tas observé tournait autour de 120–150 Mo avant le plafond. Descendre plus bas ferait travailler
le GC pour rien et rapprocherait du `out of memory` sur une bibliothèque chaude. 128 laisse de la
marge sous le pic observé tout en supprimant le gonflement.

⚠ Ce chiffre se **remesure** si les catalogues grossissent : un plafond qu'on ne relit pas devient un
plafond qui coupe.
foXaCe merged commit a50deffb73 into main 2026-10-18 13:50:48 +02:00
foXaCe deleted branch passe-20261018-164000-plafond-tas 2026-10-18 13:50:48 +02:00
Sign in to join this conversation.
No reviewers
No labels
montee-majeure
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
foXaCe/UltraMax!39
No description provided.