Tom: Zusammenbruch von Internetseiten

Beitrag lesen

Hello,

Schlechte Programmierung.
Dazu gehören insbesondere Lost Handles bie Datei- und Datenbankzugriffen, auch nicht aufgelöste Resultsets.

Kannst du mir das bitte genauer erklären:
Was sind "lost handles"?
was sind "resultsets"?

Ein Filehandle erhält der Prozess, wenn er z.B. mit fopen() (C, PHP, ...) oder reset() (bei Pascal) eines angefordert hat. Hinter diesem handle versteckt sich ein Objekt. Alle Methoden, z.B. fread(), blockread() (bei Pascal) wissen, wie sie mit einem Handle bei einem entsprechnden Befehl umzugehen haben, welche Teilfunktion da nun genau ausgeführt werden muss. Das ist die frühe Objektorientierung noch aus der Assemblerzeit.

Das OS hat nur eine begrenzte Anzahl von Handles zur Verfüng, da jedes Speicherplatz benötigt.

Wenn man jetzt z.B. in einer Funktion

function so_ist_es_falsch($dateiname)
{
  $filehandle = fopen($dateiname, 'r+b');
  $dateiinhalt = fread($fielhandle, filesize($dateiname);

echo $dateiinhalt;
}

ein Filehandle beschafft hat, und vergisst, die Datei wieder zu schließen, dann wird das Handle nicht zurückgegeben ans OS und gammelt bis zur Zwangstrenung am Scriptende vor sich hin.
Nach dem Ende der Funktion kommt man auch nicht mehr heran, da die Variable $filehandle ja seine Lebensdauer am Funktionsende beendet, nicht aber das Handle, das sie bezeichnet hat.

Es ist also verloren.

So ähnlich ist das Bei Datenbankabfragen.

Mit

$resulthandle = mysql_query()

wird automatisch ein Speicherbereich belegt und auf diesen ein Handle zurückgegeben. Wenn man nun vergisst, nach Gebrauch des Ergebnisses

mysql_free_result($resulthandle)

aufzurufen, und überschreibt die Variable einfach in einem nächsten Verwendungsfall mit einem neuen Handle, dann ist das alte auch verloren, und damit der Speicherbereich.

Wenn viele so arbeiten, muss das OS oder das DBMS irgendwann anfangen zu swapen. Das ist genau der Punkt, an dem das System schlagartig langsam wird.

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau