Как разгрузить процессор?

DeMx

Новичок
Как разгрузить процессор?

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

Так вот, эта операция довольно дорого обходится - свыше 20% нагрузки на CPU у хостера (в течение часа).

Возможно ли как-то облегчить это дело, не урезая функционал и объем загружаемого архива?
 

Wicked

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

DeMx

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

Жрет именно процессор, как передал хостер.

Масштабирование примерно такое:
http://www.nomorepasting.com/getpaste.php?pasteid=27251
или такое:
http://www.nomorepasting.com/getpaste.php?pasteid=27252

В первом варианте сохраняются пропорции, во втором - картика получается квадратной.
 

Alexandre

PHPПенсионер
Так вот, эта операция довольно дорого обходится - свыше 20% нагрузки на CPU у хостера
а сколько еще хостов крутится на данном сервере - об этом хостер не упомянул?
20% - это не такая большая нагрузка, зависит от кол-во ядер/процесоров
а что говорит топ?
 

DiMA

php.spb.ru
Команда форума
ресайз - это очень ресурсоемкая операция, когда фоток много, чему ты удивляешься? пхп здесь не виноват

можно применять разные хаки: например 100% уменьшить до 50%, а потом эти 50% еще на 50% (получится 100, 50 и 25 %%)

для размазывания пиковой нагрзуки применяй очереди
 

DeMx

Новичок
Alexandre, такой информацией не владею. Да и какая разница, сообщили много - значит много для них. %)

DiMA, не понял про хак. :)

А если, скажем, sleep() на пару секунд делать после каждого ресайза, это может помочь?

А что там с очередями, я не в курсе. Где почитать?
 

DiMA

php.spb.ru
Команда форума
$x50=resize($origin, $width/2);
$x25=resize($origin, $width/4); неверно
$x25=resize($x50, $width/2); верно

нигде ничего пока читать не нужно, а подумать над идеей

все задачи по конвертации кидаешь в очередь (memcache, SQL таблица, файл и т.д.)

по крону каждые 5 секунд запускаешь скрипт (если тот успел завершится с предыдущего запуска) и разгребаешь очередь

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

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

DeMx

Новичок
Насчет очереди идея правильная, уже думал об этом. Скорей всего, к этому и приду, но это не быстрое решение, конечно.

А ресайз такой очередный разве эффективен? Разве не будет только больше грузить?
 

DiMA

php.spb.ru
Команда форума
ну че за тупой вопрос? Чем меньше фотка, подвергающаяся ресайзу, тем быстрее будет выполнен ресайз! Быстрее чтение с диска. Меньше памяти. Меньше циклы по проходу.

Тут можно задуматься тока о качестве, но никаких проблем не вижу (если только не заниматься ерундой типа: что лучше 100% -> 95% -> 95% или сразу 100%->92%)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Еще, если жмутся крупные фото ресемплингом, имеет смысл сначала их просто доресайзить вполовину, потом уже ресемплить.
 

Активист

Активист
Команда форума
1. Бежать от этого хостера.

Твои та какие проблемы? Мне не понятно. У меня на сервере когда клиенты ресайзят фотки, заливая их архивами (аналогично твоему методу - архив по Н фоток), CPU поднимается до 70-80%, при этом, скрипт отрабатывает секунд 2-10 (ресайзят они фотки с фотика 3000x2000). Что я им скажу?

Ребята, я жлоб, мне нужно еще клиентов этак сто, хостить сайты с посещениями 100 уников в сутки, а твой проект ест мой и так дохленький ЦПУ на базе селерона.

Пусть либо твой хостер ограничивает тебе ЦПУ средствами ОС, или беги от туда. Возми VDS, тоже выход.

PS. При 70% ЦПУ при ресайзе сервер не испытывает ни каких сложностей, отдает контент быстро. Вообще не понятно, почему процессор в понимании твоего хостера должен быть в 80% IDLE ? Прозапас что-ли процессорное время тырят?

-~{}~ 23.06.09 22:50:

>жно применять разные хаки: например 100% уменьшить до 50%,
>а потом эти 50% еще на 50% (получится 100, 50 и 25 %%)

Тоже не понятно. В итоге процессорного времени будет израсходовано столько же или даже больше (открывание, чтение, сброс в буфер). Типа

Задача из ряда: сколько килоджоулей энергии затратит человек в двух случаях.

"Расстояние в 1 км из точки а в точку б со скоростью 5 км в час"
"Расстояние в 1 км из точки в точку б человек пройдет поэтапно - сначала пойдет со скоростью 4 км в час, отдохнет, пройтет со скоростью 2 км/в час, а в конце пути доползет со скоростью 0.2 км/час"

(имхо - во втором случае больше)

-~{}~ 23.06.09 22:54:

> все задачи по конвертации кидаешь в очередь
Не слишком ли жирно для "иногда ресайзить архив фоток"
 

baev

‹°°¬•
Команда форума
сначала пойдет со скоростью 4 км в час, отдохнет, пройтет со скоростью 2 км/в час, а в конце пути доползет со скоростью 0.2 км/час"
— неверная аналогия.

При поэтапном ресайзе будет наподобие:
«сначала пойдет со скоростью 4 км в час, отдохнет "по-большому"; потеряв пару килограмм, ускорится до 6 км/ч — потому как налегке…»
 

Активист

Активист
Команда форума
baev
Ну не знаю, не знаю, как бенчмарка на ЦПУ делать не имею, но решение в дроблении действий при ресайзе из ряда

Что тяжелее, килограмм гвоздей или килограмм ваты.

Надо посмотреть сишный исхоник ГД и проанализировать функции.
 

Wicked

Новичок
Активист
ты если бы разметку на дороге рисовал, тоже банку бы на месте стоять оставил? :)
 

DiMA

php.spb.ru
Команда форума
> Тоже не понятно. В итоге процессорного времени будет израсходовано столько же или даже больше (открывание, чтение, сброс в буфер)

Этот метод хорош, если нужно получить ресайзы на 50 и 25%%. Если только на 25% - то без промежуточных ресайзов. Че не ясного?

Ты ресайзишь полторы фотки? Не ходи сюды. Туды ходи. У меня задачи на ресайз сотен тысяч фоток за раз, что разгребается за полдня под полной нагрзукой.
 

Активист

Активист
Команда форума
DiMA
Теперь доперло)))) Просто изначально я понял как - одну фотку один ресайз.
 
Сверху