Abbiamo un sistema Linux incorporato senza swap.
Attualmente dobbiamo allarmare quando l'utilizzo della memoria% aumenta su un limite. E riavviare quando la percentuale di utilizzo della memoria aumenta oltre una soglia (più alta).
Perché vogliamo farlo: se un programma perde, possiamo riavviare la sicurezza prima che il kernel inizi a uccidere i nostri processi (il che può portare a corruzione o indisponibilità dei dati).
Ma abbiamo un problema:
Come contare l'utilizzo della memoria% che può essere utilizzato per il nostro scopo?
Abbiamo provato a contare l'utilizzo della memoria usando i valori di / proc / meminfo:
/ # cat /proc/meminfo
MemTotal: 126744 kB
MemFree: 58256 kB
Buffers: 16740 kB
Cached: 31308 kB
SwapCached: 0 kB
Active: 37580 kB
Inactive: 24000 kB
Senza successo:
(MemTotal - MemFree)
non è utilizzabile, perché contiene ad esempio cache.
(MemTotal - MemFree - Buffers - Cached)
ha ignorato l'effetto di Inactive
. Quindi fornisce anche valori di utilizzo della memoria troppo grandi.
(MemTotal - MemFree - Buffers - Cached - Inactive)
è inutilizzabile, perché il risultato può essere negativo.