Speicherleck
was so ein kleines nicht geschlossenes socket doch ausmachen kann...
zur vorgeschichte: ich habe vor ca. drei wochen dnswl.org entdeckt und war einige tage erfolglos auf der suche nach einer möglichkeit, diese liste sinnvoll und effizient in meinen postfix zu integrieren. unter effizient faellt dabei fuer mich nicht die vom listenbetreiber vorgeschlagene technik die komplette liste regelmaessig runterzuladen, mit shellscripten umzuwandeln und dann von postfix mit dem cidr maptype ueberpruefen zu lassen. da, denke ich, hat mein rechner doch noch deutlich sinnvolleres zu tun, als 500× am tag die selbe liste durchzuackern... also habe ich mir einen kleinen policy server geschrieben, der einfach nur die client ip mit dnswl.org abgleicht und im trefferfalle ein OK liefert. keine grosse sache.. knapp 600 zeilen.
nach zwei tagen dauerbetrieb fiel mir mehr zufaellig auf, dass der speicherbedarf des daemons immer mehr zunimmt. zunaechst hatte ich einen fehler im dns package von tcl vermutet und mich schon auf lange debuggingsessions gefreut (...). zum glueck liess sich der fehler aber doch noch deutlich einfacher lokalisieren.. ich hatte noch bei der voranalyse zum debuggen bemerkt, dass in netstat noch eine ganze menge verbindungen auf dem von mir ausgewaehlten port im status CLOSE_WAIT verharrten.. das konnte so ja nicht richtig sein. ich war mir eigentlich sicher das socket korrekt zu schliessen, wenn die verbindung beendet werden sollte.. aber aus irgendeinem grunde hatte ich if not statt if geschrieben und die sockets blieben bis zum beenden des daemons offen.
nach ausbesserung dieses kleinen faux pas laeuft der daemon nun seit ueber einer woche mit gleichbleibendem speicherverbrauch. :)
zur vorgeschichte: ich habe vor ca. drei wochen dnswl.org entdeckt und war einige tage erfolglos auf der suche nach einer möglichkeit, diese liste sinnvoll und effizient in meinen postfix zu integrieren. unter effizient faellt dabei fuer mich nicht die vom listenbetreiber vorgeschlagene technik die komplette liste regelmaessig runterzuladen, mit shellscripten umzuwandeln und dann von postfix mit dem cidr maptype ueberpruefen zu lassen. da, denke ich, hat mein rechner doch noch deutlich sinnvolleres zu tun, als 500× am tag die selbe liste durchzuackern... also habe ich mir einen kleinen policy server geschrieben, der einfach nur die client ip mit dnswl.org abgleicht und im trefferfalle ein OK liefert. keine grosse sache.. knapp 600 zeilen.
nach zwei tagen dauerbetrieb fiel mir mehr zufaellig auf, dass der speicherbedarf des daemons immer mehr zunimmt. zunaechst hatte ich einen fehler im dns package von tcl vermutet und mich schon auf lange debuggingsessions gefreut (...). zum glueck liess sich der fehler aber doch noch deutlich einfacher lokalisieren.. ich hatte noch bei der voranalyse zum debuggen bemerkt, dass in netstat noch eine ganze menge verbindungen auf dem von mir ausgewaehlten port im status CLOSE_WAIT verharrten.. das konnte so ja nicht richtig sein. ich war mir eigentlich sicher das socket korrekt zu schliessen, wenn die verbindung beendet werden sollte.. aber aus irgendeinem grunde hatte ich if not statt if geschrieben und die sockets blieben bis zum beenden des daemons offen.
nach ausbesserung dieses kleinen faux pas laeuft der daemon nun seit ueber einer woche mit gleichbleibendem speicherverbrauch. :)
geschrieben am 7. Februar 2007, 23:02 in geeky