J'ai créé une simple application Spring boot avec un HelloController.
Get API: http://localhost:8080/hello
Response: Hello World
Maintenant, j'ai créé un script JMeter ayant 0,1 million d'utilisateurs simultanés frappant l'API get ci-dessus. Lorsque j'exécute le script JMeter, après 30k, je commence à obtenir l'erreur:
Java.net.NoRouteToHostException: Cannot assign requested address (Address not available)
Quelle est la raison pour ça? Comment puis-je résoudre ce problème?
Vous pouvez suivre réponse Lakshmi Narayan pour augmenter les ports disponibles:
Résolution:
- Augmentation de la plage de ports locaux à l'aide de la commande ci-dessous:
echo 1024 65000>/proc/sys/net/ipv4/ip_local_port_range
Cela permet à davantage de ports locaux d'être disponibles.
- Activez le recyclage rapide des sockets TIME_WAIT comme ci-dessous:
$ Sudo sysctl -w net.ipv4.tcp_tw_recycle = 1
Par défaut,
cat/proc/sys/net/ipv4/tcp_tw_recycle
Sortie: 0 (désactivé par défaut)
Soyez prudent si activé dans les environnements de production, car il s'agit de notre environnement interne et de la machine utilisée uniquement pour les tests de charge Jmeter, nous avons activé le recyclage et résolu le problème.
- Activez la réutilisation des sockets comme ci-dessous:
$ Sudo sysctl -w net.ipv4.tcp_tw_reuse = 1
Par défaut,
cat/proc/sys/net/ipv4/tcp_tw_reuse
Sortie: 0 (désactivé par défaut)
Remarque: Le paramètre tcp_tw_reuse est particulièrement utile dans les environnements où de nombreuses connexions courtes sont ouvertes et laissées dans l'état TIME_WAIT, telles que les serveurs Web. La réutilisation des sockets peut être très efficace pour réduire la charge du serveur.
Après avoir activé le recyclage et la réutilisation rapides, le serveur peut prendre en charge 5K user Load avec une seule boîte Unix.