Seite 1 von 1

Script frisst 1,3 GB Ram? Memory Leak?

Verfasst: Freitag 19. November 2010, 06:46
von AngelusNoctis
Hi

Ich hab ein kleines Problem mit nem sehr einfachen Script das ne Platte mit Binärwerten überschreibt.

Zwar ist das Problem dass das Script über 1,3 GB Ram frisst laut top (16% des RAM) und free.

Im normal zustand benötigt meine Kiste ca 700MB sobald ich das Script starte bin ich bei 2 GB.


Kann mir jemand erklären wieso dieses Script das auslöst?

Code: Alles auswählen

import parted

gutman_binary = ['U\x00\x00\x00' , '\xaa\x00\x00\x00', '$I\x92\x00', '\x92$I\x00', 'I\x92$\x00', '\x00\x00\x00\x00', '\x11\x00\x00\x00', '"\x00\x00\x00', '3\x00\x00\x00', 'D\x00\x00\x00', 'U\x00\x00\x00', 'f\x00\x00\x00', 'w\x00\x00\x00', '\x88\x00\x00\x00', '\x99\x00\x00\x00', '\xaa\x00\x00\x00', '\xbb\x00\x00\x00', '\xcc\x00\x00\x00', '\xdd\x00\x00\x00', '\xee\x00\x00\x00', '\xff\x00\x00\x00', '$I\x92\x00', '\x92$I\x00', 'I\x92$\x00', '\xdb\xb6m\x00', 'm\xdb\xb6\x00', '\xb6m\xdb\x00']

size = int(parted.getDevice('/dev/sda3').getSize('KB'))

f = open('/dev/sda3' , 'wb')

for method in gutman_binary:
    data = method * 256
    for i in range(size):
        f.write(data)
    f.seek(0)
f.close()
    
    

Ach ja, es ist egal ob nun die "gutman_binary" Liste nun ein Element hat oder data = method *256 ausserhalb der Schleifen ist.

Bild

Re: Script frisst 1,3 GB Ram? Memory Leak?

Verfasst: Freitag 19. November 2010, 07:25
von bwbg
range(n) liefert eine Liste mit den Elementen von 0 bis n-1. Bei einer Partitionsgröße von 25GB wären das schon rund 25 x 1000 x 1000 x 4B = 100MB (In der Annahme das eine Int genau 4 Byte benötigt). Das ganze noch multipliziert mit len(gutman_binary) Worst Case.

Verwende xrange, wenn du nicht explizit eine Liste benötigst. xrange gibt einen Generator zurück, welcher die gewünschten Werte erzeugt.

Mit Python3 sieht das wieder anders aus.

Grüße...
bwbg

Edit: Typo.

Re: Script frisst 1,3 GB Ram? Memory Leak?

Verfasst: Freitag 19. November 2010, 08:01
von BlackJack
@AngelusNoctis: Falls Du keine Platten aus Mitte der 90er oder früher löschen möchtest (dann hättest Du das Speicherproblem hier wahrscheinlich nicht :-)), dann reicht auch *einmal* überschreiben mit Nullen, oder wenn Du ganz paranoid bist, mit Zufallsdaten. Siehe auch Gutmans Epiloge zu dem Paper aus dem die Datenmuster stammen.

Re: Script frisst 1,3 GB Ram? Memory Leak?

Verfasst: Freitag 19. November 2010, 09:55
von AngelusNoctis
@bwbg

Perfekt :)

Gleicher Code mit xrange anstelle von range und schon sinds nur 0.1 - 0.5 MB.


Danke :)

@BlackJack

Ist mir klar, hab aber ollständigkeits halber folgende Methoden in mein PyQt Programm gehauen:

Zero
DoD 5220.22-M E
DoD 5220.22-M ECE
VSITR
Gutman

Re: Script frisst 1,3 GB Ram? Memory Leak?

Verfasst: Montag 22. November 2010, 13:41
von mkesper
AngelusNoctis hat geschrieben: @BlackJack

Ist mir klar, hab aber ollständigkeits halber folgende Methoden in mein PyQt Programm gehauen:
Weg damit, sowas unterstützt nur Leute, die an UFOs glauben etc. Wieso mehrere Methoden zur Auswahl anbieten, wenn die keinen Sinn ergeben?

Re: Script frisst 1,3 GB Ram? Memory Leak?

Verfasst: Montag 22. November 2010, 18:04
von BlackJack
Oder Alternativ auch mehr Auswahl anbieten, denn "Gutman" ist ja nicht *eine* Methode sonder verschiedene Muster für verschiedene Plattenarten beziehungsweise Aufzeichnungsformate. Damit jemand der eine Platte aus den 80ern löschen möchte, auch tatsächlich die *dazu* passende Methode auswählen kann. :-D