Någon som kan knäcka nöten?

Jag gillar memcache och använder det flitigt här och var. Men tyvärr så stängs inte kopplingen ner korrekt någonstans i koden och jag vet inte riktigt var. Detta resulterar i att massor av TCP-koppel hamnar i TIME_WAIT:

$ netstat -n|grep -c TIME_WAIT

5449

Har du någon lösning på mitt problem eller tips på hur jag kan hitta vart kopplet inte stängs ner korrekt i PHP-koden?

3 reaktioner på ”Någon som kan knäcka nöten?

  1. Jag vet inte det men har ju märkt vad som triggar prestanda tröttheten (om det inte har varit slump att det kommit då men ganska konsekvent varje gång under dagen). Du har det i min ström som @jonasl.

    Mycket nya meddelande som ”refreshas” samtidigt som man petar baket där det också ska räknas om?

    Hanss senast blogginlägg..Du med :-D

  2. TIME_WAIT är inte ett tecken på att en förbindelse inte stängs ned korrekt, så du kan nog sluta leta i koden… Den sida som tar initiativ till att stänga en tcp-förbindelse kommer alltid passera TIME_WAIT-tillståndet som ett sista steg. Efter en kort stund kommer förbindelsen att försvinna helt.

    Den bästa lösningen på problemet är antagligen att fundera på om du kan koda runt problemet, t.ex. genom att hantera memcached-anslutningarna via en connection pool eller att lägga till antingen fler memcached- eller frontend-noder (på separata maskiner), beroende på vilken sida som skapar flest TIME_WAITs. Alternativt kan du testa om det fungerar bättre genom att via sysctl ändra följande inställningar… men på egen risk, har inte prövat själv. :-)

    net.ipv4.tcp_tw_recycle
    net.ipv4.tcp_tw_reuse

  3. Ah, glömde det uppenbara i tröttheten. TIME_WAIT är alltså normalt sett inte ett problem i sig självt förrän det hindrar dig att öppna en ny förbindelse till memcached, vilket t.ex. inträffar när du har slut på lediga portar på klientsidan p.g.a. att alla är allokerade av TIME_WAIT tillstånd.

    Om du inte har några sådana bekymmer kan du alltså ignorera problemet fram till den dag det inträffar. :-)

Lämna ett svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *