5.4. Ottimizzazione capacità
Consultare questa sezione per informazioni sulla memoria, kernel e capacità del file system, per i parametri relativi ed i compromessi presenti nella modifica di questi parametri.
Per impostare temporaneamente questi valori durante il processo di ottimizzazione, usare il comando echo con il valore desiderato per il file appropriato nel file system proc. Per esempio per impostare
overcommit_memory
momentaneamente su 1
, eseguire:
# echo 1 > /proc/sys/vm/overcommit_memory
Da notare che il percorso per il parametro nel file system proc varia in base al sistema interessato alla modifica.
Per impostare questi valori in modo permanente, usare il comando
sysctl
. Per maggiori informazioni consultare la Deployment Guide disponibile su http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.
Valori ottimizzabili della memoria relativi alla capacità
Questi parametri sono posizionati in
/proc/sys/vm/
nel file system proc.
overcommit_memory
- Definisce le condizioni che determinano se una richiesta di memoria molto grande può essere accettata o negata. Per questo parametro sono disponibili tre valori:
0
— L'impostazione predefinita. Il kernel esegue una gestione euristica del sovraccarico della memoria disponibile, negando le richieste chiaramente invalide. Sfortunatamente poichè la memoria viene assegnata usando un algoritmo euristico e non preciso, questa impostazione può talvolta sovraccaricare la memoria disponibile del sistema.1
— Il kernel non esegue alcuna gestione del sovraccarico della memoria. Con questo tipo di impostazione si aumentano le possibilità di un sovraccarico della memoria, ma anche delle prestazioni per compiti "memory-intensive".2
— Il kernel nega le richieste per una memoria uguale o maggiore alla somma totale tra lo swap disponibile e la percentuale di RAM fisica specificata inovercommit_ratio
. Questa impostazione è ideale se si desidera avere un minor rischio di un utilizzo eccessivo della memoria.Nota
Questa impostazione è consigliata solo per sistemi con un'area di swap più grande della memoria fisica.
overcommit_ratio
- Specifica la percentuale di RAM fisica considerata quando
overcommit_memory
viene impostato su2
. Il valore predefinito è50
. max_map_count
- Definisce il numero massimo di aree per la mappatura della memoria che un processo è in grado di usare. In numerosi casi il valore predefinito di
65530
è quello più appropriato. Aumentate questo valore se l'applicazione deve mappare un numer maggiore di file. nr_hugepages
- Definisce il numero di hugepages configurate nel kernel. Il valore predefinito è 0. È possibile solo allocare (o deallocare) hugepages se è presente un numero sufficiente di pagine fisiche disponibili adiacenti. Pagine riservate da questo parametro non possono essere usate per altri scopi. Maggiori informazioni sono disponibili nella documentazione installata:
/usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt
Parametri regolabili del kernel relativi alla capacità
I parametri di seguito indicati sono posizionati in
/proc/sys/kernel/
nel file system proc.
msgmax
- Definisce la dimensione massima permessa in byte di qualsiasi mesaggio in una coda. Questo valore non deve superare la dimensione della coda (
msgmnb
). Il valore predefinito è65536
. msgmnb
- Definisce la dimensione massima in byte di una coda singola del messaggio. Il valore predefinito è
65536
byte. msgmni
- Definisce il numero massimo di identificatori della coda del messaggio (e quindi il numero massimo di code). Il valore predefinito su macchine con una architettura a 64-bit è
1985
; per architetture a 32-bit il valore predefinito è1736
. shmall
- Definisce il numero totale di memoria condivisa in byte utilizzabile sul sistema in un dato momento. Il valore predefinito su macchine con una architettura a 64-bit è
4294967296
; per architetture a 32-bit il valore predefinito è268435456
. shmmax
- Definisce il segmento massimo della memoria condivisa permesso dal kernel, in byte. Il valore predefinito sulle macchine con una architettura a 64-bit è
68719476736
; per architetture a 32-bit il valore predefinito è4294967295
. Da notare tuttavia che il kernel supporta valori molto più grandi. shmmni
- Definisce il numero massimo per l'intero sistema di segmenti della memoria condivisa. Il valore predefinito è
4096
sia per l'architettura a 64-bit che per quella a 32-bit. threads-max
- Definisce il numero massimo di thread (compiti) per l'intero sistema utilizzabili dal kernel in un dato momento. Il valore predefinito è uguale al valore di
max_threads
del kernel. La formula usata è:max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE )
Il valore minimo dithreads-max
è20
.
Parametri regolabili del file system relativi alla capacità
Questi parametri sono posizionati in
/proc/sys/fs/
nel file system proc.
aio-max-nr
- Definisce il numero massimo di eventi permessi in tutti i contesti I/O asincroni attivi. Il valore predefinito è
65536
. Da notare che la modifica di questo valore non cambia la dimensione ne preassegna le strutture dei dati del kernel. file-max
- Elenca il numero massimo di operazioni di gestione dei file assegnati dal kernel. Il valore predefinito corrisponde al valore di
files_stat.max_files
nel kernel, ed è impostato prendendo in considerazione il valore più grande tra(mempages * (PAGE_SIZE / 1024)) / 10
oNR_FILE
(8192 in Red Hat Enterprise Linux). Aumentando questo valore potreste risolvere gli errori causati da un numero insufficiente di gestioni disponibili del file.
Parametri regolabili di Out-of-Memory Kill
Out of Memory (OOM) si riferisce ad uno stato dove tutta la memoria disponibile, incluso lo spazio di swap, è stata assegnata. Per default questa impostazione causa un panic del sistema ed un conseguente arresto delle sue funzioni. Tuttavia l'impostazione di
/proc/sys/vm/panic_on_oom
su 0
indica al kernel di invocare la funzione oom_killer
in presenza di OOM. Generalmente oom_killer
è in grado di arrestare "kill" processi fittizi, e permette al sistema di continuare con le sue funzioni.
Il seguente parametro può essere assegnato in base al processo e conferisce all'utente un maggiore controllo sui processi da arrestare usando la funzione
oom_killer
. Esso è posizionato in /proc/pid/
nel file system proc, dove pid è il numero dell'ID del processo.
oom_adj
- Definisce un valore da
-16
a15
in grado di determinare l'oom_score
di un processo. Più alto è il valore dioom_score
e maggiore è la possibilità che un processo venga arrestato "killed" daoom_killer
. L'impostazione dioom_adj
su-17
disabilitaoom_killer
per quel processo.Importante
Ogni processo generato da un processo modificato erediterà l'oom_score
di quel processo. Per esempio, se un processosshd
è protetto dalla funzioneoom_killer
, tutti i processi iniziati da quella sessione SSH verranno protetti. Ciò può interessare l'abilità della funzioneoom_killer
di salvare il sistema in presenza di un OOM.