LINUX.ORG.RU

Серверная связка для Django : потребление ресурсов, сравнение

 , , , ,


0

4

Привет!

Вот, например, есть php для него есть бэкенд-обработчик php-fpm со своими ТТХ (моделью многопоточности, потреблением памяти и т.д.)

А как обстоят дела с потреблением системных ресурсов в Django, в сравнении с php, какой есть бэкэнд для питоновских приложений, кроме Gunicorn? uwsgi как протокол где-нибудь определяет свои базовые потребности по системным ресурсам или все это зависит от конкретной реализации конкретного бэкэнда?

★★★★★

Последнее исправление: Twissel (всего исправлений: 1)

Если тебя действительно беспокоят ресурсы, откажись от динамических языков, иди в Го или Джаву

Dred ★★★★★
()
Ответ на: комментарий от Dred

Мне нужны, конкретные цифры, а не слова.

Twissel ★★★★★
() автор топика

Вот, например, есть python для него есть бэкенд-обработчик gunicorn со своими ТТХ (моделью многопоточности, потреблением памяти т т.д.)

А как обстоят дела с потреблением системных ресурсов в Laravel, в сравнении с python, какой есть бэкэнд для пэхэпэшных приложений, кроме php-fpm? fast cgi как протокол где-нибудь определяет свои базовые потребности по системным ресурсам или все это зависит от конкретной реализации конкретного бэкэнда?

anonymous
()

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

А если руки программиста таки из ануса, то можно и на ассемблере написать тормоза.

Goury ★★★★★
()
Ответ на: комментарий от Goury

Питон раз в десять больше ресурсов потребляет.

Кроме шуток?

Twissel ★★★★★
() автор топика

Есть одна тонкость с питоном, он постоянно висит в памяти и ждет запросов, тогда как php скрипт выполняется и завершается

То есть способ потребления ресурсов у них сильно различается.

Питон будучи постоянно в памяти должен быть более отзывчив на цепочках http запросов, он более эффективно поэтому должен работать с кешем и вообще с памятью

Ну и не надо забывать pypy тем, кому нужна скорость

ism ★★★
()
Последнее исправление: ism (всего исправлений: 4)
Ответ на: комментарий от ism

Спасибо, второй пост по делу.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от ism

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

Про цепочки запросов — просто ахинея сивой кобылы.

Goury ★★★★★
()

Скажу тебе как человек пишущий на python пару лет: Apache га*но. Самая оптимальная связка: django + nginx + gunicorn + postges Хочешь максимум производительности смотри в сторону tornado(Есть серьёзный минус - отладка его это сущий ужас и потеря волос гарантирована, но при прямых раках и удаче можно добиться серьёзной произволительности) Сравнения можешь сам нагуглить

q13
()
Ответ на: комментарий от Goury

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

Деведопс обходится без uwsgi и параметра --processes=16, интересно, можно ссылку на мануал ?

Про цепочки запросов — просто ахинея сивой кобылы.

Что быстрее, старт, стоп процесса или обращение к ждущему запущенному процессу ?

ism ★★★
()
Ответ на: комментарий от q13

сам то понял какой бред ты изложил. Учи матчасть

В чем я ошибся ? Питон не висит в памяти и не ждет запросов ?

ism ★★★
()
Ответ на: комментарий от ism

весит не питон а сервер (в данном случае это gunicorn) и он резервирует за собой память, но при этом эта память используется по требованию, а не по умолчанию

q13
()
Ответ на: комментарий от q13

gunicorn резервирует память но не запускает процессы питона ? Зачем такое извращение ? Особенно учитывая тормознутость питона

В uwsgi процесс питона сам решает сколько взять и когда собирать мусор

ism ★★★
()
Последнее исправление: ism (всего исправлений: 1)
Ответ на: комментарий от q13

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

От этого напрямую зависит скорость ответа http

Питон не может работать как php, у него гораздо большие накладные расходы на старт.

Судя по докам gunicorn работает также как и uwsgi,

https://gunicorn.org/

https://stackoverflow.com/questions/25834333/what-exactly-is-a-pre-fork-web-s...

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

Если связка php + nginx работает триггерно, nginx постоянно стартует и завершает php для каждого запроса, то связка nginx + uwsgi, gunicorn постоянно висит запущенной и передает друг другу запросы

php экономит память но не проц

python более гибок и эффективен в плане управления ресурсами, пусть и тормознут

