При обращении к странице может плодиться сразу несколько httpd?

Vadya

Новичок
При обращении к странице может плодиться сразу несколько httpd?

Есть проблема, простенькие пхп скрипты убивают слабенький сервер, сжирая всю оперативку.
Может ли быть такое: при запросе страницы плодится несколько httpd и тем самым увеличивает объем потребляемой памяти.
Нормально ли что все httpd процессы едят не менее чем 10000К?

Вот сама страница, к которой обращаются:
<img src="img.php?id=1"> <img src="img.php?id=2"> ... <img src="img.php?id=10">
А вот скрипт img.php:
<?php
header ('Content-type: image/jpeg');
$im = ImageCreateFromJPEG ('/home/vadya/data/www/img/'.$_GET[id].'.jpg'); // здесь путь к картинке, за пределами папки домена (картинки не более 10 кб)
...
ImageJpeg ($im,null,100);
ImageDestroy($im);
?>

Apache 1.3
FreeBSD 6
Очень нужна ваша помощь!
 

Активист

Активист
Команда форума
Vadya
Не нужно делать "миниатюры" каждому пользователю, нужно сделать ее один раз, сохранить, а потом отдавать сохраненную копию.

Например:

<?php
if (!file_exists('/home/vadya/data/www/img/humb/'.(int)$_GET[id].'.jpg') {
$im = ImageCreateFromJPEG ('/home/vadya/data/www/img/'.$_GET[id].'.jpg'); // здесь путь к картинке, за пределами папки домена (картинки не более 10 кб)
...
ImageJpeg ($im,"/home/vadya/data/www/img/".(int)$_GET[id].".jpg",100);
ImageDestroy($im);
}

header ('Content-type: image/jpeg');
echo file_gets_content("/home/vadya/data/www/img/humb/".(int)$_GET[id].".jpg");
exit();
?>
 

Vadya

Новичок
Спасибо, а по поводу моей реализации что скажете, может плодится из за этого несколько процессов httpd при заходе на страницу?
 

fixxxer

К.О.
Партнер клуба
ну смотри что ты делаешь
сначала открываешь jpeg и распаковываешь его в память. это если например картинка 1200x800 24 бита, то получаем в памяти в чистом представлении 1200*800*24/8 = 2 880 000, с учетом еще канала на прозрачность и внутренних структур это все 4 метра. потом ты ее ресайзишь, это еще одна такая структура + буферы для компрессии. на 6 метров на один скрипт потянет. это не считая того что ты еще жрешь и процессор. а еще небось нет никакого фронтенда и наружу торчит апач, и буферизация вывода отключена, так что вся эта радость висит в памяти пока там модемные и gprs-ные юзеры выкачивают по полбайта. а каждый такой юзер это целиком апач + мод пхп + твоя радость.

кстати так как посоветовал активист тоже не очень хорошо (хотя по сравнению с твом изначальным вариантом конечно небо и земля - но все же), ибо во первых при двух параллельных запросах на одну и ту же картинку будет генериться два раза, во вторых все равно дергаем php вместо того чтобы отдать статику. лучше по отсутствию картинки завернуть на генератор реврайтом, а если уже генерится то просто подождать. а еще лучше вообще заранее сгенерировать.
 

Vadya

Новичок
Понятно, буду отдавать статику.

Но не удержался от эксперимента:
в файл img.php (запрашивается 10 раз с одной страницы) прописал только include('путь к статическим картинкам по 5-10кб.');
все равно httpd плодятся как будто по несколько штук на каждого посетителя и ресурсы жрут также - по 10мб каждый. Просто теперь уже интересно понять, почему у меня посещаемость в много меньше, чем процессов httpd (в настройках апача поставил MaxRequestsPerChild=1)
 

Активист

Активист
Команда форума
fixxxer
Я предложил вариант, и указал на правильное решение.

Самый правильный вариант, это делать ресайзы при добавлении картинки, ложить в папки и только потом, создавать запись в БД, отдавать уже статические картинки - с прямыми адресами до них.

А "заморочки" с mod_rewrite и т.п., это для ТС уже следующий этап.

Vadya
MaxRequestsPerChild=1
Как ты понимаешь, что это делает?

Maximum Request Per One Child ?
Максимальное количество запросов, который может обрабатывать один потомок.

Сейчас на 100 паралельно обрабатывающих запросов будет 100 потомков.

Установи это в 15-30, и количество процессов у тебя уменьшиться, это раз.

Количество процессов у тебя всегда будет не менее установленного в директиве (не помню какой, но по умолчанию - 8) и не более максимального количества паралельно обрабатыващихся запросов (ограничиваясь лишь соответсвующей директиве в апаче)
 

Vadya

Новичок
Активист, спасибо за совет, поставил на 30.

----
Вырезано. Всем спасибо. Разобрался.
----
 
Сверху