On Tue, Sep 27, 2016 at 05:16:12PM +0200, Alexandre wrote:
> Bonjour à tous,
> 
> je me permets de vous soumettre un petit problème que j'ai avec mes 2
> varnish. (pour info j'ai déjà posé cette question sur la mailing list
> de Varnish) 
> 
> J'ai une architecture très conventionnelle, voici l'ordre des éléments
> depuis un internaute.
> 
>   - akamai 
>   - load balancer niveau 4 (LVS)
>   - varnish (en direct routing)
>   - backend
> 
> Il y a plusieurs "applications" web tournant sur des ports différents,
> mais une d'entre elles pose problème. J'ai des connexions en
> "CLOSE_WAIT" qui s'accumulent. 
> 
> J'ai passé quelques paramètres dans sans mon sysctl.conf pour essayer
> d'atténuer ce problème
> 
> ---
> net.ipv4.tcp_keepalive_time = 60
> net.ipv4.tcp_keepalive_intvl = 30
> net.ipv4.tcp_keepalive_probes = 20
> net.ipv4.tcp_tw_recycle = 1
> net.ipv4.tcp_tw_reuse = 1
> ---
> 
> En passant ces paramètres, j'ai des optimisations pour mes
> "webservices" (voir WEBSERVICE.png) et aucune optimisation pour le
> statique (voir IMAGE.png).
> 
> Qand je fais un netstat, le "close_wait" vient exclusivement d'akamai.
> Mais mais autres sites sont aussi sur akamai dans le PM.
> 
> Si je redémarre Varnish, les connexions se ferment, ca serait varnish
> qui ne ferme pas ses connexions, mais en mm temps Varnish ferme
> correctement les connections pour les autres sites.
> 
> Je bloque sur ce problème, auriez-vous une piste ? 

Une connexion TCP n'est pas forcément full-duplex.  En particulier, en
HTTP (sans keepalive je pense), le client peut ouvrir une connexion,
envoyer sa requête et faire un shutdown(2) dessus pour signifier qu'il
n'enverra plus de données via celle-ci.  La connexion est alors
half-duplex et peut toujours être utilisée pour recevoir la réponse à la
requête, jusqu'à ce que le serveur ferme lui aussi la socket à son tour.
Voir le cas 2 de la section 3.5 de la RFC :
https://tools.ietf.org/html/rfc793#section-3.5

Si c'est bien la raison pour laquelle tu es en CLOSE_WAIT, le fait
qu'elle s'accumule indique tu tu reçois trop de traffic pour ta latence
de réponse.

Imaginons que tu reçoives 1000 qps et que chaque requête prend en
moyenne 5 ms, ça te fait donc un total de traitement de 5
secondes/seconde et en moyenne il y aura 5 requêtes en CLOSE_WAIT à tout
instant (concurrence = 5).

Disons que ce soit ta charge maximum.  Je ne sais pas quel est ton
pattern de traffic, mais ce calcul n'est valable que pour des moyennes.
Si tu as quelques requêtes qui prennent 100 ms pour une raison ou une
autre, ça peut te mettre dedans.  Tu auras alors 10 requêtes par seconde
qui te prendront en tout 1 s de traitement.  Il reste donc 4 secondes
pour gérer les 990 autres.  On peut aisément imaginer que ça s'accumule.

Bref, je te conseille de prendre un netstat toutes les secondes et de
faire un diff des connexions en CLOSE_WAIT.  Si c'est complètement
différent, c'est que ton serveur reçoit juste trop de requêtes, essaie
d'augmenter le temps de caching côté client.  S'il y a des requêtes qui
restent d'une seconde sur l'autre, à mon avis il faut investiguer sur la
raison de cette latence
importante.


> 
> Alexandre.
> 
> ---
> tcp        1      0 ip_du_lb:7042         2.22.112.119:60697
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:34567
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:61335
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:62058
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:40986
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:51570
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.113.45:54955
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         92.123.224.151:61522
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         95.101.182.125:34379
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.181:38540
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.112.246:55492
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:60806
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         173.223.10.118:59989
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         81.20.72.214:44728
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         5.178.43.14:49587
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.112.246:34017
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:47600
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         173.223.10.111:45591
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         95.101.182.143:60799
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:56000
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.113.45:47618
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:56326
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:38030
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         173.223.10.111:48353
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:45874
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.18.244.38:64988
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.16.156.76:52033
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.112.246:56818
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:52815
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.112.246:46618
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:54625
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.16.117.87:50440
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:37357
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.181:34291
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:40424
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:52707
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:59426
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.181:63109
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         173.223.10.111:35693
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         173.223.11.39:58859
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.16.117.103:60576
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.113.45:47761
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.113.45:62756
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:42445
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:40627
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:64303
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.16.156.76:40652
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         92.123.64.183:33600
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:53681
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         95.101.182.125:47381
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.16.117.95:54014
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:52454
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:55112
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.181:53757
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:62656
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.112.246:47238
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         88.221.112.246:33872
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:41944
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.119:35897
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.159:57187
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         2.22.112.181:48931
> CLOSE_WAIT  28878/varnishd  
> tcp        1      0 ip_du_lb:7042         173.223.10.111:37577
> CLOSE_WAIT  28878/varnishd
> ---



> _______________________________________________
> Liste de diffusion du FRsAG
> http://www.frsag.org/


-- 
Jeremie Le Hen

My PIN is the last four digits of Pi.
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/

Répondre à