ism ★★★
()
Последнее исправление: ism (всего исправлений: 3)

Есть один проект, небольшая аппликуха на джанге + постгресс. Для нужд «курортного бизнеса», жрет 50 Мб джанга, постгесс около 300 Мб, CPU вообще в простое 99% времени, и доход приносит на карибах, аля агрегатор номеров в гостиницах, и спа услуги. Т.ч. питон приложухи жрут 50-100 Мб, остальное всякие редисы и постгрессы, а это уже как настроишь... вцелом, нихера он не жрет, это софт, копейки, относительно стоимости разработки самого софта. К примеру, разработка этого софта обошлась заказчку от 5k зеленых, а платит за сервак $10 в месяц. Доход с сервака в районе 10-20 кило зеленых, точных данных, увы нет.

menangen ★★★★★
()
Ответ на: комментарий от menangen

К примеру, разработка этого софта обошлась заказчку от 5k зеленых

Upwork? Индусов там не поубавилось?

Понял, спасибо.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от q13

весит не питон а сервер (в данном случае это gunicorn) и он резервирует за собой память, но при этом эта память используется по требованию, а не по умолчанию

Представляю как было бы круто всю джангу инициализировать при каждом запросе. Красота и запросы по десять секунд.

oldstable
()
Ответ на: комментарий от ism

Судя по каменту — ты вообще не понимаешь что такое «процесс» и как оно работает

Goury ★★★★★
()
Ответ на: комментарий от menangen

А моя джанга жрёт по 300-500 метров на процесс.
Потому что я там картинки генерю динамично.

Но сервер не жалуется у него ещё много и дефицита не наблюдается.

Goury ★★★★★
()
Ответ на: комментарий от oldstable

Вся моя джанга компилится на одном ядре интел атома за полторы секунды, не преувеличивай

Goury ★★★★★
()
Ответ на: комментарий от q13

скажу как человек, который пишет на python с 2009 года. django говно, tornado мертв, а ты долбоеб. джанго это самый медленный фреймворк из популярных. на нем нового ничего не пишут, только легаси, только хардкор. про aiohttp, sanic, quartz, vibora слышал? - нет? - иди читай.

tz4678 ★★
()
Ответ на: комментарий от tz4678

Чё, даже медленне Ларавеля, гы?

Twissel ★★★★★
() автор топика
Ответ на: комментарий от tz4678

django говно

подробнее пожалуйста.

tornado мертв

What’s new in Tornado 5.1 July 12, 2018

vibora

в проде уже можно использовать?

ggrn ★★★★★
()
Ответ на: комментарий от ggrn

то что выходят новые версии сего артефакта что-то значит? с появлением асинхронности из коробки twisted и tornado стали не нужны. это легаси как и django.

tz4678 ★★
()
Ответ на: комментарий от ism

nginx постоянно стартует и завершает php для каждого запроса

Кто тебе сказал? nginx стартует заранее N процессов и потом просто кормит их реквестами. Разница только в том, что в пыхе обработка запроса начинается всегда с чистой VM.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

При этом php всё равно потребляет меньше памяти и работает быстрее. Пользуюсь обоими в режиме fastcgi, процессы питона потребляют по 50МБ, процессы php потребляют пару мегабайт.

anonymous
()
Ответ на: комментарий от anonymous

процессы питона потребляют по 50МБ, процессы php потребляют пару мегабайт

Это ты как определил? Смотреть нужно профилировщиком. Пых да, со старта обычно запрашивает 2М и если тяжести не двигать, то в эти пределы легко укладывается. Как там в питоне с этим делом я не знаю, но вряд ли он жрёт 50М... А если смотреть по RSS то и пых кушает 25-30М.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от anonymous

к rss добавить ещё шаред

Так и я о том же. Откуда взялись цифры 50M и «пара мегабайт»? На мой взгляд особой разницы по жору памяти нет.

no-such-file ★★★★★
()
Ответ на: комментарий от ggrn

подробнее пожалуйста.

Товарищ сравнивает член с маслом и зачем-то заменяет веб-монстра django ещё одной асинхронной-библиотекой-сколько-можно-их-уже-делать-задолбали-АААА.

в проде уже можно использовать?

tornado не хуже и не лучше новомодных aiohttp. twisted действительно больше не нужен, но это скорее потому twisted - говно.

anonymous
()
Ответ на: комментарий от no-such-file

