Maison Opération et maintenance exploitation et maintenance Linux Tutoriel Linux : Interroger le nombre de connexions simultanées et l'état de la connexion de Nginx

Tutoriel Linux : Interroger le nombre de connexions simultanées et l'état de la connexion de Nginx

Aug 22, 2017 pm 01:56 PM
linux nginx 连接

Vérifiez le nombre de connexions simultanées et l'état de connexion de Nginx, etc. sous Linux.

1. Vérifiez le nombre de requêtes simultanées du serveur web (Nginx Apache) et son état de connexion TCP :

netstat -n | awk '/^tcp/ {++S[$ NF]} END {for(a in S) print a, S[a]}'

ou :

netstat -n | awk '/^tcp/ {++state[$ NF]} END {for(key in state) print key,"t",state[key]}'Le résultat renvoyé est généralement le suivant :

LAST_ACK 5 (nombre de requêtes en attente de traitement)

SYN_RECV 30 <🎜> 🎜>

Autres descriptions de paramètres :

FERMÉ : Aucune connexion n'est active ou en cours

ÉCOUTER : Le serveur est en attente d'arrivée appels

SYN_RECV : Une demande de connexion a été effectuée. Arrivé, en attente de confirmation

SYN_SENT : L'application a démarré, ouverture d'une connexion

ESTABLISHED : Statut de transfert de données normal

FIN_WAIT1 : L'application indique qu'elle est terminée

FIN_WAIT2 : L'autre partie a accepté de publier

ITMED_WAIT : En attente de la mort de tous les paquets

CLOSING : Les deux les deux côtés essaient de fermer en même temps

TIME_WAIT : L'autre côté a initialisé une version

LAST_ACK : Attendez que tous les paquets meurent

Les trois états couramment utilisés sont : ESTABLISHED signifie communiquer, TIME_WAIT signifie fermeture active et CLOSE_WAIT signifie fermeture passive.

Le protocole TCP stipule que pour une connexion établie, les deux parties sur le réseau doivent effectuer une négociation à quatre pour réussir la déconnexion. Si l'une de ces étapes est manquante, la connexion sera dans un état d'animation suspendue, et les ressources occupées par la connexion elle-même ne seront pas libérées. Le programme serveur réseau doit gérer un grand nombre de connexions en même temps, il est donc nécessaire de s'assurer que les connexions inutiles sont complètement déconnectées, sinon un grand nombre de connexions mortes gaspilleront beaucoup de ressources du serveur. Parmi les nombreux états TCP, il existe deux états les plus remarquables : CLOSE_WAIT et TIME_WAIT.

TIME_WAIT

TIME_WAIT est formé lorsque le lien est activement fermé, en attendant un temps de 2MSL, environ 4 minutes. Principalement pour éviter la perte du dernier ACK. Étant donné que TIME_WAIT prendra très longtemps, le serveur devrait essayer de réduire le nombre de connexions actives fermées

CLOSE_WAIT

CLOSE_WAIT est formé en fermant passivement les connexions. Selon la machine à états TCP, lorsque le serveur reçoit le FIN envoyé par le client, il envoie un ACK selon l'implémentation TCP, il entre donc dans l'état CLOSE_WAIT. Cependant, si le serveur n'exécute pas close(), il ne pourra pas migrer de CLOSE_WAIT vers LAST_ACK et il y aura de nombreuses connexions à l'état CLOSE_WAIT dans le système. À ce moment-là, il se peut que le système soit occupé à traiter les opérations de lecture et d'écriture et n'ait pas fermé la connexion qui a reçu FIN. À ce stade, recv/read a reçu le socket de connexion FIN et renverra 0.

Pourquoi avons-nous besoin de l'état TIME_WAIT ?

En supposant que l'ACK final est perdu, le serveur renverra le FIN. Le client doit conserver les informations d'état TCP afin que l'ACK final puisse être renvoyé, ce qui entraînera la réflexion du serveur. qu'une erreur s'est produite. Les implémentations TCP doivent terminer de manière fiable les deux sens de la connexion (duplex intégral fermé) et le client doit entrer dans l'état TIME_WAIT car le client peut être confronté à la retransmission de l'ACK final.

Pourquoi l'état TIME_WAIT doit-il rester 2MSL pendant si longtemps ?

Si l'état TIME_WAIT n'est pas maintenu assez longtemps (par exemple, moins de 2MSL), la première connexion se terminera normalement. Une deuxième connexion apparaît avec le même quintuple associé, et des paquets en double de la première connexion arrivent, interférant avec la deuxième connexion. L'implémentation TCP doit empêcher les messages en double d'une certaine connexion d'apparaître après la fin de la connexion, donc gardez l'état TIME_WAIT suffisamment longtemps (2MSL), et les messages TCP dans la direction correspondante de la connexion recevront une réponse complète ou seront rejetés. Il n'y a aucune confusion lors de l'établissement d'une deuxième connexion.

Trop de sockets dans les statuts TIME_WAIT et CLOSE_WAIT

S'il y a une exception dans le serveur, 89% du temps ce sera les deux situations suivantes :

1. Le serveur conserve un grand nombre de statuts TIME_WAIT

2. Le serveur conserve un grand nombre de statuts CLOSE_WAIT En termes simples, le nombre excessif de CLOSE_WAIT est dû à une mauvaise gestion des connexions fermées passivement.

