[dovecot]"Socket already exists" of "Cannot allocate memory"

Pagina: 1
Acties:

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Ik krijg het maar niet voor elkaar om dovecot aan de praat te krijgen. Er zijn twee foutmeldingen die ik krijg, deze wisselen elkaar af zonder wijzigingen in dovecot.conf
Jun 11 13:05:25 106 dovecot: Dovecot v1.0.rc15 starting up
Jun 11 13:05:26 106 dovecot: auth(default): socket() failed: Cannot allocate memory
Jun 11 13:05:26 106 dovecot: auth(default): net_listen_unix(/var/spool/postfix/private/auth) failed: Cannot allocate memory
Jun 11 13:05:26 106 dovecot: Auth process died too early - shutting down
Jun 11 13:05:26 106 dovecot: child 29801 (auth) returned error 89
Jun 11 13:16:30 106 dovecot: Dovecot v1.0.rc15 starting up
Jun 11 13:16:31 106 dovecot: auth(default): Socket already exists: /var/run/dovecot/auth-master
Jun 11 13:16:31 106 dovecot: Auth process died too early - shutting down
Jun 11 13:16:31 106 dovecot: child 30482 (auth) returned error 89
Nu heb ik uiteraard al gezocht naar mogelijke oplossingen. Ik heb login_processes_count al op 1 gezet en ook geprobeerd om login_process_size te vergroten naar 64 mb. Zonder succes echter

Ik ben nu ten einde raad. Weet iemand hoe ik dit probleem kan oplossen?
$ uname -a
Linux **** 2.6.18-8.1.15.el5.028stab047.1 #1 SMP Tue Oct 23 15:24:46 MSD 2007 i686 GNU/Linux
code:
1
2
3
4
5
$ free
             total       used       free     shared    buffers     cached
Mem:        262144     206336      55808          0          0          0
-/+ buffers/cache:     206336      55808
Swap:            0          0          0

Ik ontken het bestaan van IE.


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:23

deadinspace

The what goes where now?

Wat vraagjes:
  • Welke distributie?
  • Hoe heb je dovecot geinstalleerd? (Van source? Packages? ...?)
  • Welke versie van dovecot precies?
  • Wil je hem als pop3 of als imap server gebruiken? (Of beide?)
  • Hoe ziet je dovecot.conf eruit?
Verder: ik ken dovecot niet, maar heeft hij misschien een flag waarmee je hem op de voorgrond kunt laten draaien in plaats van als daemon? Dan is het misschien makkelijker om er wat extra debug info uit te krijgen. Kijk ook meteen of dovecot instellingen heeft voor meer verbose logs en/of debug output.

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 09-01 14:32
Toevallig via tcpserver oid dergelijks draaien? Of een gelimite (softlimit, etc.) omgeving?

zeroxcool.net - curity.eu


  • luteijn
  • Registratie: Maart 2008
  • Laatst online: 16-12-2022
cyberstalker schreef op woensdag 11 juni 2008 @ 14:02:
Ik krijg het maar niet voor elkaar om dovecot aan de praat te krijgen. Er zijn twee foutmeldingen die ik krijg, deze wisselen elkaar af zonder wijzigingen in dovecot.conf
Als je ze kort na elkaar opstart zal de socket van de vorige keer nog blijven hangen zijn (om eventuele replies die nog vertraagd over het netwerk binnen kunnen komen netjes af te handelen), dus die error over het socket already exists zou ik verder even negeren. Evt later de kernel settings tweaken of source van dovecot om option nolinger te gebruiken; maar bij normaal gebruik is dit niet zo'n probleem..)

Die andere foutmelding duidt op geheugentekort. 640 kilobyte zou genoeg moeten zijn, maar is dat vaak niet meer tegenwoordig. Ik ken de applicatie verder niet, heeft hij soms erg veel geheugen nodig en loop je daar echt uit (ik zie dat je 'maar' 256 MByte ofzo hebt, waarvan maar 55 MByte vrij en geen swapspace, ook staan je buffers etc op 0 dus waarschijnlijk allemaal leeg-geduwd door dovecot of iets anders dat veel geheugen gebruikt. wat draait er allemaal op die arme PC?!) . Zet voor de grap eens wat swapspace aan, desnoods op een USB stick ofzo.

