Suppongo che non sia un problema così raro: un processo alloca enormi quantità di memoria (sia a causa di un bug di perdita di memoria, perché si tenta di elaborare un file di input di dimensioni impossibili, o altro). La RAM si riempie e ad un certo punto Linux deve passare allo scambio. Bene, a volte questa è solo l'ultima risorsa: se ho un calcolo costoso in corso, non voglio perdere dati se verso la fine esaurisco la RAM.
Piuttosto più spesso comunque (nella mia esperienza), il consumo di memoria è illimitato, da un processo canaglia, forse difettoso. Vale a dire, non finisco solo con alcuni dati meno urgentemente necessari per lo scambio, ma il sistema operativo è costretto a scambiare in modo panico un sacco di dati. E questo purtroppo non solo interrompe pesantemente il processo offensivo, ma può portare l'intero sistema quasi a un punto morto (non è più così male su macchine con SSD, ma OTOH mi fa preoccupare se scrivere gigabyte e gigabyte di dati spazzatura potrebbe a lungo termine danneggiare le celle flash).
Fino a quando non ho notato il problema e ho terminato manualmente il processo (una volta ci sono voluti alcuni minuti prima che mi fossi persino registrato in un terminale virtuale!), Metà della mia sessione di corsa è in scambio e devo aspettare un po 'finché il sistema non funziona senza problemi ancora.
Esiste una soluzione draconica al problema: applicare un limite di memoria rigida. Ma fare questo a livello di sistema a volte ucciderebbe i processi che preferirei ancora, e se devo farlo manualmente ulimit
prima di iniziare un processo offensivo ... beh, spesso dimenticherò fino a quando non è troppo tardi.
Possibili tipi di soluzione di cui sarei più felice:
- Se qualsiasi processo supera un determinato utilizzo della memoria, viene rallentato artificialmente in modo che il resto del sistema rimanga reattivo.
- Se qualsiasi processo supera un determinato utilizzo della memoria, è
SIGSTOP
ped quindi ho il tempo di capire cosa fare dopo. - Se un processo si avvicina al limite della RAM, ricevo un avviso prima che inizi il grande scambio.
C'è un modo per ottenere un simile comportamento o simile?
ulimit
serve.