Cannot allocate memory

ВS
На сайте с 03.12.2009
Offline
52
3875

Сервер падает, выдает ошибку 500, в логах сервера

Cannot allocate memory: couldn't create child process

судя по всему не хватает оперативной памяти )

логически могу предположить что на сайт заходят пользователи и активно загружают изображения, после чего происходит казус.

изображения обрабатываются при загрузке и хранятся на сервере.

Подскажите решение проблемы,

- можно ли просчитать максимально возможное количество одновременно обрабатываемых изображений

- можно ли как-либо ограничить количество одновременно загружаемых фотографий во время выполнения скрипта или поставить в очередь на обработку?

- другие варианты решения ?

IL
На сайте с 20.04.2007
Offline
435
#1
Виктор Stoltz:
логически могу предположить что на сайт заходят пользователи и активно загружают изображения, после чего происходит казус.

изображения обрабатываются при загрузке и хранятся на сервере.

1. Какой именно скрипт падает с ошибкой? Если обработчик изображений - предположение, видимо, верное. Дело, скорее всего, не в количестве одновременно обрабатываемых изображений, а в объёме памяти, необходимой для обработки одного большого изображения (попробуйте загрузить ночью/утром - когда посещаемость невелика большую фотографию)

2. Увеличить лимит памяти в .htaccess Примерно так (проверить, сработало ли можно, функцией ini_get или ini_get_all.. или phpinfo()):

php_value memory_limit 256M

3. очередь обработки, конечно, можно реализовать.. но если у скрипта не будет хватать памяти на обработку одного изображения - не поможет.

p.s. речь про shared хостинг, или выделенный/виртуальный сервер?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
ВS
На сайте с 03.12.2009
Offline
52
#2

1. Текст ошибки следующий:

Cannot allocate memory: couldn't create child process: 12: php

Cannot allocate memory: couldn't spawn child process: /var/www/yuser/data/php-bin/php

и конкретно по страницам (чаще главная, но и внутренние попадаются):

Cannot allocate memory: couldn't create child process: 12: php, referer: http://xxx.com/page/name

Cannot allocate memory: couldn't spawn child process: /var/www/yuser/data/php-bin/php, referer: http://xxx.com/page/name

т.е. не конкретно обработчик изображений а сами страницы. Я предположил что память занята была обработчиком, после чего стали выпадать страницы.

2. Значение memory_limit ограничивает на один процесс или на все запущенные? Как подойти к подсчету - к примеру 2 одновременно загружаемых изображения займут по 250мб., а одно 500 или лучше разбить на 10 по 50? и вот к примеру поставил ограничение 50 Мб, а при обработке изображения оказалось что требуется больше - в таком случае просто не обработается картинка или весь сервер ляжет? и как просчитать сколько необходимо памяти на одно изображение?

Также хотелось бы учесть что пользователи ресурса не входят в категорию продвинутых пользователй и скорее загружают фотографии на ресур прямо с фотоаппарата, расширение которых обычно превышает 2500*2000

сейчас это выделеyный сервер с оперативной памятью 1Гб. регулярно в субботу вечером ложится из-за того что пользователи начинают грузить фотографии.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий