GNU/Linux >> Linux Esercitazione >  >> Linux

Come limitare la memoria per un servizio gestito da systemd

La manpage per systemd.exec ha un elenco di istruzioni LimitXXXX e una comoda tabella che le confronta con le ulimit opzioni, tramite setrlimit() chiamata di sistema.

Per limitare l'intero spazio degli indirizzi del processo (ulimit -v ) usa LimitAS= . Altrimenti per limitare il solo stack (ulimit -s ) usa LimitSTACK= o segmento di dati (ulimit -d ) usa LimitDATA=

Secondo il setrlimit() manpage, questi limiti causeranno il fallimento dell'allocazione di memoria aggiuntiva. STACK e AS termineranno il programma con un sigsegv se viene raggiunto il limite e lo stack deve crescere (e il programma non ha gestito questo).


Systemd supporta la limitazione dell'utilizzo della memoria tramite l'opzione MemoryLimit, come descritto in:https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html

Il modo in cui il sistema gestisce la situazione quando la memoria massima consentita (per servizio) è esaurita dipende sia dall'implementazione sottostante di cgroups sia dal modo in cui systemd implementa il controllo delle risorse; Immagino che il processo verrebbe interrotto (tramite OOM killer).


Per limiti analoghi a ulimit:

man systemd.exec

...
LimitAS=(like ulimit -v)
...
LimitRSS=(like ulimit -m)
...

Linux
  1. Linux:limite all'utilizzo della memoria per un singolo processo Linux?

  2. In che modo le pipeline limitano l'utilizzo della memoria?

  3. Come cambiare utente per un mucchio di file di servizio Systemd?

  4. Come confezionare un servizio Systemd?

  5. Come elencare i servizi Systemd in Linux

Come utilizzare il comando ulimit Linux

Come eseguire container come servizio Systemd con Podman

Come eseguire lo script della shell come servizio SystemD in Linux

Come aumentare il limite di memoria PHP

Come scrivere uno script di avvio per Systemd?

Limita l'utilizzo della memoria per un singolo processo Linux