ocenil bych moznost ty nepopsany stranky pameti uvolnit, protoze sposty programku (mozilla, xmm, atp.) naswapuje pamet kterou pouzije jednou, pak ji vyprazni, ale uz ji nevrati systemu, takze postupne zere a zere. kdyz ukoncim napr. tu mozillu, tak se nic nedeje ani po nekolika hodinach.
Od tohoto článku jsem, upřímně řečeno, také čekal nějaký popis, jak takto obsazenou paměť uvolnit, vzhledem k nadpisu.
Automatické uvolňování segmentů paměti, které byly nějakým programem naalokovány jako sdílené, ale které po skončení tohoto programu zůstávají alokované a nepřiřazené žádnému programu, takže užírají dostupnou paměť, umí, pokud vím, OpenWall patch do kernelu (http://www.openwall.com/linux); konkrétně jeho volba "Destroy shared memory segments not in use". Některé špatně napsané programy však na této vlastnosti stavěly, takže s touto volbou zapnutou zřejmě přestanou fungovat.
Pokud jde o uvolnění kousků paměti, naalokovaných programem pomocí rodiny funkcí malloc(), ale neuvolněných před jeho ukončením pomocí free(), nebo způsob, jak stanovit horní mez dostupné volné paměti, kterou systém využívá jako cache, to bohužel také nevím. Pokud někdo víte, jak tyto záležitosti řešit, podělte se prosím o zkušenosti...
Tento clanek se prece venuje necemu jinemu nez uvolnovani pameti vyhnite sdilene pameti nybrz zjisteni skutecneho stavu volne pameti (tedy po odecteni vsech bufferu atd. naopak sdilena pamet tam musi zapocitat)
Asi jsem mel zvolit vystiznenjsi, mene bulvarni nazev. Omlouvam se.
Jinak reseni problemu, ktery zminujete AFAIK neexistuje. Sdilena pamet totiz musi prezit i obdobi, kdy na ni neni zadny odkaz. Pokud Vami zminovany patch takovou pamet uvolnuje a pak neco prestane fungovat - je to vina toho patche a ne programu. Jdo o vyuziti jedne z vlastnosti sdilene pameti a ne o vylozene nejakou prasackou programatorskou praktiku.
K uvolnovani slab poolu:
Uvolnovat tu pamet ani vlastne neni potreba - uvolni automaticky pokud nejaky proces zazada o pamet a zadna fyzicka neni k dispozici (zjednodusene receno). Jedine pokud potrebujete vyrazne zvyhodnit diskovou cache oproti slab. To se pak ale spis oplati rovnou omezit velikost jednotlivych slab poolu pomoci zapisu do /proc/slabinfo (viz man slabinfo). Slab pool JE uzitecny a beze sporu zvysuje vykonnost systemu proto bych se nesnazil jej nejak umele omezovat stejne jako se asi jen malokdo rozhodne omezit diskovou cache jen z duvodu ze "opticky zere pamet". Pamet se ma vyuzivat efektivne, kdyz je volna pak se o efektivni vyuziti nejedna. Obcas se ale hodi vedet, kolik je skutecne obsazeno a k tomu prave slouzi rfree.
Problematika uvolnovani sdilene pameti, o kterou Vam pravdepodobne v tomto pripade jde, by si zaslouzila jiste pozornost ja jsem se ovsem nesetkal s tim, zeby se jadro nebo nejaky program choval v tomto ohledu nekorektne.
dobry den,
pokud je mi znamo tak system spravy pameti funguje v linuxu obecne tak ze pozira a pozira (logicky protoze pote je start a provozovani opetovne rychlejsi) a v okamziku kdy jiz pamet nedostacuje proste uvolni nepouzivane procesy pripadne swapuje...
ale mozna se mylim. kazdopadne tim by se vas problem s vyprazdnovanim stal zbytecny .))
mejte se fajn.
Dekuji vsem za zaslani slabinfa z vasich SMP masinek. Diky vasi pomoci vznikla verze 0.2
Changelog:
- Podpora SMP
- long long promenne pro podporu 32bit stroju s velkou pameti
- Tar se nyni rozbali do noveho adresare a ne na miste :-)
http://miho.webpark.cz/rfree.tar (10 KiB)
Neni zabaleny pac se to webparku nejak nelibilo :-(