Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Quali sono le implicazioni dell'impostazione del multi_accept su o fuori


Quali sono le implicazioni dell'impostazione del multi_accept su o fuori


La direttiva `Multi_ACCEPT` in NGINX controlla il modo in cui i processi dei lavoratori accettano nuove connessioni in arrivo. Le sue impostazioni, "ON" o "OFF", hanno implicazioni di prestazioni diverse per la gestione delle connessioni del client a livello di server. Di seguito è riportata una spiegazione dettagliata delle implicazioni dell'impostazione di "Multi_ACCEPT` per" ON "o" OFF ", che copre il suo comportamento, gli effetti delle prestazioni e le considerazioni pratiche.

Definizione e comportamento predefinito

La direttiva `Multi_ACCEPT` è configurata nel contesto` Events` del file di configurazione Nginx. Determina se un processo di lavoratore accetta una nuova connessione alla volta (`multi_accept off`) o accetta tutte le nuove connessioni disponibili nella coda di ascolto contemporaneamente (` multi_accept on`). L'impostazione predefinita di questa direttiva è `Off`.

Quando `Multi_ACCEPT` è impostato su` Off`, un processo di lavoratore accetterà nuove connessioni uno per uno quando vengono. Quando è impostato su `On`, un lavoratore accetterà tutte le nuove connessioni disponibili contemporaneamente quando verrà avvisato su nuovi eventi di connessione. Questa notifica si verifica in base al meccanismo di elaborazione degli eventi sottostante utilizzato da NGINX, che varia in base al sistema operativo ma generalmente coinvolge sistemi di notifica di evento epillali, Kqueue o simili.

implicazioni di multi_accept impostato su

- Accettazione a connessione singola: il lavoratore accetta solo un collegamento per evento di notifica. Questo approccio semplifica l'elaborazione perché ogni connessione accettata può essere elaborata in ordine senza ulteriori picchi di carico.
- Distribuzione del carico della CPU: poiché i lavoratori accettano connessioni uno alla volta, il carico della CPU tende a diffondersi in modo più uniforme perché i lavoratori non sono sopraffatti da più accettazioni di connessione contemporaneamente.
- Riduzione del rischio di branco di tuono: questa impostazione tende a evitare il problema del "tuono", in cui più lavoratori si svegliano contemporaneamente, ma solo uno gestisce la connessione, causando la perdita di cicli di CPU sul cambio di contesto.
- Controllo della latenza: accettare una connessione alla volta può aumentare leggermente la latenza sotto carico pesante poiché la coda di ascolto viene drenata più lentamente.
- potenziale limitazione del throughput: a velocità di connessione molto elevate, accettare connessioni una ad una può portare a una velocità inferiore perché il lavoratore potrebbe non elaborare connessioni in arrivo così rapidamente quando arrivano.
- Efficienza delle risorse: questa impostazione tende a utilizzare le risorse di sistema in modo più conservativo, il che è benefico per i server che non sperimentano carichi di connessione simultanei elevati.

implicazioni di multi_accept impostato su

- Accettazione della connessione batch: il lavoratore accetta tutte le connessioni in arrivo in attesa nella coda di ascolto immediatamente dopo la notifica. Ciò può aumentare drasticamente il numero di connessioni che i processi del lavoratore per ciclo.
- Throughput più elevato: questa impostazione può migliorare la throughput in condizioni di carico pesante in cui molte connessioni arrivano in brevi raffiche, consentendo al lavoratore di gestire rapidamente più connessioni.
- Rischio di sovraccarico di lavoratori: accettare tutte le connessioni in coda contemporaneamente può far sovraccaricare un lavoratore se le connessioni in arrivo superano la capacità di elaborazione del lavoratore, portando potenzialmente al degrado delle prestazioni.
- Aumento dei rischi della CPU e picchi di carico: i lavoratori possono sperimentare picchi nell'uso della CPU perché tutte le connessioni sono accettate contemporaneamente, il che può portare a modelli di consumo della CPU Bursty.
- potenziale per connessioni o ritardi eliminati: se il numero di connessioni accettate supera le connessioni simultanee massime che il lavoratore può gestire in modo efficiente (in base a "working_connections" o limiti di sistema), alcune connessioni possono essere ritardate o abbandonate.
- utile in ambienti di carico elevato coerenti: quando un server gestisce costantemente un volume elevato di connessioni simultanee, questa impostazione aiuta a ridurre la sovraccarico di accettare le connessioni individualmente e migliorare la velocità di risposta.

