Veuillez garder à l'esprit que le réglage du noyau est complexe et nécessite beaucoup d'évaluation jusqu'à ce que vous obteniez les résultats corrects. Si quelqu'un remarque une erreur, faites-le moi savoir afin que je puisse ajuster ma propre configuration :-)
De plus, votre mémoire est assez élevée pour le nombre de requêtes si ce serveur fonctionne uniquement avec Nginx, vous pouvez vérifier combien vous utilisez pendant les heures de pointe et ajustez en conséquence.
Une chose importante à vérifier est le nombre de descripteurs de fichiers, dans votre situation, je le mettrais à 65.000 pour faire face aux 20.000+ demandes par seconde. La raison en est que dans une situation normale, vous ne devriez avoir que 4.000 descripteurs de fichiers, car vous avez 4.000 connexions ouvertes simultanées (20.000 * 2 * 0.1). Toutefois, en cas de problème avec un back-end, il peut prendre jusqu'à 1 seconde ou plus pour charger une publicité. Dans ce cas, le nombre de connexions ouvertes simultanious serait plus élevé:
20.000 * 2 * 1.5 = 60.000.
donc la mise à 65K serait à mon avis une valeur sauver.
Vous pouvez vérifier la quantité de descripteurs de fichiers via:
cat /proc/sys/fs/file-max
Si cela est en dessous du 65000, vous aurez besoin de mettre cela dans le /etc/sysctl.conf:
fs.file-max = 65000
aussi pour Nginx vous devrez ajouter ce qui suit dans le fichier: /etc/systemd/system/nginx.service.d/override.conf
[Service]
LimitNOFILE=65000
Dans le fichier nginx.conf:
worker_rlimit_nofile 65000;
Si l'on ajoute que vous aurez besoin pour appliquer les modifications:
sudo systemctl -p
sudo systemctl daemon-reload
sudo systemctl restart nginx
Après ces paramètres les paramètres suivants vous initieront:
vm.swappiness = 0 # The kernel will swap only to avoid an out of memory condition
vm.min_free_kbytes = 327680 # The kernel will start swapping when memory is below this limit (300MB)
vm.vfs_cache_pressure = 125 # reclaim memory which is used for caching of VFS caches quickly
vm.dirty_ratio = 15 # Write pages to disk when 15% of memory is dirty
vm.dirty_background_ratio = 10 # System can start writing pages to disk when 15% of memory is dirty
De plus, j'utilise les paramètres de sécurité suivants dans ma configuration sysctl en conjonction avec les réglages ci-dessus. Ne hésitez pas à les utiliser, for credits
# Avoid a smurf attack
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Turn on protection for bad icmp error messages
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Turn on syncookies for SYN flood attack protection
net.ipv4.tcp_syncookies = 1
# Turn on and log spoofed, source routed, and redirect packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# No source routed packets here
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Turn on reverse path filtering
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Make sure no one can alter the routing tables
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# Don't act as a router
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Turn on execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1
Comme vous le mandatement demande, j'ajouter la ligne suivante à votre fichier sysctl.conf pour vous assurer que vous n'êtes pas en cours d'exécution sur les ports, il est facultatif, mais si vous êtes en cours d'exécution en questions, il est quelque chose à garder à l'esprit:
net.ipv4.ip_local_port_range=1024 65000
Comme je l'ai normalement les évalue les paramètres par défaut et ajuster en conséquence, je ne l'ai pas fournir l'IPv4 et ipv4.options tcp_ Vous pouvez trouver un exemple ci-dessous, mais s'il vous plaît ne pas copier et coller, vous devrez lire avant de commencer à régler ces variables.
# Increase TCP max buffer size setable using setsockopt()
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# Increase Linux auto tuning TCP buffer limits
# min, default, and max number of bytes to use
# set max to at least 4MB, or higher if you use very high BDP paths
# Tcp Windows etc
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
Les paramètres ci-dessus n'est pas tout ce que vous devriez considérer, il y a beaucoup plus de paramètres que vous pouvez régler, pour example:
- Définissez la quantité de processus de travail à 4 (un par noyau CPU) .
- Réglez la file d'attente de backlog.
- Si vous n'avez pas besoin d'un journal d'accès, je l'éteindrais simplement pour retirer les E/S du disque.
- Facultatif: réduisez ou désactivez la compression gzip si votre utilisation du processeur atteint un niveau élevé.