Hallo zusammen,
auf einem FreeBSD 6.2 System, das als Loadbalancer vor einer Webfarm dient, habe ich im Moment Probleme mit halboffenen Verbindungen und dadurch verbrauchten Sockets.
Hin und wieder kommen die folgenden Fehlermeldungen, sobald das Socket Limit erreicht wurde:
haproxy[46932]: Proxy my_proxy reached system memory limit at 83 sockets. Please check system tunables.
stunnel: LOG3[45738:139512832]: remote socket: No buffer space available (55)
netstat -m sieht ok aus:
491/874/1365 mbufs in use (current/cache/total)
450/618/1068/25600 mbuf clusters in use (current/cache/total/max)
450/490 mbuf+clusters out of packet secondary zone in use (current/cache)
0/0/0/0 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/0 9k jumbo clusters in use (current/cache/total/max)
0/0/0/0 16k jumbo clusters in use (current/cache/total/max)
1022K/1454K/2477K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0/8/6656 sfbufs in use (current/peak/max)
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile
7696 calls to protocol drain routines
Aber das hier sieht weniger gut aus:
# sysctl kern.ipc.numopensockets
kern.ipc.numopensockets: 11301
# sysctl kern.ipc.maxsockets
kern.ipc.maxsockets: 12328
Nachdem ich kern.ipc.maxsockets auf 16384 hochgesetzt habe, verschwinden diese Fehler vorerst.
Weiter ist folgender Wert auffällig:
# netstat -n | grep -c FIN_WAIT_2
11156
Alle Verbindungen gehen zu (Debian Linux) HTTP-Nodes hinter dem Loadbalancer.
Mir ist schleiherhaft, warum diese Verbindungen nicht sauber abgebaut werden. Auf den Linux Systemen gibt es viele Verbindungen im LAST_ACK state.
Hat irgendjemand eine Idee, woher diese offenen Verbindungen kommen könnten und warum sie nicht sauber abgebaut werden? Kann ich einen Timeout auf dem FreeBSD System für die FIN_WAIT_2 Verbindungen setzen?
Außerdem ist mir aufgefallen, dass die Anzahl der verbrauchten tcp4 sockets in der netstat -n Ausgabe höher als die in kern.ipc.numopensockets angezeigte Zahl ist. Ist das so richtig? Müsste es nicht anders herum sein?
Viele Grüße,
Matthias
auf einem FreeBSD 6.2 System, das als Loadbalancer vor einer Webfarm dient, habe ich im Moment Probleme mit halboffenen Verbindungen und dadurch verbrauchten Sockets.
Hin und wieder kommen die folgenden Fehlermeldungen, sobald das Socket Limit erreicht wurde:
haproxy[46932]: Proxy my_proxy reached system memory limit at 83 sockets. Please check system tunables.
stunnel: LOG3[45738:139512832]: remote socket: No buffer space available (55)
netstat -m sieht ok aus:
491/874/1365 mbufs in use (current/cache/total)
450/618/1068/25600 mbuf clusters in use (current/cache/total/max)
450/490 mbuf+clusters out of packet secondary zone in use (current/cache)
0/0/0/0 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/0 9k jumbo clusters in use (current/cache/total/max)
0/0/0/0 16k jumbo clusters in use (current/cache/total/max)
1022K/1454K/2477K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0/8/6656 sfbufs in use (current/peak/max)
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile
7696 calls to protocol drain routines
Aber das hier sieht weniger gut aus:
# sysctl kern.ipc.numopensockets
kern.ipc.numopensockets: 11301
# sysctl kern.ipc.maxsockets
kern.ipc.maxsockets: 12328
Nachdem ich kern.ipc.maxsockets auf 16384 hochgesetzt habe, verschwinden diese Fehler vorerst.
Weiter ist folgender Wert auffällig:
# netstat -n | grep -c FIN_WAIT_2
11156
Alle Verbindungen gehen zu (Debian Linux) HTTP-Nodes hinter dem Loadbalancer.
Mir ist schleiherhaft, warum diese Verbindungen nicht sauber abgebaut werden. Auf den Linux Systemen gibt es viele Verbindungen im LAST_ACK state.
Hat irgendjemand eine Idee, woher diese offenen Verbindungen kommen könnten und warum sie nicht sauber abgebaut werden? Kann ich einen Timeout auf dem FreeBSD System für die FIN_WAIT_2 Verbindungen setzen?
Außerdem ist mir aufgefallen, dass die Anzahl der verbrauchten tcp4 sockets in der netstat -n Ausgabe höher als die in kern.ipc.numopensockets angezeigte Zahl ist. Ist das so richtig? Müsste es nicht anders herum sein?
Viele Grüße,
Matthias