Ottimizzazione del Kernel Linux
Per consentire al sistema di supportare una maggiore concorrenza, oltre a dover installare l'estensione event, l'ottimizzazione del kernel Linux è anche di fondamentale importanza. Ogni singola ottimizzazione è estremamente importante, quindi assicurati di completarle una per una.
Spiegazione dei parametri:
max-file: indica il numero di handle di file che possono essere aperti a livello di sistema. Si riferisce all'intero OS, non all'utente.
ulimit -n: indica il numero di handle di file che possono essere aperti a livello di processo. Controlla il numero di handle di file disponibili per l'utente corrente e i processi avviati da questo nella corrente
shell.
Controlla il numero di handle di file che possono essere aperti a livello di sistema: cat /proc/sys/fs/file-max
Apri il file /etc/sysctl.conf e aggiungi le seguenti impostazioni
# Questo parametro imposta il numero di TIME_WAIT del sistema, se supera il valore predefinito, verrà eliminato immediatamente
net.ipv4.tcp_max_tw_buckets = 20000
# Definisce la lunghezza massima della coda di ascolto per ogni porta nel sistema, è un parametro globale
net.core.somaxconn = 65535
# Numero massimo di richieste di connessione non confermate che possono essere mantenute nella coda
net.ipv4.tcp_max_syn_backlog = 262144
# Massimo numero di pacchetti che possono essere inviati alla coda quando il tasso di ricezione su ogni interfaccia di rete supera il tasso di elaborazione da parte del kernel
net.core.netdev_max_backlog = 30000
# Questa opzione può causare timeout per i client in rete NAT, si consiglia di impostarla su 0. A partire dal kernel Linux 4.12, la configurazione tcp_tw_recycle è stata rimossa; se appare l'errore "No such file or directory", ignoralo
net.ipv4.tcp_tw_recycle = 0
# Numero totale di file che tutti i processi di sistema possono aprire
fs.file-max = 6815744
# Dimensione della tabella di tracciamento del firewall. Nota: se il firewall non è attivato, verrà visualizzato l'errore: "net.netfilter.nf_conntrack_max" is an unknown key, ignoralo
net.netfilter.nf_conntrack_max = 2621440
net.ipv4.ip_local_port_range = 10240 65000
Esegui sysctl -p per applicare immediatamente le modifiche.
Nota:
Ci sono molte opzioni che possono essere impostate in /etc/sysctl.conf; le altre opzioni possono essere modificate in base alle esigenze del proprio ambiente.
Numero di file aperti
Imposta il numero di file aperti dal sistema per risolvere il problema di too many open files in caso di alta concorrenza. Questa opzione influisce direttamente sul numero di connessioni client che un singolo processo può gestire.
Il Soft open files è un parametro di sistema Linux che influisce sul numero massimo di handle di file che un singolo processo può aprire. Questo valore influisce sul numero di connessioni utenti che un singolo processo può mantenere in applicazioni a lunga connessione, come le chat. Esegui ulimit -n per vedere il valore di questo parametro; se è 1024, significa che un singolo processo può mantenere al massimo 1024 connessioni (o meno, poiché altri handle di file possono essere aperti). Se apri 4 processi per gestire le connessioni utenti, allora il numero totale di connessioni mantenibili dall'intera applicazione non supererà i 4*1024, il che significa che al massimo possono essere supportati 4x1024 utenti online. Puoi aumentare questa impostazione in modo che il servizio possa mantenere più connessioni TCP.
Tre metodi per modificare il Soft open files:
Primo metodo: esegui direttamente ulimit -HSn 102400 nel terminale e poi riavvia workerman.
Questo è valido solo per il terminale corrente; una volta usciti, il numero di file aperti tornerà al valore predefinito.
Secondo metodo: aggiungi una riga ulimit -HSn 102400 alla fine del file /etc/profile, così verrà eseguito automaticamente ogni volta che accedi al terminale. Dopo la modifica, è necessario riavviare workerman.
Terzo metodo: per rendere la modifica del numero di file aperti permanente, devi modificare il file di configurazione: /etc/security/limits.conf. Aggiungi le seguenti righe a questo file:
* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000
Questo metodo richiede il riavvio del server per avere effetto.