Hallo zusammen,
ich bin neu hier und habe ein Problem mit einem PHP-Skript. Es handelt sich um ein Skript für eine Community-Seite, welches Bilder verkleinern und drehen soll. Für die Bildverarbeitung verwende ich Imagick.
Bei Lasttests mit JMeter habe ich festgestellt, dass der Arbeitsspeicher (24GB) des Apache-Servers nach einiger Zeit voll läuft. Offenbar steht irgendetwas im Arbeitsspeicher weiter zur Verfügung nachdem das Skript schon beendet ist.
Ich benutze Imagick zum ersten Mal und weiß nicht ob dabei Memory Leaks entstehen können. Eventuell liegt es auch am Testplan und die Sessions werden zu lange im Arbeitsspeicher gehalten.
Testskript:
Für alle Testverbindungen wird keepalive verwendet (bin nicht sicher ob das wichtig ist).
PHP-Skript:
Ich wäre für Eure Hilfe echt dankbar. Bin nämlich mittlerweile mit meinem Latein am Ende.
Vielen Dank im Voraus.
Gruß Christian
ich bin neu hier und habe ein Problem mit einem PHP-Skript. Es handelt sich um ein Skript für eine Community-Seite, welches Bilder verkleinern und drehen soll. Für die Bildverarbeitung verwende ich Imagick.
Bei Lasttests mit JMeter habe ich festgestellt, dass der Arbeitsspeicher (24GB) des Apache-Servers nach einiger Zeit voll läuft. Offenbar steht irgendetwas im Arbeitsspeicher weiter zur Verfügung nachdem das Skript schon beendet ist.
Ich benutze Imagick zum ersten Mal und weiß nicht ob dabei Memory Leaks entstehen können. Eventuell liegt es auch am Testplan und die Sessions werden zu lange im Arbeitsspeicher gehalten.
Testskript:
Code:
Threadgroup ->Cookie Manager ->Bilddatei wird hochgeladen ->Bilddatei wird verkleinert und gedreht
PHP-Skript:
PHP-Code:
$db = @ mysql_connect ("localhost", "root", "test")
or die ('Konnte keine Verbindung zur Datenbank herstellen');
$db_select = @ mysql_select_db ("test");
@session_start();
//Max. Abma¤e laden
$imagick = new Imagick($file);
//Imagedaten holen
$size = $imagick->getImageGeometry();
$width = intval($size['width']);
$height = intval($size['height']);
//Image auf maximale Gr?¤e strecken/verkleinern
$rheight = $rwidth * $height / $width;
//Resampelte Version erstellen
$newname = $path.$id."_0.".$ext;
$smaller = $path.$id."_0_sm.".$ext;
$imagick->thumbnailImage($rwidth, $rheight);
$imagick->writeImage($newname);
$imagick->destroy();
//Thumbnail erstellen
$tmbname = $path.$id.'_tmb.jpg';
$tmb = new Imagick();
$tmb->readImage($newname);
$rotateimg = $tmb->clone();
$tmb->stripImage();
$tmbwidth = $width * 131 / $height;
$tmb->thumbnailImage($tmbwidth, 131);
$tmb->writeImage($tmbname);
$tmb->destroy();
//Gedrehte Versionen erstellen
$rotateimg->rotateImage(new ImagickPixel(), 270);
$rotateimg->writeImage($path.$id."_90.".$ext);
$rotateimg->rotateImage(new ImagickPixel(), 270);
$rotateimg->writeImage($path.$id."_180.".$ext);
$rotateimg->rotateImage(new ImagickPixel(), 270);
$rotateimg->writeImage($path.$id."_270.".$ext);
$rotateimg->destroy();
$_SESSION['own'][] = array($id, $width, $height, $rwidth, $rheight);
unset($imagick, $thumbnail, $rotateimg, $size);
mysql_close($db);
exit();
Vielen Dank im Voraus.
Gruß Christian
Kommentar