Maison >développement back-end >Golang >Pourquoi le serveur HTTP My Go échoue-t-il aux tests ApacheBench avec des erreurs « Connexion refusée » ou « Opération expirée » ?

Pourquoi le serveur HTTP My Go échoue-t-il aux tests ApacheBench avec des erreurs « Connexion refusée » ou « Opération expirée » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-23 03:32:14186parcourir

Why is My Go HTTP Server Failing ApacheBench Tests with

Dépannage des problèmes de connectivité avec le serveur HTTP Go sous ApacheBench

Votre serveur HTTP Go rencontre des problèmes de connectivité lors des tests ApacheBench. ApacheBench renvoie des erreurs telles que « Connexion refusée » ou « Opération expirée », indiquant un problème avec la capacité du serveur à traiter les demandes entrantes.

Identification de la cause première : épuisement du port

Après enquête, il devient évident que le serveur manque de ports éphémères. macOS a une plage de ports éphémères par défaut de 49152 à 65535, ce qui est insuffisant pour gérer un volume élevé de requêtes simultanées sans keepalive.

Mécanisme d'épuisement des ports

Chaque HTTP La requête /1.0 sans keepalive consomme un port éphémère unique sur le serveur. Lorsque cette plage de ports est épuisée, le système d'exploitation met en file d'attente les requêtes pour les ports inutilisés.

Impact sur les performances

Une fois la file d'attente des ports remplie, le système d'exploitation limite davantage les ports entrants. relations. Par conséquent, les clients peuvent rencontrer des échecs de connexion ou des délais d'attente.

Atténuer le problème

Pour atténuer le problème, envisagez les options suivantes :

  • Utilisez HTTP/1.1 ou Keepalive (avec ApacheBench) : ApacheBench fournit une option -k pour activer HTTP/1.1 keepalive. Cela permet de réutiliser les connexions en fonction des paramètres de concurrence de l'outil, réduisant ainsi la consommation de ports.
  • Employer un générateur de charge avec Keepalive : d'autres générateurs de charge, tels que wrk, prennent en charge HTTP/1.1. et des capacités Keepalive prêtes à l'emploi. L'utilisation de ces outils élimine le besoin d'une configuration manuelle de keepalive.
  • Optimiser les performances du serveur (facultatif) : même si le code de votre serveur effectue un travail minimal, son optimisation peut améliorer les performances globales et réduire la charge sur le serveur. générateur de charge et système d'exploitation. Pensez à intégrer un travail significatif dans le code du serveur.

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:
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