sockets disabled, out-of-fds

Dan Lukes dan at obluda.cz
Thu Dec 8 19:36:58 CET 2016


Miroslav Lachman wrote:
> Uz podruhe v relativne kratkem case se mi na jednom serveru stalo
> nasledujici:
>
> Dec  7 14:09:30 XXX kernel: sonewconn: pcb 0xfffff80185dad188: Listen
> queue overflow: 193 already in queue awaiting acceptance (4946 occurrences)

Tohle je celkem jasne - "nasluchajici" socket ma frontu prichozich 
pozadavku na navazani TCP spojeni.  Tato fronta ma nejakou delku a toto 
hlaseni rika, ze prihozi pozadavek byl zahozen, protoze na nej ve fronte 
uz nebylo misto.

> Dec  7 14:10:24 XXX kernel: [zone: pf states] PF states limit reached

Tohle pro zmenu rika, ze v PF byl vycerpan prostor pro uchovavani 
nejakych stavu. Intuitivne hadam, ze to budou stavy TCP spojeni a tedy 
jde o projev stejne veci (velky pocet prichozich pozadavku na navazani 
spojeni), jen na jine urovni.

> 2016-12-07 14:08:53: (connections.c.139) (warning) close: 55 Connection reset by peer

Behem TCP spojeni prisel od protistrany RST, tedy "abort spojeni" (misto 
normalniho uzavreni). Toreticky takove RST nemusi nutne prijit az od 
protistrany, zdrojem muze byt take firewall po ceste, vcetne tveho 
vlastniho. Nebo muze prijit od protistrany, napriklad pokud se rozhodla, 
ze jiz dele nehodla na data cekat.

> 2016-12-07 14:08:59: (server.c.1759) [note] sockets disabled, out-of-fds

Nekoukal jsem do zdrojaku, takze hadam - zrejme jde o prekroceni 
FD_SETSIZE (viz man FD_ZERO) - a to znamena prilis velky pocet 
otevrenych spojeni (zatimco predchozi hlasky byly o prilis velkem poctu 
pozadavku an otevreni dalsich spojeni).

> Takze predpokladam, ze ta sonewconn hlaska a PF states limit je az dusledek problemu Lighttpd.

Nejsme si uplne jisty. Podle vseho jde o prilis velky pocet otevrenych 
spojeni, prilis velky pocet pozadavku an otevreni dalsich spojeni.

Jasne je to, ze pocet prichozich pozadavku prevysuje pocet pozadavku, 
ktere lighttpd vyridi.

To muze znamenat proste jen prilis velky pocet prichozich pozadavku 
(velky zajem o server nebo utok), ne az tak velky pocet prichozich 
pozadavku, ale takoveho typu, ze jejich vyrizeni trva velmi dlouho (mj. 
napriklad proto, ze o velka data zada klient s pomalym spojenim, takze 
prilis dlouho trva prenos), priblem lighttpd (z nejakeho duvodu i 
normalni a male pozadavky vyrozuje velmi pomalu - napriklad jsou data na 
vzdalenem disku a problemy jsou s nim).

> Proces Lighttpd bezi, ale neodpovida

Ja myslim, ze odpovida - ale musis se s prichozim pozadavkem trefit do 
toho okamziku, kdy se ve fronte prichozich pozadavku zrovna uvolni misto 
- a pak si pockat, nez pozadavek prijde na radu a TCP spojeni je 
skutecne navazano (coz se navic musi trefit do okamziku, kdy ma lighttpd 
prostor pro navazani dalsiho spojeni) a kdy je skutecne vyrizeno.

Statisticky to muze vypadat, ze neodpovida vubec.

> "service lighttpd restart" problem vyresi.

To porad jeste nedokazuje, ze problem je nutne v nem (ale nerikam ani, 
ze neni).

Je treba zjistit jake pozadavky ma ten server "rozdelane" v okamziku, 
kdy problem nastal, zda je vubec vyrizuje (a nove jen pribyvaji moc 
rychle) nebo data nepodava vubec (pak je dobre identifikovat jaka data 
to ma problem podavat a zacit hledat proc by mel byt problem je podat).

Dan



More information about the Users-l mailing list