# Issettja limiti tal-memorja b'systemd u cgroups

> systemd MemoryMax għal PHP-FPM: issettja limitu tal-memorja b'cgroup kif jirrakkomanda php.net għal PHP2Shell, b'MemoryHigh, OOMPolicy u verifiki.

Sors: https://phpsos.de/mt/blog/speichergrenzen-systemd-cgroups/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**Fil-qosor:** Għall-miżura tranżitorja ta' PHP2Shell `memory_limit=-1`, PHP-FPM għandu bżonn limitu tal-memorja barra minn PHP. Taħt systemd tissettjah b'`MemoryHigh=` bħala brejk u `MemoryMax=` bħala limitu massimu iebes f'fajl supplimentari għas-servizz FPM. `ulimit`, `LimitAS=` jew `LimitDATA=` huma għal dan, skont php.net, mhux adattati. Ivverifika wkoll `OOMPolicy=`, biex worker wieħed ma jtemmx is-servizz kollu.

## Rakkomandazzjoni li l-ewwel tqajjem mistoqsijiet

Fost il-miżuri tranżitorji li php.net ippubblika fil-21 ta' Ottubru 2026 dwar PHP2Shell hemm waħda li ħalliet ħafna amministraturi jistagħġbu: `memory_limit=-1`, jiġifieri l-ebda limitu tal-memorja f'PHP innifsu. Għal snin sħaħ l-oppost kien jitqies prattika tajba.

Konnessjoni mad-deskrizzjoni tal-vulnerabbiltà hija ovvja. F'CVE-2026-109618 stat ta' out-of-memory jista' jinterrompi PHP waqt li d-data tat-talba tkun inizjalizzata biss parzjalment. Il-miżura tranżitorja ċċaqlaq il-limitu tal-memorja minn PHP lejn is-sistema operattiva. php.net jorbotha espliċitament ma' żewġ kundizzjonijiet: il-valur irid ikun imblukkat kontra sostituzzjoni, u l-limitu jrid jiġi minn container jew cgroup, mhux minn `RLIMIT_AS` jew `RLIMIT_DATA`.

Min jimplimenta biss l-ewwel nofs ikollu server mingħajr l-ebda limitu tal-memorja. Dan l-artikolu juri t-tieni nofs. Anke flimkien il-miżura tibqa' tranżizzjoni: il-vulnerabbiltà hija rranġata biss b'PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35 jew backport ikkonfermat.

## cgroups spjegati f'żewġ sentenzi

Control Groups, fil-qosor cgroups, huma funzjoni tal-kernel ta' Linux li tiġbor il-proċessi f'gruppi u tillimita r-riżorsi tagħhom. systemd joħloq awtomatikament cgroup proprja għal kull servizz, u l-proċessi kollha tas-servizz, ma' servizz FPM għalhekk il-master u l-workers kollha, jappartjenu lilha.

L-għażliet tal-memorja ta' systemd jissettjaw valuri tal-memory controller ta' cgroup v2. Jekk is-sistema tiegħek tużax cgroup v2 turi kmand qasir:

```bash
# "cgroup2fs" ifisser: cgroup v2 hija attiva
stat -fc %T /sys/fs/cgroup/
```

Verżjonijiet attwali tad-distribuzzjonijiet komuni jużaw cgroup v2 b'mod standard. Jekk il-kmand juri xi ħaġa oħra, iċċara dan qabel il-bidla, għax id-dokumentazzjoni ta' systemd tiddeskrivi l-għażliet qodma v1 bħala skaduti.

## Issettja systemd MemoryMax għal PHP-FPM

Il-limitu jmur f'fajl supplimentari, l-hekk imsejjaħ drop-in. Hekk il-fajl tal-unit tal-pakkett jibqa' mhux mibdul, u aġġornament ma jikteb fuq l-issettjar tiegħek. L-ismijiet tas-servizzi jvarjaw skont id-distribuzzjoni; l-eżempju juża Debian u Ubuntu b'PHP 8.3.

```ini
# Tiftaħ editur għad-drop-in: sudo systemctl edit php8.3-fpm
# Riżultat: /etc/systemd/system/php8.3-fpm.service.d/override.conf
[Service]
MemoryAccounting=yes
MemoryHigh=1536M
MemoryMax=2G
MemorySwapMax=0
OOMPolicy=continue
```

L-għażliet f'ħarsa ġenerali, skont id-dokumentazzjoni ta' systemd:

