wie memory leak in python script finden?
Hallo, ich hab ein python script auf einen raspberry pi 4 8gb laufen welches im loop ausgefuehrt wird und von tag zu tag immer mehr memory nutzt.
das script nutzt folgende imports:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from random import *
import secrets
from selenium.webdriver.common.keys import Keys
import praw
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
ich hab auch schon memory profiler ausprobiert, indem ich alles was im loop ausgefuehrt wird in einer funktion gespeichert hab und diese funktion im loop mit memory profiler zeile fuer zeile nach der memory nutzung suchen lassen habe aber das kommt bei jeder zeile nur 26.7MiB Nutzung raus.
z.b.
497 26.7 MiB 0.0 MiB 1 wait = randint(waita, waitb)
Ich hoffe mir kann jemand helfen wie ich genau heraus finden kann was so viel memory nutzt. <3
2 Antworten
Naja, wenn Dein Pythoninterpreter ein memleak hat, dann wirst Du ncits dagegen machen können, ansich räumt die GC alsweit möglich auf. Solltest Du aberr immer wiedr z.B Dateien öffnen, ohne die Handles/Resourcen freizugeben, sieht das schon anders aus.
Hast DU mal geschaut, ob es wirklich das Script ist, oder ob vielleicht FFox das Problemkidn ist?
ja mit dem script startet er immer zwei mal Web Content obwohl ich nur eine seite immer nutze
Im Python Script selber sollten keine Memory Leaks entstehen. Die Variablen in Python werden automatisch verwaltet und der Speicher wird aufgeräumt.
Die Memory Leaks müssen entweder direkt mit Interpreter entstehen oder mit einer Abhängigkeit, die z.B. C/C++ Code benutzt.
Schritt 1 wäre alle Abhängigkeit zu aktualisieren. Dazu gehört Python, der Interpreter, die Python Module und auch Firefox, welchen du über Selenium benutzt. Eventuell sind die Memory Leaks bekannte Fehler, die bereits behoben wurden.
Bei Schritt 2 solltest du die Objekte von den Abhängigkeiten überprüfen. Musst du die Objekte eventuell selber aufrufen? Gibt es eine dispose, free oder clean Methode?
Auch wenn du damit nicht das Problem findest, könntest du dein Programm regelmäßig, z.B. täglich, neustarten lassen. Das Betriebssystem kümmert sich beim Beenden des Programmes um die Leaks und gibt den Speicher frei. Damit kannst du ein unvorhersehbares Verhalten ausschließen, wenn der RAM irgendwann voll ist.
ich starte das script immer ueber die konsole mit python3 und da hab ich die neuste Version und praw, selenium auch.
Im Task Manager liegt das Problem nicht bei firefox oder WebExtensions, sondern bei einen der zwei Web Content Anwendung. Ich weiss nicht genau was sie mit Schritt 2 genau meinen.
koennte es daran liegen das ich das script mit dem starte?
options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
Ich hab die Prozesse im Task Manager ueber mehrere Tage verglichen und firefox und WebExtensions bleiben von der memory Nutzung gleich, dann hab Ich noch zwei mal Web Content und nur eins von beiden steigt ueber mehrere tage, das andere bleibt gleich.