Parce que le handle de fichier alloué à un utilisateur par Linux est limité, et si les deux états de TIME_WAIT et CLOSE_WAIT sont toujours maintenus, cela signifie que le nombre de canaux correspondant sera toujours occupé, et ce sera " occupé." Aucun effort", une fois la limite supérieure du nombre de handles atteinte, les nouvelles requêtes ne peuvent pas être traitées, suivies d'un grand nombre d'exceptions Too Many Open Files et Tomcat plante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Gitee Pages STATIQUE Le déploiement du site Web a échoué: comment dépanner et résoudre les erreurs de fichier unique 404? Gitee Pages STATIQUE Le déploiement du site Web a échoué: comment dépanner et résoudre les erreurs de fichier unique 404? Apr 04, 2025 pm 11:54 PM

GiteEpages STATIQUE Le déploiement du site Web a échoué: 404 Dépannage des erreurs et résolution lors de l'utilisation de Gitee ...

Comment exécuter le projet H5 Comment exécuter le projet H5 Apr 06, 2025 pm 12:21 PM

L'exécution du projet H5 nécessite les étapes suivantes: Installation des outils nécessaires tels que le serveur Web, Node.js, les outils de développement, etc. Créez un environnement de développement, créez des dossiers de projet, initialisez les projets et écrivez du code. Démarrez le serveur de développement et exécutez la commande à l'aide de la ligne de commande. Aperçu du projet dans votre navigateur et entrez l'URL du serveur de développement. Publier des projets, optimiser le code, déployer des projets et configurer la configuration du serveur Web.

Quatre façons d'implémenter le multithreading dans le langage C Quatre façons d'implémenter le multithreading dans le langage C Apr 03, 2025 pm 03:00 PM

Le multithreading dans la langue peut considérablement améliorer l'efficacité du programme. Il existe quatre façons principales d'implémenter le multithreading dans le langage C: créer des processus indépendants: créer plusieurs processus en cours d'exécution indépendante, chaque processus a son propre espace mémoire. Pseudo-Multithreading: Créez plusieurs flux d'exécution dans un processus qui partagent le même espace mémoire et exécutent alternativement. Bibliothèque multi-thread: Utilisez des bibliothèques multi-threades telles que PTHEADS pour créer et gérer des threads, en fournissant des fonctions de fonctionnement de thread riches. Coroutine: une implémentation multi-thread légère qui divise les tâches en petites sous-tâches et les exécute tour à tour.

Comment ouvrir web.xml Comment ouvrir web.xml Apr 03, 2025 am 06:51 AM

Pour ouvrir un fichier web.xml, vous pouvez utiliser les méthodes suivantes: Utilisez un éditeur de texte (tel que le bloc-notes ou TextEdit) pour modifier les commandes à l'aide d'un environnement de développement intégré (tel qu'Eclipse ou NetBeans) (Windows: Notepad web.xml; Mac / Linux: Open -A TextEdit web.xml)

À quoi sert le mieux le Linux? À quoi sert le mieux le Linux? Apr 03, 2025 am 12:11 AM

Linux est mieux utilisé comme gestion de serveurs, systèmes intégrés et environnements de bureau. 1) Dans la gestion des serveurs, Linux est utilisé pour héberger des sites Web, des bases de données et des applications, assurant la stabilité et la fiabilité. 2) Dans les systèmes intégrés, Linux est largement utilisé dans les systèmes électroniques intelligents et automobiles en raison de sa flexibilité et de sa stabilité. 3) Dans l'environnement de bureau, Linux fournit des applications riches et des performances efficaces.

Dois-je installer un client Oracle lors de la connexion à une base de données Oracle à l'aide de Go? Dois-je installer un client Oracle lors de la connexion à une base de données Oracle à l'aide de Go? Apr 02, 2025 pm 03:48 PM

Dois-je installer un client Oracle lors de la connexion à une base de données Oracle à l'aide de Go? Lorsque vous développez GO, la connexion aux bases de données Oracle est une exigence commune ...

C compilation conditionnelle du langage: un guide détaillé pour les débutants vers des applications pratiques C compilation conditionnelle du langage: un guide détaillé pour les débutants vers des applications pratiques Apr 04, 2025 am 10:48 AM

C La compilation conditionnelle du langage est un mécanisme pour compiler sélectivement les blocs de code en fonction des conditions de temps de compilation. Les méthodes d'introduction incluent: l'utilisation des directives #IF et #ELSE pour sélectionner des blocs de code en fonction des conditions. Les expressions conditionnelles couramment utilisées incluent STDC, _WIN32 et Linux. Cas pratique: imprimez différents messages en fonction du système d'exploitation. Utilisez différents types de données en fonction du nombre de chiffres du système. Différents fichiers d'en-tête sont pris en charge selon le compilateur. La compilation conditionnelle améliore la portabilité et la flexibilité du code, ce qui le rend adaptable aux modifications du compilateur, du système d'exploitation et de l'architecture du processeur.

libv est deux libv est deux Apr 03, 2025 pm 08:03 PM

J'ai développé un projet appelé Lua-Libuv et je suis heureux de partager mon expérience. L'intention initiale du projet est d'explorer comment utiliser Libuv (une bibliothèque d'E / S asynchrone écrite en c) pour créer un serveur HTTP simple sans avoir à apprendre le langage C en profondeur. Avec l'aide de Chatgpt, j'ai terminé le code de base de HTTP.C. Lorsque je traite des connexions persistantes, j'ai réussi à mettre en œuvre la clôture de la connexion et à libérer les ressources au bon moment. Au début, j'ai essayé de créer un serveur simple qui a mis fin au programme principal en fermant la connexion, mais j'ai eu quelques problèmes. J'ai essayé d'envoyer des blocs de données à l'aide de streaming, et pendant que cela fonctionne, cela bloque le thread principal. En fin de compte, j'ai décidé d'abandonner cette approche parce que mon objectif n'était pas d'apprendre la langue C en profondeur. Enfin, je

See all articles