| Għażla | Effett | Nota għal PHP-FPM |
|---|---|---|
| `MemoryHigh=` | limitu ta' throttling: il-proċessi jitbaxxew ħafna, il-memorja tittieħed lura | il-valur ta' kontroll veru, ftit taħt `MemoryMax` |
| `MemoryMax=` | limitu assolut: jekk ma jistax jinżamm, l-OOM-killer jidħol fis-seħħ fis-servizz | l-aħħar linja ta' difiża |
| `MemorySwapMax=` | limitu għall-iswapping | `0` jipprevjeni li s-servizz jaħrab fl-swap minflok |
| `OOMPolicy=` | imġiba wara avveniment OOM: `continue`, `stop` jew `kill` | `continue` iħalli l-workers l-oħra jkomplu jaħdmu |
| `LimitAS=`, `LimitDATA=` | rlimits għal kull proċess | skont php.net mhux adattati għal din il-miżura |

`OOMPolicy=` jixraq attenzjoni partikolari. Ma' `stop` jew `kill`, systemd wara avveniment OOM itemm is-servizz kollu, u l-websajts kollha ta' dan is-servizz FPM jaqgħu. Liema valur japplika mingħajr indikazzjoni proprja jiddeċiedi l-istandard tas-sistema `DefaultOOMPolicy=`. Ivverifika l-valur effettiv għalhekk, minflok ma tassumih.

Wara erġa' ibda s-servizz u ibblokka `memory_limit` fil-pool:

```bash
sudo systemctl restart php8.3-fpm
systemctl show php8.3-fpm -p MemoryHigh -p MemoryMax -p MemorySwapMax -p OOMPolicy -p MemoryCurrent
```

```ini
; Fajl tal-pool, pereżempju /etc/php/8.3/fpm/pool.d/seite1.conf
php_admin_value[memory_limit] = -1
```