http://wiki.dovecot.org/PerformanceTuning:
Memory usage optimization
There aren't many settings which affect Dovecot's memory usage. About the only such settings are auth_cache_size and LoginProcess settings. In general Dovecot uses as much memory as it needs, which is usually quite little.
Note that these settings do not directly affect the memory usage:
login/mail/auth_process_size: These are simply safe guards against potential memory leaks. If the process's virtual size reaches the limit, the process is killed by the kernel.
login_max_processes_count, max_mail_processes and auth_worker_max_count: These are mostly to avoid DoS attacks using up all your memory.
ook geprobeerd om login_process_size te vergroten naar 64 mb
Eh, maar je hebt toch helemaal geen 64 MByte meer vrij?!? wat staat er normaal in je configuratie van dovecot? Maak dat eens een flink stuk _kleiner_ ; het idee is niet dat je er fysiek geheugen bij tovert door de config te wijzigen, maar juist het geheugen gebruik beperkt zodat je toekomt met wat je hebt.

Eerste post mist eigenlijk nog iets als de uitvoer van "top -bn 1" en je relevante config file; verder goed dat je de foutmeldingen en uitvoer van free geeft.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:23

deadinspace

The what goes where now?

luteijn schreef op woensdag 11 juni 2008 @ 15:06:
Als je ze kort na elkaar opstart zal de socket van de vorige keer nog blijven hangen zijn (om eventuele replies die nog vertraagd over het netwerk binnen kunnen komen netjes af te handelen), dus die error over het socket already exists zou ik verder even negeren.
In dat geval zou ik "Address already in use" (EADDRINUSE) verwachten, niet "socket already exists. Ik vermoed dus dat je conclusie hierover niet juist is :)
[...] waarvan maar 55 MByte vrij en geen swapspace, ook staan je buffers etc op 0 dus waarschijnlijk allemaal leeg-geduwd
Hmm, ik kan me niet voorstellen dat dovecot zoveel geheugen gebruikt. Bovendien gebruikt Linux memory overcommitment, waardoor je over het algemeen eerder onverwachte SEGVs krijgt dan allocatiefouten.

Maar dat buffers en cached op 0 staan heb je goed opgemerkt, dat is inderdaad aardig vreemd, en het is inderdaad weinig vrij geheugen, wat geen handige combinatie is met geen swap. Zeker nader onderzoek waard ;)

  • daft_dutch
  • Registratie: December 2003
  • Laatst online: 02-12-2025

daft_dutch

>.< >.< >.< >.<

deadinspace schreef op woensdag 11 juni 2008 @ 15:27:
[...]
In dat geval zou ik "Address already in use" (EADDRINUSE) verwachten, niet "socket already exists. Ik vermoed dus dat je conclusie hierover niet juist is :)
[...]
niet als het een unix socket is.

>.< >.< >.< >.<


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:23

deadinspace

The what goes where now?

daft_dutch schreef op woensdag 11 juni 2008 @ 17:17:
niet als het een unix socket is.
Nee, ook dan geeft bind() EADDRINUSE:
% ls -l socket
srwxr-xr-x 1 test test 0 2008-06-11 18:37 socket=
% strace ./test 2>&1 | egrep '^bind'
bind(4, {sa_family=AF_FILE, path="socket"}, 8) = -1 EADDRINUSE (Address already in use)

Overigens had luteijn het toch echt duidelijk over een netwerk socket. ;)

  • luteijn
  • Registratie: Maart 2008
  • Laatst online: 16-12-2022
deadinspace schreef op woensdag 11 juni 2008 @ 18:43:
[...]
Overigens had luteijn het toch echt duidelijk over een netwerk socket. ;)
Inderdaad, ik was niet gehinderd door enige kennis van dovecot, dus ging maar uit van een netwerk socket; zou ook best een unix-domain socket kunnen zijn. Maar goed, de error message lijkt me een beetje 'liever' gemaakt door het programma, dus wellicht gaat het stiekum wel degelijk om EADDRINUSE.
Heb even de source erbijgepakt en zie daar in "src/auth/main.c" (let op de negatieve logica!):
       old_umask = umask(mask);
        for (i = 0; i < 5; i++) {
                fd = net_listen_unix(path, backlog);
                if (fd != -1)
                        break;

                if (errno != EADDRINUSE)
                        i_fatal("net_listen_unix(%s) failed: %m", path);

                /* see if it really exists */
                if (net_connect_unix(path) != -1 || errno != ECONNREFUSED)
                        i_fatal("Socket already exists: %s", path);

                /* delete and try again */
                if (unlink(path) < 0)
                        i_fatal("unlink(%s) failed: %m", path);
        }
        umask(old_umask);



't Is zo te zien een unix-domain socket, wellicht niet netjes opgeruimd omdat 'ie uit zijn geheugen liep, en ja het gaat niet niet (dus juist wel) om EADDRINUSE, want die foutmelding ervoor zien we niet terug in zijn log. Dit stuk lijkt me toch echt een red-herring, hoewel het misschien aangeeft hoe ver de vorige incarnatie gekomen is.
---

De interessante geheugen foutmelding komt voort uit src/lib/network.c:net_listen_unix().
Daar gebeurt niet zoveel spannends, dus blijkbaar is net daarvoor het geheugen al opgebruikt en er niet genoeg meer over om wat buffers etc. aan te maken.

Need more input, TS, kom d'r maar in met je top uitvoer, config files en misschien ook maar de omvang van relevante databestanden (Vzv ik begrijp is dit een pop/imap server dingens, dus heb je soms een heel grote mailbox (of heel veel kleintjes) die hij moet mmappen ?) Een snelle zoektocht op geheugengebruik door dovecot komt met 'kleine footprint' en 'gebruikt weinig geheugen', maar ja tegenwoordig is 64 MByte al 'weinig'.

P.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:23

deadinspace

The what goes where now?

luteijn schreef op woensdag 11 juni 2008 @ 22:39:
Maar goed, de error message lijkt me een beetje 'liever' gemaakt door het programma, dus wellicht gaat het stiekum wel degelijk om EADDRINUSE.
Klopt, dat zou kunnen (en is dus inderdaad ook zo). Daarom drukte ik me ook voorzichtig uit.

Dat is ook de reden dat ik vroeg naar dovecot op de voorgrond draaien trouwens. Dat maakt het makkelijker om het te stracen en/of ltracen, waardoor je vaak beter kan zien wat er mis gaat (die EADDRINUSE was er ook door aan het licht gekomen bijvoorbeeld).
dus heb je soms een heel grote mailbox (of heel veel kleintjes) die hij moet mmappen ?)
Mja, files mmappen gebruikt alleen address space van dovecot, geen fysiek RAM, dus dat zou het probleem niet moeten zijn (tenzij hij zoveel wil mmappen dat hij 3 GB address space vol maakt - even aangenomen dat het om x86 gaat).
Een snelle zoektocht op geheugengebruik door dovecot komt met 'kleine footprint' en 'gebruikt weinig geheugen', maar ja tegenwoordig is 64 MByte al 'weinig'.
En 64 MB lijkt me nog steeds veel voor iets als dovecot. Maar ik heb het nog nooit gebruikt, dus misschien zit ik ernaast.

  • FiscBiker
  • Registratie: April 2003
  • Laatst online: 28-01 14:09
Voor wie het wil weten:

Dovecot gebruikt hier 2764K en dovecot-auth 5192K. Alleen de POP3-server is in gebruik.
Dat is onder FreeBSD 6.2
Pagina: 1