Avatar billede dsj Nybegynder
16. januar 2004 - 12:30 Der er 1 løsning

Underligt memory-leak

Jeg har en Java-server kørende på en pænt hurtig maskine med 1 GB RAM og IBM's JRE 1.4.1 på en Linux Debian distribution. Serveren anvender NIO til netværkskommunikationen og ByteBuffer'e allokeret i den native hukommelse, altås ikke i JVM'en.

Når jeg sidder og observerer ressource-forbruget i programmet 'top', kan jeg se at den brugte mængde RAM langsomt vokser med ca. 100 kb for hver 5-10 sekunder, og den falder aldrig igen, som følge af klient-antallet daler eller anden garbage collection.
Jeg har analyseret serveren med profileren fra Borland og kan konstatere at der i heap'en ikke er et memory-leak. Når klienter disconnecter, bliver der ryddet korrekt op og ingen objekter bliver tilbage, som ikke må.

Nogen der lige ved hvad det kan skyldes?? Det er ikke så fedt at alle RAM bliver opbrugt i løbet af en dag. Jeg har tænkt lidt over de native ByteBuffer'e; de tæller garanteret ikke med i heap-størrelsen, men er det stadig garbage collectore der sørger for at fjerne ByteBuffer'ne, når ikke de bruges mere (ikke har nogen referencer til sig) - man har jo ikke mulighed for at slette eller lukke en ByteBuffer.
Avatar billede dsj Nybegynder
22. januar 2004 - 22:42 #1
Serveren har haft en række log-filer konstant åbne til skrivning, i form af PrintWriter-instanser, der jo bygger på en output-stream. Med de gamle streams skrives ikke direkte til filen, men til RAM. Nu har jeg skiftet til NIO og problemet er dermed ikke længere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester