Подскажите, где можно почитать про настройку конфигурации сервера Apache на Linux, на котором запуск от имени админа (кроном или вручную) высоконагруженного скрипта php (например, содержащего вызов программы ffmpeg для перекодировки видеофайла, или индексацию поиска, или операции перевода контента на другой язык с использованием внешних сервисов и т.п.) не приводило бы к блокировке запуска других скриптов?
Комментарии
Скорее всего, то что вы считаете блокировкой - совсем не блокировка.
Ээээ (сверился с календарём) вроде бы многозадочность уже открыли и обратно не закрывали.
Многопоточность поддерживается apache с версии 2.2, скорей всего Вас интересует многопоточность в PHP
вот, это уже ближе к теме, спасибо!
а не подскажите, как надо запускать "командные строки" в цикле, чтобы следующий запуск начался только после отработки предыдущего? а то создается впечатление, что, например, при обработке группы видеофайлов перекодировщики ffmpeg запускаются "сразу" до "тупого" переполнения памяти или истощения какого-либо важного для php или ОС ресурса и система еле дышит, пока всех их закончит...
а как быть, если есть скрипт, выполняющий в цикле много последовательных запросов к БД, обработку данных, апгрейд БД, и если его запускать из браузера, то все висит (браузер, по крайней мере), а хотелось бы чтобы он выполнялся в фоне с небольшим приоритетом, не мешая остальным. Запустить его в кроне? Есть ли какая-нибудь особенность этого запуска или можно просто в расписании прописать этот скрипт и дальше все пойдет само? А какой у этой задачи будет приоритет? Или для php такой термин не применим?
Пхп по умолчанию синхронный и однопоточный, поэтому цикл всегда проходит последовательно. Если у вас при этом другие задачи тормозят на сервере, то у вас скорее всего слабый сервер. В первую очередь нужно обратить на количество ядер и их тактовую частоту.
PHP может выполнять скрипты из командной строки, скрипты, при этом, они должны быть на это рассчитаны - там другое несколько окружение. Можно использовать nice/ionice для управления приоритетами выполнения. Конечно, это должен быть процесс выполняющийся в php-cli, а не страничка дёрнутая через какой-нить wget, т.к. приоритет будет задан для wget, а не для генерации этой странички. В частности, можно запускать такие скрипты и через крон.
Есть масса методов, обеспечивающих последовательное выполнение задач. В простейшем случае, можно написать свой скрипт, который проверяет, что он запущен только в одном экземпляре(блокировка через базу, блокировка через flock и.т.п.), и запускает необходимые задачи(их очередь можно строить в базе, например), и выполнять его по крону.
Ffmpeg имеет опцию, позволяющую выделять ему определённое количество ядер(по умолчанию используются все), этим можно пользоваться, чтобы ограничить нагрузку. Вообще, конвертация видео, процесс очень ресурсоёмкий. Если у вас какая-то виртуалка с одним/двумя ядрами, конечно всё будет тормозить.
Про балансировку параллельных задач не подскажу не сталкивался, все что касается оптимизации загрузки системы imho хорошо делать на уровне системного ПО, а значит нужен толковый сисадмин. Всё таки многие вопросы с системным ПО требует глубоких знаний и практических умений в области системного (сервер) а не прикладного (php) ПО.
Что касается высоконагруженных серверов - это вы действительно форумом ошиблись.
Для начала нужно определиться с задачами. Обработка видео? Ок, при значимых объёмах это делается отдельно от веб-сервера. Перелопатить БД? Пардон, но тут что-то не то с архитектурой, такие задачи возникают в случае перетряхивания инфраструктуры, а не ежедневно. Высоконагруженные БД? Опять же - это вынос на отдельный сервер, там свои сорта оптимизаций.
Всё это не решается в рамках бла-бла трёпа на форуме, нужна как минимум чёткая постановка задачи, но скорее найм профильных спецов за хорошие деньги (highload штука недешёвая).
Есть 3 режима работы апачи mpm_event_module, mpm_prefork_module, apache2-mpm-worker
читать здесь apache2-mpm-worker мне кажется лучше всех.
P.S. помойму там еще есть переменные для настройки.
А как это относится к вопросу? Думаете у автора prefork, и максимум в пару обработчиков установлен? Вряд-ли. А иначе, ничего похожего на блокировку тут не получить. И никакой mpm апача не поможет, если просто не хватает вычислительных ресурсов, которые скушал ffmpeg по соседству запущенный...
Кстати, самый продвинутый это mpm_event, но и с ним, и с mpm_worker, php будет работать только в режиме fastcgi (php-fpm, или через mod_fcgid). А практически в любом случае работы c php, через fastcgi, будет разумнее использовать любой другой, более лёгкий веб сервер, а не apache.