Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 in overcommit_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 su 2. 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 di threads-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 o NR_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 a 15 in grado di determinare l'oom_score di un processo. Più alto è il valore di oom_score e maggiore è la possibilità che un processo venga arrestato "killed" da oom_killer. L'impostazione di oom_adj su -17 disabilita oom_killer per quel processo.

Importante

Ogni processo generato da un processo modificato erediterà l'oom_score di quel processo. Per esempio, se un processo sshd è protetto dalla funzione oom_killer, tutti i processi iniziati da quella sessione SSH verranno protetti. Ciò può interessare l'abilità della funzione oom_killer di salvare il sistema in presenza di un OOM.