GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa limita il numero massimo di connessioni su un server Linux?

Soluzione 1:

Finalmente ho trovato l'impostazione che limitava davvero il numero di connessioni:net.ipv4.netfilter.ip_conntrack_max . Questo è stato impostato su 11.776 e qualunque cosa io abbia impostato è il numero di richieste che posso servire nel mio test prima di dover attendere tcp_fin_timeout secondi per rendere disponibili più connessioni. Il conntrack table è ciò che il kernel utilizza per tenere traccia dello stato delle connessioni, quindi una volta che è pieno, il kernel inizia a eliminare i pacchetti e a stamparlo nel registro:

Jun  2 20:39:14 XXXX-XXX kernel: ip_conntrack: table full, dropping packet.

Il passo successivo è stato far sì che il kernel riciclasse tutte quelle connessioni nel TIME_WAIT stato piuttosto che eliminare i pacchetti. Potrei farlo accadere attivando tcp_tw_recycle o aumentando ip_conntrack_max essere maggiore del numero di porte locali rese disponibili per le connessioni da ip_local_port_range . Immagino che una volta che il kernel è uscito dalle porte locali, inizi a riciclare le connessioni. Questo utilizza più connessioni di tracciamento della memoria, ma sembra la soluzione migliore rispetto all'attivazione di tcp_tw_recycle poiché i documenti implicano che ciò è pericoloso.

Con questa configurazione posso lavorare tutto il giorno senza mai rimanere senza connessioni:

net.ipv4.netfilter.ip_conntrack_max = 32768
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768    61000

L'tcp_max_orphans impostazione non ha avuto alcun effetto sui miei test e non so perché. Penso che chiuderebbe le connessioni in TIME_WAIT afferma che una volta ce n'erano 8192, ma non lo fa per me.

Soluzione 2:

Vuoi davvero vedere cosa ha da offrirti il ​​filesystem /proc a questo proposito.

  • TCP Tuning Guide presso il Dipartimento dell'Energia degli Stati Uniti
  • Parametri di ottimizzazione TCP per diversi OS:es
  • "Amministra Linux al volo" di IBM
  • Documentazione su LinuxInsight.com vis-a-vis /proc/sys/net/ipv4

In quest'ultima pagina, potresti trovare interessante quanto segue:

  • /proc/sys/net/ipv4/tcp_max_orphans, che controlla il numero massimo di socket detenuti dal sistema non attaccato a qualcosa. L'aumento di questo può consumare fino a 64 kbyte di memoria non scambiabile per socket orfano .
  • /proc/sys/net/ipv4/tcp_orphan_retries, che controlla la quantità di tentativi prima che un socket venga reso orfano e chiuso. In quella pagina c'è una nota specifica sui server web che ti interessa direttamente...

Soluzione 3:

Non credo che ci sia un sintonizzabile per impostarlo direttamente. Questo rientra nella categoria dell'ottimizzazione TCP/IP. Per scoprire cosa puoi regolare, prova 'man 7 tcp'. Il sysctl ( 'man 8 sysctl' ) viene utilizzato per impostarli. 'sysctl -a | grep tcp' ti mostrerà la maggior parte di ciò che puoi sintonizzare, ma non sono sicuro che li mostrerà tutti. Inoltre, a meno che questo non sia cambiato, i socket TCP/IP aperti sembrano descrittori di file. Quindi questa e la prossima sezione in quel link potrebbero essere ciò che stai cercando.

Soluzione 4:

Prova a impostare anche quanto segue impostando tcp_fin_timeout. Questo dovrebbe chiudere TIME_WAIT più rapidamente.

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

Soluzione 5:

Lo stock apache (1) veniva predefinito per supportare solo 250 connessioni simultanee:se ne volevi di più, c'era un file di intestazione da modificare per consentire più sessioni simultanee. Non so se questo è ancora vero con Apache 2.

Inoltre, è necessario aggiungere un'opzione per consentire un sacco di descrittori di file più aperti per l'account che esegue Apache, cosa che i commenti precedenti non hanno sottolineato.

Presta attenzione alle tue impostazioni di lavoro e al tipo di timeout keepalive che hai all'interno di Apache stesso, quanti server di riserva hai in esecuzione contemporaneamente e quanto velocemente questi processi extra vengono interrotti.


Linux
  1. Migrazione da Unix a Linux

  2. Qual è l'attuale runlevel del sistema Linux?

  3. Cosa rende fondamentale un server Linux del kernel?

  4. Qual è lo scopo del file .bashrc in Linux

  5. Qual è la dimensione massima del valore di una variabile di ambiente Linux?

Cos'è il comando Linux Watch + Esempi

Che cos'è la shell in Linux?

Qual è il comando kill in Linux?

Qual è il miglior VPS:Windows o Linux?

Come determinare cosa sta utilizzando più spazio su disco su un server Linux?

Qual è il numero massimo di porte?