- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
т.е. по вашему если апатч удалить, то у вас в консоле PHP перестанет работать?
А где про это? Вы не поняли суть. Про апач только это
Если апач
То: на каждый запрос - дочерний процесс, с вытекающими... Про 2 других варианта, не скажу, но тоже вроде как нгинкс не обгоняют.
Иными словами, если апач prefork, картинка в top будет похожая,
только вместо зрз-азь будут процессы апача.
Еще раз суть эксперимента.
Запустили зрз скрипт из консоли. Код в цитируемом сообщении есть. Прочитать 56мб джисон (46943 шин) и декодировать.
~ 200 мс
запустили ab -n 15000 -c 100 -H "User-Agent:Mozilla" http://p.php/ Имитируем нагрузку.
И пока оно 15000 запросов делает, пускаем тот же скрипт из консоли
Миллисекунд понадобилось более чем в 2 раза.
По моему, весьма наглядно.
Зы: если смущает , http://p.php/ то все просто. локальная зона php обрабатывается. httpd на этой машине дизаблед
А что я получу двойное ускорение или замедление в зависимости от типа веб-сервера, я ведь не про отдачу клиенту результата и не о ресурсах, я о том моменте где включается в работу интерпретатор и почему один и тот же код он может обрабатывать по-разному, ладно я не хочу спорить, и там и там есть правда я понял, я получил ответ на свой вопрос :), пусть меня и обманывают, мне ОК :)
Начали за здравие, как говориться... Вы и есть клиент! Вы клиент передаёте данные вебсерверу, он передаёт их PHP, PHP обрабатывает и отдаёт вебсерверу, а потом возвращает клиенту т.е. вам результат. И тут проблему НЕ в PHP.
А где про это? Вы не поняли суть. Про апач только это
Вы тут доказываете, что нагрузка процессора влияет на выполнение PHP?! Серьёзно?
Я думаю лучше это включить архивирование 10 ГБ файла, а потом уже делать проверку PHP из консоле. Так же "интересны" результаты :)
Если отвечать на прямой вопрос про единичный скрипт, выполняющийся 5сек (а не выдумывать условия типа ab -c 300 - долбежка 300 запросами одновременно по этому скрипту), то да почти без разницы будет это nginx или apache.
На скорость выполнения (повторяю, именно в этом случае - один запуск долгого 5-секундного скрипта) гораздо сильней влияет версия php, настройки php.ini (наличие opcache, обработка ошибок, модули подключенные и т.п.), скорость процессора (не мощность, не производительность, а именно single-thread скорость, зависящая от архитектуры/свежести ядер cpu и тактовой частоты), чем микро-разница между apache и nginx.
Также стоит учесть, что тот же apache с php может взаимодействовать ну очень по-разному (mod_php или cgi например). И то, что если выключить в apache поиск и выполнение .htaccess, то он не так уж радикально будет отставать от nginx (ну может кроме занимаемой памяти).
Плюс очень сильное влияние оказывает работа opcache в php. Поэтому без подробного сравнения всех конфигов нельзя ничего однозначно утверждать. Я вот даже когда делал тесты ниже столкнулся с загадкой почему под nginx/php-fpm скрипт выполнялся примерно на 100мс дольше... оказалось скрипт довольно древний и под php7.4 выдавал кучу deprecated сообщений в процессе выполнения. Когда заглушил эти ошибки в php.ini, результат пришел в норму.
Так что нельзя вот так безапеляционно заявлять, что nginx быстрей apache. Очень много нюансов и очень зависит от конкретных задач.
Итак:
Я с ходу не нашел на столько медленного и тяжелого скрипта, взял вот этот:
http://www.php-benchmark-script.com
Запускал у себя на домашнем роутере, а не где-то на сервере в инете, где постоянно бы влияли на результат соседи.
Он в это время совершенно ничего не делал и можно считать замер более-менее точным.
Проц E5-1630v4 с постоянной частотой 3.8-4.0ггц (не в спящем режиме каком-то).
Везде выставил одинаковую версию php 7.4 и одинаковые настройки php.ini и делаю 3 прохода подряд.
1) Запускаю bench.php из коммандной строки, т.е. под php-cli без включенного opcache в php.ini
Итого отправная точка: ~0.585сек рисует результат сам скрипт и около 0.59сек итого рисует нам time
2) Opcache в php-cli - это конечно не тоже самое, когда php запущен все время (php-fpm или mod_php например) и держит в памяти опкоды. Однако даже на время выполнения одного скрипта он может немного повлиять на результат.
Запускаю тоже самое, с opcache.enable_cli=1 в php.ini
Что изменилось: ~0.515сек (0.07сек выигрыш - 13%) и около 0.53сек итого по результату time
Т.е. однозначно, включение opcache даже в cli дает прирост. Какой именно - очень очень сильно зависит от самого скрипта и от их количества.
Естественно под веб-сервером, если php правильно настроен и запущен всегда с выделенным достаточным объемом памяти под opcache, и если скрипт будет не один, а к примеру wordpress с кучей php скриптов - результат вкл/выкл opcache может быть сильно более заметен.
И там еще будет влияние так называемого "холодного старта", т.е. в первый запуск будет чуть медленней, а потом уже чисто из opcache выполняться может заметно шустрей.
В нашем случае скрипт единичный и холодный старт практически нивелируется, но всеж перед проходом серией из 3х запросов я делаю перезапуск php-сервера.
3) nginx -> apache/mod_php
В итоге видим примерно те же 0.525-0.530сек по результату скачивания скрипта wget'ом с веб-сервера.
+/- в пределах погрешности, хотя и самую кроху шустрей, чем из под cli - ведь opcache тут уже работает полноценно как и должен.
Повторяю, на большем количестве скриптов результат был бы более заметен (не в пользу php-cli).
4) nginx -> php-fpm
Снова как видим все в пределах погрешности измерений ~0.525сек
Так какой правильный вывод? Именно в этом случае разницы не будет - хоть 0.5сек, хоть 5сек скрипт будет выполняться +/- одинаково не только из под apache или nginx, но даже из под php-cli (только если opcache.enable_cli будет выключен, то получится немного заметнее медленней).
Но! Не путаем это с реальными сайтами. В который раз повторюсь, там где не одиночный долгий скрипт, а много-много php файлов - там работа opcache будет куда более заметна. И в зависимости от нагрузки (количество запросов в секунду прилетающих на сайт) уже может вылезти различие между apache и nginx. Но это не касается обычных мелких сайтов, на которых и 1 запроса в секунду не приходит. Для них важней иметь пусть меньшее количество, но более высокочастотных ядер процессора. У сайтов же с большим траффиком все не так, не нужно их приплетать куда не следует. Да, там по итогу меньше нагрузка и больше скорость (суммарная на всех, а не у каждого отдельно взятого запроса) может получиться на 16-ядерном 2ггц процессоре, чем на 4-ядерном 4ггц. И какие-то минимальные (в обычных ситуациях) преимущества nginx могут также всплыть более ярко.
Еще раз - с уверенностью можно сказать, что один 5-секундный скрипт будет выполняться одинаково и под apache и под nginx. При условии конечно же одинаковых настроек php и если под apache совсем уж плохо все не настроено.
Вы тут доказываете, что нагрузка процессора влияет на выполнение PHP?! Серьёзно?
Про загрузку проца, вроде ничего не говорил. Посыл больше к этому:
timo-71 #:
В 1 случае 2 активных процесса, во втором 59.
Каждый хтмл, имеет, пусть 30 цсс, джиэс, картинок, шрифтов и т.д. prefork => каждый запрос - процесс. В отличии от нгинкс Пусть 100 одновременных запросов. Спрогнозируйте load average
Сейчас, еще раз пустил. Как то так
Я думаю лучше это включить архивирование 10 ГБ файла, а потом уже делать проверку PHP из консоле.
Немного времени есть. Еще эксперимент. Та же метода. Грузим, смотрим время исполнения. Только 15000 запросов к сайту python+aiohttp
htop
Совсем немного процессов. 2 сокета + нгинкс воркеры.
Ну да, так и записано.
Результат выполнения консольного пыха
Разница есть, но не в 2 раза, как когда засрал машину php-fpm процессами.
Вы тут доказываете, что нагрузка процессора влияет на выполнение PHP?! Серьёзно?
Тут вообще какая-то дикость происходит 😀
Про загрузку проца, вроде ничего не говорил. Посыл больше к этому:
Но в "экспериментах", вы просто грузите систему (процессор, диск, память) с одной стороны... и с другой запускаете скрипт, которому не предоставили ресурсы максимально быстро (как если бы это было при минимальной нагрузке).
php компилируется сервером и зависит только от силы производительности сервера, javascript компилируется на компьютере пользователя и зависит от скорости железа пользователя.
Интерпретируются.
Нет смысла, очереди процессов не будет.
В 8 потоков с pbzip2, тогда будет и PHP-скрипт точно уж попадет в очередь 👍 Хотя, хватит даже 4, если 4 физических ядра, а остальное HT.