11 berichten aan het bekijken - 1 tot 11 (van in totaal 11)
  • Q:
    Bijdrager
    bassbug

    Memory leak: wat / hoe / waarom?

    Je leest er wel eens over, dat Memory Leak.

    Wat is dat precies, hoe gebeurt dat en wat is er tegen te doen?

    Volgens mij is het dat een prg naast fysieke hoeveelheid geheugen dat het nodig heeft ook Virtuele Geheugen (VM) gebruikt en dat naar mate het langer in gebruik is een steeds groter hoeveelheid VM gebruikt. Met als gevolg dat het systeem traag wordt omdat er steeds memory swapping plaats vindt (je hoort de HD steeds ratelen terwijl je niets doet)?

    Kan iemand uit leggen hoe dit alles werkt en met name hoe voorkom je dat je systeem hieronder lijdt?

    Bijdrager
    madcat

    Een memory leak is een programma dat slecht is geschreven en niet zijn eigen rommel op ruimte.
    En daarom steeds meer geheugen in beslag neemt namate te het langer draait terwijl het programma hier geen gebruik van maakt
    ik zou technisch dit ook wel kunnen uitleggen maar dat kan niet zonder je diep in C/C++ code te laten duiken.

    Om het simpel te houden, gebruik goede programma’s dus geen rare open source programma’s die niet goed getest zijn.
    Dat een programma veel geheugen in beslag neem hoeft niet te betekenen dat het een memory leak heeft. Als je naar bijvoorbeeld FireFox kijkt zal het meer geheugen in beslag nemen als je meer tabs opent.. dit komt omdat dit nodig is. echter als je een tab sluit zal het dit geheugen moeten vrijgeven.
    stel dat de data van die tab nog wel in het geheugen staat terwijl je het niet meer ziet.. dan noem je dat een geheugen lek.

    echter is het allemaal wat complexer als dat het nu lijkt maar simpel gezien klopt de bovenstaande vergelijking aardig

    Bijdrager
    bassbug

    Ik weet niet wanneer een prg goed geschreven is maar heel veel programma’s ‘lekken’ in meer of mindere mate. Safari, iChat, Skype. Te veel om op te noemen! Ik betwijfel of dit iets is wat door het prg opgelost dient te worden. Misschien moet OSX dit beter in de tang houden?

    Gewoon alles afsluiten en herstarten is wel een drastische maar wel effectieve manier om alles weer ‘op scherp’ te zetten. Maar tegelijkertijd ookonhandig.

    Bijdrager
    lowfi

    Eigenlijk zijn alle programmas die de safari engine gebruiken memory hogs:P

    Mijn safari zit regelmatig boven de 1GB netnewswire ook….

    Bijdrager
    rrrichie

    Memory Leak is letterlijk Lek Geheugen. Vreemde is echter dat Memory Leak gebruikt word om “plakkerig” geheugen te beschrijven. Zoals gezegd als je een programma opstart en weer sluit dan wordt niet al het geheugen vrijgegeven. Vroeger toen men nog 512K geheugen had, viel dit snel op. Tegenwoordig niet zo snel meer.

    Zelf kan het niet oplossen, behalve dan door de computer te herstarten, of het programma maar een keer opstarten. Microsoft raadde dit zelf aan bij bepaalde versies van Excel, die nogal “Lek” waren.

    De oorzaak is gewoon slecht programmeren of vergeten iets vrij te geven. Soms niet het programma zelf de schuldige maar een stuk code die het aanroept, waarbij dus het OS zelf dus fout zit.

    Als je meer geheugen in je computer hebt, duurt het gewoon langer voordat je last krijgt van memory leaks.

    Bijdrager
    Pieterr

    Zie ook: Memory Leak

    Bijdrager
    readefries
    ”bassbug”

    Misschien moet OSX dit beter in de tang houden?

    Het OS steld geheugen beschikbaar, en als het programma het niet meer nodig heeft dient deze het opnieuw beschikbaar te stellen aan het OS. Het heeft dus niets met Mac OS X te maken, als wel een slecht programma. Ongebruikt geheugen wordt niet vrijgegeven.

    Als meer over geheugenbeheer en de werking hiervan wilt weten, kun je het besten zoeken naar TanenBaum. Dit PDF’je bevat wel mooie plaatjes en tekst van hoe geheugenbeheer in zijn werk gaat.

    Bijdrager
    www.project-euh.com
    ”bassbug”

    Ik weet niet wanneer een prg goed geschreven is maar heel veel programma’s ‘lekken’ in meer of mindere mate. Safari, iChat, Skype. Te veel om op te noemen!

    Ik vermoed dat jij iets anders bedoelt dan de rest van de mensen. Want naam mijn weten hebben deze geen memory leaks. Natuurlijk gebruiken ze soms veel VM, maar dat houdt niet in dat er een memoory leak is.

    Bijdrager
    bassbug

    Vandaar dat ik deze topic geopend heb.

    Ik dacht altijd dat VM bedoeld was als het systeem echte RAM tekort kwam, dan de HD ruimte ging gebruiken om het tekort aan te vullen. Maar ik zie dat er genoeg RAM over is en toch hebben prgs allemaal een flinke hoeveelheid VM aangemaakt (te zien bij Acitivity Monitor).

    Dus nogmaals, wie kan het uitleggen hoe het een en ander werkt en wat er te doen is om ‘leeglopende’ prgs inde hand te houden?

    Update:
    Ik moet eigenlijk zeggen UITDIJENDE prgs ipv leeglopend.

    Bijdrager
    Oppie

    Er is geen sprake van “leeglopen”, en je begrijpt het idd niet helemaal goed.
    Windows en het oude Mac OS gebruikten dat VM op die manier; UNIX varianten niet.
    Lees maar eens dit: Introduction to Memory Usage Performance Guidelines
    Of op de Wikipedia: http://en.wikipedia.org/wiki/Virtual_memory

    Bijdrager
    madcat

    bassbug, als ik het zo lees dan heb je helemaal geen problemen. .laat het memory management maar lekker aan het OS over. Er zijn een aantal manieren om dit soort dingen te “tweaken” maar in jou geval zal het er alleen maar slechter van worden.
    Als het OS “vind” dat het meer virtueel geheugen nodig is.. dan is dat 99 van de 100 keer het geval er zijn een paar uitzonderingen maar die zullen denk ik niet plaats vinden op jou systeem.
    Als je heel veel geswap hoort op je hardeschijf dan kan dat in jou geval 2 redenen hebben
    1) je hebt te weinig ram
    2) je draait teveel programma’s

    memory leaks komen amper voor in de programma’s die gemaakt zijn door apple en de getallen die activity monitor weergeven interpeteer je verkeerd. Vergeet de getallen in het virtual memory en kijk alleen naar ‘real’. Threads is ook iets wat niet belangrijk is maar “CPU %” weer wel. process id is ook iets wat je kan vergeten en “user” kan soms wel handig zijn maar in jou geval denk ik ook niet. “kind” is wel weer van belang als je een intel processor hebt, als je namelijk een powerpc process ziet draaien dan moet je eens kijken of hiervan een update is zodat deze native kan draaien.

    Tot zover de cursus activity monitor, dan gaan we na de reclame verder met creatief met kurk.

11 berichten aan het bekijken - 1 tot 11 (van in totaal 11)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.