GNU/Linux >> Linux Esercitazione >  >> Linux

Analisi dei casi a favore e contro l'impostazione dello spazio di scambio su istanze cloud

Se vuoi iniziare una discussione con un utente Linux, chiedi informazioni su swap memoria. Alcuni lo lodano come un cuscino o come una rete di sicurezza, mentre altri lo denigrano come una stampella e un distruttore delle prestazioni del sistema. Nata negli anni '60, la memoria di scambio si è evoluta nel corso degli anni su Linux per svolgere due funzioni essenziali:

  • Memoria di emergenza quando un sistema consuma tutta la sua RAM e ne necessita ancora di più
  • Un parcheggio per pagine di memoria usate raramente che occupano preziosa RAM di sistema

Molte distribuzioni Linux, incluso Red Hat, consigliano la memoria di scambio per tutti i sistemi. Tuttavia, se guardi la maggior parte delle istanze cloud di varie distribuzioni, scopri che la memoria di scambio è assente.

[ Potrebbe piacerti anche: Risoluzione dei problemi di Linux 101:prestazioni del sistema ]

Panoramica dello scambio

Swap esiste sulla maggior parte dei sistemi come partizione su un disco. Dopo il partizionamento, gli amministratori formattano la partizione con mkswap , abilitalo con swapon e il kernel vede immediatamente la memoria di swap disponibile. I sistemi senza una partizione disponibile possono utilizzare un file di scambio, che è solo un file su un filesystem esistente formattato con mkswap e abilitato.

Entrambi i metodi funzionano bene, ma inserire uno scambio su una partizione porta a prestazioni migliori poiché si salta l'overhead di un file di scambio su una partizione esistente.

Quando la RAM di sistema è scarsa, Linux può archiviare le pagine di memoria nello scambio per evitare di interrompere i processi e di mandare in crash il sistema. I dischi sono molto più lenti della RAM di sistema e questo riduce le prestazioni del sistema fino a quando la RAM di sistema non si libera. Se l'utilizzo della memoria continua a salire fino al punto in cui la RAM di sistema e lo swap sono completamente esauriti, viene visualizzato il killer di memoria insufficiente (OOM) che inizia a terminare i processi finché non diventa disponibile RAM sufficiente.

Il consiglio di vecchia data sulla dimensione dello scambio è il doppio della dimensione della RAM del tuo sistema. Ad esempio, alloca 2 GB di swap per sistemi con 1 GB di RAM di sistema. Sebbene questo rapporto funzioni bene per i sistemi più piccoli, non aumenta per i sistemi con centinaia di gigabyte di RAM di sistema.

Il caso dello scambio su cloud

L'ascesa dei microservizi (piccoli servizi interconnessi che formano una grande applicazione) ha portato le aziende a distribuire un numero maggiore di istanze più piccole. Le istanze più piccole hanno meno RAM di sistema, il che aumenta il rischio che il temuto killer OOM si presenti per interrompere i processi finché il sistema non ha abbastanza memoria libera.

L'aggiunta di swap a questi sistemi aiuta in due modi:

  • In primo luogo, i processi possono esplodere brevemente dalla RAM di sistema in uno scambio durante i periodi di carico elevato. Gli amministratori vengono a conoscenza di questi eventi dai loro sistemi di monitoraggio e hanno il tempo di indagare sul motivo dell'esplosione mentre si verifica nel sistema. In caso di perdite di memoria, gli sviluppatori possono ispezionare il processo per capire cosa è andato storto mentre è ancora vivo. Questo può anche essere un segnale che gli amministratori necessitano di tipi di istanza più grandi per la loro applicazione man mano che cresce.
  • In secondo luogo, il kernel Linux controlla le pagine di memoria usate raramente e le invia per scambiare per preservare la preziosa RAM di sistema. Il sysctl impostando vm.swappiness controlla il desiderio del kernel di spingere le pagine di memoria per lo scambio. Ciò potrebbe aiutare un'istanza cloud mantenendo le pagine più attive nella RAM di sistema mentre espelle le pagine utilizzate raramente per scambiare la memoria.

Il caso contro lo swap su cloud

L'analogia "animali domestici vs bestiame" si presenta frequentemente quando si parla di istanze cloud e gli amministratori vietano lo scambio poiché possono sostituire automaticamente un'istanza che si comporta in modo anomalo con una nuova. Nel tempo, le loro metriche di monitoraggio mostrano un aumento delle istanze che necessitano di sostituzione a causa del killer OOM che porta offline la loro applicazione. La soluzione potrebbe essere istanze più grandi o ulteriori indagini sulle perdite di memoria sotto carico. Systemd riavvierà anche questi processi rapidamente quando possibile.

La scelta di una posizione di memoria di scambio sulle istanze cloud richiede più riflessione e pianificazione. Sui server fisici, lo scambio su un disco NVMe (Non-Volatile Memory Express) collegato localmente è abbastanza veloce, ma che dire di un'istanza cloud con storage esterno montato, come l'Elastic Block Storage (EBS) di AWS? Le prestazioni su EBS variano a seconda del tipo di EBS scelto e dei tuoi vicini sul sistema. Lo scambio su un sistema di archiviazione remoto potrebbe portare a scarse prestazioni dell'istanza quando il sistema sovraccarica la propria RAM. Gli amministratori possono scegliere di omettere lo scambio e sostituire queste istanze quando sovraccaricano la loro RAM invece di lottare con richieste di gestione del server con prestazioni scadenti.

Infine, molte istanze cloud diventano parte dei cluster Kubernetes e OpenShift e devono affrontare una sfida quando si tratta di memoria di scambio. C'è un problema di GitHub di lunga data sulla gestione della memoria di scambio in modo appropriato poiché elimina la contabilità della memoria per i contenitori. Esistono soluzioni alternative, ma la memoria di scambio generalmente viene ignorata su questi sistemi.

Distribuzione di istanze cloud con swap

Se dovessi decidere che il provisioning della memoria di swap avvantaggia le tue applicazioni, cloud-init ti dà la possibilità di effettuare il provisioning della memoria di swap al primo avvio utilizzando i mounts modulo. Basta aggiungere alcune righe ai dati utente di configurazione cloud esistenti:

swap:
    filename: /swapfile
    size: auto
    maxsize: 4294967296

Questa configurazione indica a cloud-init di creare un file di scambio in /swapfile con una dimensione automatica uguale o inferiore a 4GB. La formula per il dimensionamento automatico dello scambio è nel codice sorgente di cloud-init:

formulas = [
    # < 1G: swap = double memory
    (1 * GB, lambda x: x * 2),
    # < 2G: swap = 2G
    (2 * GB, lambda x: 2 * GB),
    # < 4G: swap = memory
    (4 * GB, lambda x: x),
    # < 16G: 4G
    (16 * GB, lambda x: 4 * GB),
    # < 64G: 1/2 M up to max
    (64 * GB, lambda x: x / 2),
]

Le dimensioni di scambio consigliate da Red Hat differiscono leggermente:

  • 2 GB o meno di RAM di sistema :2x RAM
  • Da 2 GB a 8 GB : 1x RAM
  • Da 8 GB a 64 GB : 4 GB minimo
  • Più di 64 GB : 4 GB minimo

Puoi specificare manualmente la memoria di scambio (in byte) con la size: parametro
nel cloud-config:

swap:
    filename: /swapfile
    size: 2147483648  # 2 GiB

Provisioning swap su un'istanza cloud esistente

Per le istanze esistenti, un file di scambio è spesso il metodo più semplice per abilitare la memoria di scambio. In questo esempio, inserisci un file di scambio da 2 GB in /swapfile :


# BTRFS only #################################################################
# We must disable copy-on-write updates for swap files on btrfs file systems.
# The 'swapon' step fails if you skip these steps.
truncate -s 0 /swapfile
chattr +C /swapfile
# BTRFS only #################################################################

# A 2 GiB swap file.
dd if=/dev/zero of=/swapfile bs=1MiB count=2048

# Set the correct permissions on the swap file.
chmod 0600 /swapfile

# Format the swapfile.
mkswap /swapfile

# Enable the swapfile.
swapon /swapfile

# Add it to /etc/fstab to enable it after reboot.
echo "/swapfile none swap defaults 0 0" >> /etc/fstab

Controlla se la tua memoria di scambio è pronta:

$ cat /proc/swaps
Filename        Type    Size      Used    Priority
/swapfile       file    2097148   0       -2

[ Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ] 

Concludi

La memoria di scambio offre due preziosi vantaggi:

  • Un cuscino di sicurezza quando l'utilizzo della RAM di sistema aumenta a livelli pericolosi
  • Un parcheggio per le pagine di memoria usate raramente che occupano spazio prezioso nella RAM di sistema 

Quel cuscinetto di sicurezza comporta una riduzione delle prestazioni poiché il paging della memoria sui dischi è incredibilmente lento rispetto alla memoria di sistema.

Le distribuzioni cloud vedono raramente la memoria di scambio distribuita, ma lo scambio ha comunque dei vantaggi. La scelta di distribuire lo scambio consente una protezione di sicurezza quando le applicazioni si comportano in modo anomalo, ma potrebbe causare un rallentamento delle prestazioni di un'applicazione fino a quando i problemi di consumo di memoria non vengono risolti. Saltare lo scambio rimuove il cuscino ma assicura che un'applicazione che si comporta in modo anomalo si interrompa immediatamente. Gli amministratori cloud devono disporre di un piano in atto per gestire queste situazioni.

Fortunatamente, cloud-init appare nella stragrande maggioranza delle istanze cloud e consente la creazione di file di scambio con solo poche righe di YAML. La memoria di scambio è anche facile da configurare dopo la distribuzione utilizzando semplici comandi o script della shell.

Sia che tu scelga di distribuire la memoria di scambio o di farne a meno, assicurati di avere un piano quando succede il peggio. Monitora i sistemi in modo appropriato e mantieni una visione olistica dell'applicazione che servono.


Linux
  1. Qual è la giusta quantità di spazio di scambio per un moderno sistema Linux?

  2. Linux:cosa sono la memoria alta e la memoria insufficiente su Linux?

  3. CloudBerry:backup cloud multipiattaforma perfetto per privati ​​e professionisti IT

  4. Risoluzione dei problemi di spazio su disco insufficiente per un server cloud Linux

  5. Risoluzione dei problemi di spazio su disco insufficiente per un server cloud Windows

Kubernetes per la portabilità multi-cloud e cloud ibrido

Come utilizzare Wireshark per acquisire e analizzare i pacchetti di rete

7 comandi per controllare l'utilizzo della memoria e scambiare spazio in Debian 10

Come cancellare la cache di memoria RAM e il buffer e lo spazio di scambio su Linux

UNIX / Linux:2 modi per aggiungere spazio di scambio usando dd, mkswap e swapon

Quanto spazio di scambio aggiungere per Oracle Database su Linux