Так и я о том же. Откуда взялись цифры 50M и «пара мегабайт»? На мой взгляд особой разницы по жору памяти нет.

Ну да, я по разному смотрел потребление. Django смотрел RSS, в среднем как-то так у меня: https://i.imgur.com/VYfxc88.png

В случае PHP смотрю memory_get_peak_usage() или xdebug. (показывают одинаково)

Да и не может не быть разницы, то что PHP быстрее и меньше потребляет чем питон это вообще не удивительно.

Deleted
()
Ответ на: комментарий от Deleted

Провёл такой быстрый тест на простых скриптах.

<?php

$c = 0;

while ($c < 10000000)
    $c += 1;
echo "$c\n";
?>
#!/usr/bin/env python3.5

c = 0

while c <  10000000:
    c += 1
print(c)

Питон запускал предварительно скомпиленным (впрочем, для нескомпиленного разницы почти не оказалось):

┌brainfucker@FuckingLaptop:/tmp
└22:08:21 $▶ /usr/bin/time -v python3.5  __pycache__/test.cpython-35.pyc 
10000000
        Command being timed: "python3.5 __pycache__/test.cpython-35.pyc"
        User time (seconds): 2.36
        System time (seconds): 0.01
        Percent of CPU this job got: 98%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.42
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 8352
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 931
        Voluntary context switches: 1
        Involuntary context switches: 395
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

┌brainfucker@FuckingLaptop:/tmp
└22:10:53 $▶ /usr/bin/time -v php test.php 
10000000
        Command being timed: "php test.php"
        User time (seconds): 0.62
        System time (seconds): 0.00
        Percent of CPU this job got: 97%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.63
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 15252
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 1
        Minor (reclaiming a frame) page faults: 1169
        Voluntary context switches: 1
        Involuntary context switches: 11
        Swaps: 0
        File system inputs: 72
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

Конкретно на этом тесте php потреблял памяти побольше, но разница во времени выполнения огромна в пользу php.

Deleted
()
Ответ на: комментарий от Deleted

Впрочем, просто однострочники с выводом «Hello World» без циклов показывают такое же потребление оба, так что в данном случае потребление показывает другое, а точнее минимум что они потребляют, на реальных вещах разница может измениться в другую сторону. А вот быстродействие очевидно.

Deleted
()
Ответ на: комментарий от Deleted

Коллега, сравнивать апельсины и яблоки уже давно стало моветоном.

1. Все-таки RSS и memory_get_peak_usage - разные метрики.

Предлагаю использовать только RSS. Прямо сейчас в проде у нас один процесс из пула php-fpm откушивает более 60M.

2. Сравнивать int-ы в третьем питоне и пыхе нужно тоже корректно:

<?php

$c = gmp_init(0);
$one = gmp_init(1);

while (gmp_intval($c) < 10000000)
    $c = gmp_add($c, $one);

echo "$c\n";

Время на выполнение такого php-скрипта:

1.46user 0.00system 0:01.47elapsed 99%CPU (0avgtext+0avgdata 18412maxresident)k

на этой же машине python-скрипт отрабатывает за:

0.81user 0.00system 0:00.82elapsed 99%CPU (0avgtext+0avgdata 8260maxresident)k

3. Все уже давно до нас украли и померяться длинами можно прямо тут: https://www.techempower.com/benchmarks/

p.s. Использовать закрывающий тэг ?> в пыхе - это как чистить селедку с хвоста. Пора прекращать )

anonymous
()
Ответ на: комментарий от anonymous

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

Deleted
()
Ответ на: комментарий от Deleted

А где в моем примере оптимизация? o_O

Там исключительно про одинаковые условия работы программы.

Потому что уважающий себя программист знает примитивы своего ЯП-а. Если он не знает основ, то будет очень долго ждать замеров вот такого теста (уж простите за жабу):

class Test {
  public static void main(String[] args) {
    int c = 0;
    while (c < 10000000000L) {
        c += 1;
    }
    System.out.println(c);
  }
}
anonymous
()
Ответ на: комментарий от anonymous

Там исключительно про одинаковые условия работы программы.

В этом и проблема. Зачем мне подгонять реальный php код на продакшене под одинаковые с питоном условия?

Deleted
()
Ответ на: комментарий от Shadow

Это да, битрикс, зараза, прожорливый. Но это вроде проблемы битриксопейсателей, в большей степени, чем проблемы пыха.

Twissel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.