Столкнулся с такой проблемой, каждый день на серваке происходит утечка памяти (всего 4 ГБ), подозрение пало на скрипт по уменьшению картинок (все превьюшки формирует на лету). Решил переделать сайт, чтоб не обрабатывать каждый раз картинку, сохранить все превью в файл. После выполнения скрипта по уменьшению всех картинок на сервере снова закончилась память (картинок около 5000, в среднем по 50 Кб). Что это может быть? Кривой скрипт или криво настроен сервер? Код функции которая уменьшает картинку и сохраняет в файл: PHP: <? function resize_image($filename, $dest_file, $width_limit, $height_limit, $fixed_asp=0) { $image_src = @ImageCreateFromJpeg($filename); if ($image_src==false) $image_src = @imagecreatefrompng($filename); if ($image_src==false) $image_src = @imagecreatefromgif($filename); if ($image_src==false) return false; //$width_limit=$preview_image_width; $height_limit=$preview_image_height; list($src_width, $src_height) = getimagesize($filename); $img_asp = $src_width / $src_height; // обрезаем изображение if ($fixed_asp!=0) { if ($img_asp > $fixed_asp) {// зашкал по ширине $image_dest = imagecreatetruecolor($src_height*$fixed_asp, $src_height); $side_crop = ($src_width - $src_height*$fixed_asp) / 2; // кол-во пикселей для обрезки по сторонам imagecopyresampled($image_dest, $image_src, 0, 0, $side_crop, 0, $src_height*$fixed_asp, $src_height, $src_height*$fixed_asp, $src_height); $src_width = $src_height*$fixed_asp; // для дальнейшего использования } else {// зашкал по высоте $image_dest = imagecreatetruecolor($src_width, $src_width / $fixed_asp); $side_crop = ($src_height - $src_width / $fixed_asp) / 2; // кол-во пикселей для обрезки сверху imagecopyresampled($image_dest, $image_src, 0, 0, 0, $side_crop, $src_width, $src_width/$fixed_asp, $src_width, $src_width/$fixed_asp); $src_height = $src_width / $fixed_asp; // для дальнейшего использования } $image_src = $image_dest; $img_asp = $src_width / $src_height; } // подгоняем под границы $img_asp = $src_width / $src_height; $lim_asp = $width_limit / $height_limit; if ($img_asp >= $lim_asp && $src_width>$width_limit) { // если зашкаливает ширина $new_width = $width_limit; $new_height = $src_height * $new_width / $src_width; } else if ($img_asp < $lim_asp && $src_height>$height_limit) { // если зашкаливает высота $new_height = $height_limit; $new_width = $src_width * $new_height / $src_height; } else { // если ничего не зашкаливает $new_width = $src_width; $new_height = $src_height; } $image_dest = imagecreatetruecolor($new_width, $new_height); imagecopyresampled($image_dest, $image_src, 0, 0, 0, 0, $new_width, $new_height, $src_width, $src_height) or die ("Image resize failed"); ImageJpeg($image_dest,$dest_file,80) or die("Cannot output image to file"); // чистим память imagedestroy($image_src); imagedestroy($image_dest); return true; }?>
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny3 with Suhosin-Patch И всё таки не в картинках дело было... После отключения статистики (Spesta) утечка памяти прекратилась (см график), но позже (около 4 часов ночи) произошел резкий скачек в кэше (где-то на 1 Гб!) и такие скачки периодически наблюдаются. В чем может быть причина? Криво написаны скрипты?