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

  • Автор темы Автор темы DeMx
  • Дата начала Дата начала

DeMx

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

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

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

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

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

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

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

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

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

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

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

А что там с очередями, я не в курсе. Где почитать?
 
$x50=resize($origin, $width/2);
$x25=resize($origin, $width/4); неверно
$x25=resize($x50, $width/2); верно

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

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

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

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

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

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

Тут можно задуматься тока о качестве, но никаких проблем не вижу (если только не заниматься ерундой типа: что лучше 100% -> 95% -> 95% или сразу 100%->92%)
 
Еще, если жмутся крупные фото ресемплингом, имеет смысл сначала их просто доресайзить вполовину, потом уже ресемплить.
 
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:

> все задачи по конвертации кидаешь в очередь
Не слишком ли жирно для "иногда ресайзить архив фоток"
 
сначала пойдет со скоростью 4 км в час, отдохнет, пройтет со скоростью 2 км/в час, а в конце пути доползет со скоростью 0.2 км/час"
— неверная аналогия.

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

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

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

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

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