interazione con altre impostazioni

- Accept_mutex: questa direttiva, spesso abilitata per impostazione predefinita, controlla il modo in cui i processi dei lavoratori a turno accettano connessioni per evitare il problema del "tuono". Con `accet_mutex`, i lavoratori accettano connessioni uno alla volta a sua volta, che completa un'impostazione` multi_accept off `per una gestione più ordinata delle connessioni.
- Quando `accet_mutex` è disattivato, tutti i lavoratori si svegliano su nuove connessioni ma solo uno li gestiscono, causando potenzialmente un uso inefficiente della CPU, specialmente se` multi_accept` è anche disattivato.
- Worker_connections e worker_processes: questi determinano quante connessioni simultanee ogni lavoratore e il server in generale possono gestire, influenzando l'impatto di `multi_accept '. Se `Multi_ACCECT` è acceso e l'afflusso di connessione supera le capacità combinate, potrebbe sovraccaricare i lavoratori.
- Meccanismo di polling degli eventi: la direttiva multi_accept viene ignorata se kqueue viene utilizzata su alcuni sistemi perché Kqueue segnala il numero esatto di nuove connessioni, consentendo un migliore controllo senza batch.

Considerazioni sulle prestazioni

- Abilitare `multi_accept` (` on`) è utile laddove il server sperimenta un flusso costante di numerose connessioni in arrivo, in quanto consente a un lavoratore di accettare ed elaborare rapidamente molte connessioni.
- Disabilitarlo (`Off`) è migliore per gli ambienti con minore confusione di connessioni, dove impedisce ai lavoratori di essere sopraffatti e riduce i cicli della CPU sprecati.
- L'uso di `Multi_ACCEPT` con alti tassi di connessione senza una messa a punto adeguata delle risorse` worker_connections 'e CPU può portare a esaurimento delle risorse e maggiore latenza.
- I carichi di lavoro che prevedono il blocco delle operazioni per ciascuna connessione, come le strette di mano SSL, possono beneficiare di più lavoratori combinati con impostazioni `multi_accept` appropriate per evitare colli di bottiglia.

casi e raccomandazioni d'uso

- API o server Web ad alto traffico: attivare `Multi_ACCEPT` consente un migliore utilizzo delle risorse del server accettando tutte le connessioni in sospeso man mano che si verificano episodi di attività, riducendo la latenza in scenari ad alta concorrenza.
- ambienti di traffico o sviluppo da basso a moderato: mantenere `Multi_ACCECT` aiuta a mantenere un utilizzo della CPU stabile e una gestione del carico più semplice.
- Sortigliamento per prestazioni ottimali: è importante considerare il contesto dell'applicazione, il conteggio dei lavoratori, i limiti di sistema e il volume di connessione previsto. La combinazione di `multi_accept su" con configurazioni ottimizzate per i processi dei lavoratori e la gestione delle connessioni porta a una velocità di trasmissione migliorata.
- Approcci ibridi: alcuni amministratori potrebbero sperimentare diverse combinazioni di `multi_accept` e` accet_mutex` per ottenere l'equilibrio desiderato tra l'efficienza della CPU e la velocità di gestione della connessione.

Riepilogo

In sintesi, l'impostazione di `multi_accept` in" on "consente a un lavoratore di accettare tutte le connessioni in sospeso contemporaneamente, migliorando la velocità di trasmissione in scenari ad alto carico ma rischiando il sovraccarico dei lavoratori e pickes della CPU. Lasciarlo "spento" limita i lavoratori ad accettare una connessione alla volta, portando a un uso più stabile delle risorse e latenza potenzialmente più elevata sotto carichi di connessione pesanti. La scelta dipende dai modelli di traffico, dalle caratteristiche del carico di lavoro e dalla messa a punto del sistema per massimizzare l'efficienza e la reattività del server.
Questa spiegazione copre il comportamento tecnico di `Multi_ACCEPT`, il suo impatto sulle prestazioni, l'interazione con altre impostazioni dei lavoratori Nginx e gli scenari pratici di utilizzo. La direttiva è una parte fondamentale delle prestazioni del server Nginx di messa a punto per ambienti e condizioni di traffico diverse.