Kif jaħdem il-blokk jiddeskrivih [php_admin_value: ibblokka l-issettjar kontra sostituzzjoni](https://phpsos.de/mt/blog/php-admin-value-sperren/).

## Sib il-valur it-tajjeb

Limitu skars żżejjed joħloq twaqqif fl-operat normali, wieħed ġeneruż żżejjed jipproteġi ftit. Il-punt tat-tluq huwa l-konsum reali.

1. Osserva l-ħtieġa attwali tal-memorja tal-proċessi FPM kollha fuq ftit jiem, anke fil-quċċati tat-tagħbija.
2. Iddetermina l-ħtieġa tipika ta' worker wieħed u immultiplika b'`pm.max_children` tal-pools kollha tas-servizz.
3. Ippjana żieda għall-proċess master, OPcache u l-quċċati.
4. Issettja `MemoryHigh=` ftit 'il fuq mill-quċċata mkejla, `MemoryMax=` b'ftit distanza 'il fuq minnha.
5. Irranġa l-valuri wara ġimgħa skont il-kejl u l-avvenimenti OOM.

```bash
# Memorja tal-proċessi PHP-FPM kollha f'MB (Resident Set Size)
ps -C php-fpm8.3 -o rss= | awk '{s+=$1} END {printf "%.0f MB\n", s/1024}'
# Ħarsa ġenerali kontinwa tal-cgroups kollha ordnati skont il-memorja
systemd-cgtop -m
```

Il-valur ta' `memory_limit` qabel il-bidla għandek tinnotah. Wara l-aġġornament tista' terġa' lura għal limitu fiss f'PHP; kif tagħżlu sew jinsab taħt [Issettja memory_limit sew](https://phpsos.de/mt/blog/memory-limit-richtig-setzen/).

## Issorvelja: meta jaħdem il-limitu

Limitu tal-memorja li ħadd ma jinduna meta jaħdem huwa sors siekta ta' żbalji. Il-kernel jgħodd avvenimenti OOM għal kull cgroup, u systemd kif ukoll il-protokoll tal-kernel jirreġistrawhom.

```bash
# Il-counter OOM tas-cgroup tas-servizz (mogħdija ma' cgroup v2)
cat /sys/fs/cgroup/system.slice/php8.3-fpm.service/memory.events
# Messaġġi tal-OOM-killer fil-protokoll tal-kernel
journalctl -k --since "-1 day" | grep -i "out of memory"
```

Jekk il-counter `oom_kill` jogħla, il-kernel jtemm workers. Dan jista' jindika limitu skars żżejjed, applikazzjoni difettuża jew talbiet mhux tas-soltu. Fis-sitwazzjoni attwali jixraq li avvenimenti bħal dawn jitqabblu mal-protokolli tal-aċċess fl-istess ħin.

> **Importanti:**
> Il-limitu tal-memorja huwa miżura tranżitorja u ma jissostitwixxix l-aġġornament ta' PHP. Ippjana l-aġġornament parallelament, u wara erġa' ibda l-proċessi kollha ta' PHP. Il-miżuri tranżitorji kollha f'ħarsa ġenerali jinsabu taħt [Miżuri immedjati meta ma tistax tippatchja għadek](https://phpsos.de/mt/php2shell/sofortmassnahmen-ohne-patch/).

X'jiġri ġewwa PHP meta tonqos il-memorja jispjegah [memory_limit u Out-of-Memory](https://phpsos.de/mt/php/out-of-memory/). Ma' Apache b'mod_php l-istess teknika tapplika għas-servizz Apache, imma PHP imbagħad jaqsam il-limitu mas-server tal-web innifsu.

## Konklużjoni: tinsiex it-tieni nofs

`memory_limit=-1` huwa miżura tranżitorja ammissibbli biss flimkien ma' limitu estern. systemd jagħmel dan il-limitu possibbli b'ftit linji: `MemoryHigh` bħala brejk, `MemoryMax` bħala limitu massimu iebes, `MemorySwapMax` kontra l-ħarba fl-swap u `OOMPolicy` magħżula konxjament. Ikkejjel minn qabel, osserva wara, u żomm f'moħħok li l-pools kollha ta' servizz jaqsmu l-limitu.

Aktar minn kollox: ippjana t-tmiem tal-miżura. Wara l-aġġornament għal verżjoni rranġata ta' PHP terġa' lura għal `memory_limit` fiss. Il-limitu tas-cgroup tista' żżommu bħala protezzjoni addizzjonali kontra proċessi li joħorġu mill-limiti.

## Kif tgħin PHP SOS b'mod konkret?

- **Inkejlu:** niġbru l-ħtieġa tal-memorja tas-servizzi PHP tiegħek u nikkalkulaw minn hemm limiti adattati.
- **Nimplimentaw:** nissettjaw drop-ins b'`MemoryHigh`, `MemoryMax` u `OOMPolicy` xierqa, nibblokkaw `memory_limit` fil-pool u nerġgħu nibdew is-servizzi b'mod ikkontrollat.
- **Nosservaw:** nintegraw l-avvenimenti OOM fil-monitoraġġ u nirranġaw il-valuri.
- **Nwasslu għall-patch:** permezz tas-[Servizz ta' patch ta' PHP](https://phpsos.de/mt/leistungen/php-patch-service/) ninstallaw l-aġġornament u nneħħu l-valuri tranżitorji wara b'mod ordnat.


## Mistoqsijiet frekwenti

**Għaliex memory_limit għandu jkun -1? Mhuwiex perikoluż?**  
Waħdu kien ikun. php.net jirrakkomanda memory_limit=-1 bħala miżura tranżitorja espliċitament flimkien ma' limitu tal-memorja permezz ta' container jew cgroup. Il-limitazzjoni tmur b'hekk minn PHP għas-sistema operattiva. Mingħajr dan il-limitu estern m'għandekx tissettja l-valur.

**Nista' nuża minflok ulimit jew LimitAS=?**  
Le. php.net jiskoraġġixxi espliċitament RLIMIT_AS u RLIMIT_DATA, u eżattament dawn il-limiti jissettjaw ulimit -v, LimitAS= u LimitDATA=. Id-dokumentazzjoni ta' systemd tindika wkoll li LimitAS= jillimita l-ispazju tal-indirizzi, mhux il-konsum tal-memorja.

**X'jiġri meta PHP-FPM jilħaq il-limitu?**  
Ma' MemoryHigh il-kernel inaqqas il-veloċità tal-proċessi u jieħu lura l-memorja. Ma' MemoryMax jidħol fis-seħħ l-OOM-killer fis-servizz u jtemm proċess, ġeneralment worker kbir. Jekk wara jieqaf is-servizz kollu jiddeċiedi OOMPolicy=.

**Il-limitu japplika għal kull pool waħdu?**  
Le. Il-pools kollha ta' servizz FPM jaqsmu cgroup waħda u għalhekk limitu komuni. Limiti separati għal kull websajt jeħtieġu servizzi FPM jew containers separati.

**Kif nissettja l-limitu f'Docker jew Kubernetes?**  
Permezz tal-limitu tal-memorja tal-container, pereżempju l-għażla --memory ma' docker run jew resources.limits.memory f'Kubernetes. It-tnejn jużaw ukoll cgroups. Il-prinċipju jibqa' l-istess: limitu barra minn PHP, memory_limit f'PHP imblukkat.

## Sorsi

- [systemd.resource-control (MemoryMax, MemoryHigh)](https://www.freedesktop.org/software/systemd/man/latest/systemd.resource-control.html)
- [systemd.service (OOMPolicy)](https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html)
- [php.net: avviżi tas-sigurtà](https://www.php.net/)
- [Manwal ta' PHP: memory_limit](https://www.php.net/manual/en/ini.core.php)
