Тестирование использования памяти фреймворками Python в Virtualenv

Я создаю приложение в нескольких разных веб-фреймворках Python, чтобы увидеть, какой из них лучше сочетает удобство для меня с программированием и производительность. Есть ли способ сообщить об использовании памяти конкретным приложением, которое запускается в virtualenv?

Если нет, как я могу найти среднее, максимальное и минимальное использование памяти моими веб-приложениями?


person Community    schedule 10.08.2012    source источник
comment
Вам нужен подробный отчет обо всех различных распределениях памяти и т. д. или просто знать, сколько потребляет приложение?   -  person jdi    schedule 10.08.2012
comment
сколько потребляет приложение в virtualenv.   -  person    schedule 10.08.2012


Ответы (3)


Это зависит от того, как вы собираетесь запускать приложение в своей среде. Существует множество различных способов запуска веб-приложений Python. В последнее время популярны методы Gunicorn и uWSGI. Таким образом, вам лучше запустить приложение, как в вашей среде, и вы можете просто использовать монитор процесса, чтобы увидеть, сколько памяти и ЦП используется процессом, выполняющим ваше приложение.

person Matt W    schedule 31.08.2012

Я присоединюсь к замечанию Мэтта В. о том, что среда приложения является основным фактором (Gunicorn, uWSGI, nginx->paster/pserve, eventlet, apache+mod_wsgi и т. д. и т. д. и т. д.)

Я также добавлю, что это 2012 год. В 1999 году память и ЦП для таких вещей были огромной проблемой. Но на дворе 2012 год. Компьютеры значительно мощнее, расширять их гораздо проще и дешевле, а фреймворки кодируются лучше.

По сути, вы смотрите на бенчмаркинг вещей, которые не имеют практического значения и будут только теоретически «аккуратными» и информативными.

Узкими местами производительности веб-приложений Python обычно являются:

  • узкое место связи с базой данных
  • схема базы данных
  • одновременных подключений/запросов в секунду

С точки зрения узкого места связи с базой данных, общие подходы к его решению следующие:

  • общаться меньше
    • aggressive caching
    • optimize your sql queries and result sets , so there's less data
  • обновить инфраструктуру БД
    • dedicated machine(s)
    • cluster master/slave or shard

Что касается схемы базы данных, за удобство приходится платить. В Django быстрее делать определенные вещи, но вы будете в значительной степени привязаны к создаваемой им схеме. Pyramid+SqlAlchemy является более гибким, и с его помощью вы можете работать с точно настроенной базой данных... но вы не получите никаких автоматических инструментов, которые дает Django.

для одновременных подключений/запросов в секунду это во многом связано с окружающей средой. запуск одного и того же приложения с помощью paster, uwsgi и других стратегий развертывания будет иметь разные результаты.

вот ссылка на хороший, но старый тест — http://nichol.as/benchmark-of-python-web-servers

вы заметите, что там есть слайд для пикового использования памяти, и хотя есть несколько выбросов и происходит приличное количество кластеризации, у худшего исполнителя было 122 МБ. это ничего.

вы могли бы интерпретировать gevent как потрясающий из-за того, что у него 3 МБ по сравнению с 15 у uwsgi или 122 у cogen ... но все это небольшая часть памяти современной системы.

фреймворки имеют такие небольшие накладные расходы и вряд ли будут влиять на операционную производительность. даже части базы данных ничто. сошлитесь на это сообщение о SqlAlchemy ( Почему вставка SQLAlchemy с помощью sqlite в 25 раз медленнее, чем при непосредственном использовании sqlite3? ), где сопровождающий отмечает некоторые впечатляющие примечания по производительности: прямая генерация sql составляла ~ 0,5 с для 100 000 строк. когда задействован полный ORM с проверками целостности и т. Д., Он становится 16 с для того же количества строк. это ничего.

Итак, моя точка зрения проста - вам следует учитывать два фактора:

  • насколько быстро/удобно я могу программировать сейчас
  • насколько быстро/удобно я могу программировать через год (т. е. насколько вероятно, что мой проект будет увеличивать «технический долг» с использованием этой структуры, и насколько большой проблемой это станет)

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

person Jonathan Vanasco    schedule 31.08.2012
comment
Да, это может быть 2012 год, но хостинг все еще имеет относительно мало памяти. Так как я сделал сообщение выше, я установил экземпляр Plone на Webfaction и получил электронные письма с предупреждениями о высоком использовании памяти с 512 МБ на общей учетной записи. Это довольно большой объем оперативной памяти для чего-то, что не содержало даже пяти страниц контента. Напротив, мне удалось написать довольно сложное веб-приложение в Bottle (мой текущий тестовый стенд), которое использует в среднем 12,8 МБ с ~ 14000 просмотров за 9-часовой рабочий период, и у меня еще не было времени на его оптимизацию. Как вы сказали, на программирование только аспекта безопасности ушло две недели. - person ; 01.09.2012
comment
Из цен на webfaction.com — +7 долларов в месяц за 256 МБ, что немного дешевле, чем 10 долларов в месяц на linode.com за 256 МБ. В любом случае это ничего. Plone — это не фреймворк, это CMS с огромными накладными расходами, построенная на фреймворке Zope. Drupal в PHP так же раздут. Вы получите достаточно хорошую производительность от Bottle, Web.Py, Pyramid, Django, Tornado, Twisted и т. д. - person Jonathan Vanasco; 03.09.2012
comment
Объем памяти Webfaction в настоящее время ограничен 512 Мб. Не могу поверить, что за все это время я никогда не встречал Линоде... хороший материал. Я знаю, что Plone — это CMS, но она работает очень хорошо, передавая большие объемы данных в настраиваемое управление контентом, а также простоту использования для конечных пользователей. Это была моя проблема в том, что я разработал ряд внутренних информационных систем, но мне никогда не приходилось беспокоиться об оперативной памяти. Мой предстоящий проект предназначен для фонда в Эквадоре с ограниченными средствами, но аудитория глобальна. Linode может быть в пределах досягаемости, но Webfaction, насколько я понимаю, также не предлагает VPS. - person ; 03.09.2012
comment
linode существует уже некоторое время, но я никогда не слышал о них, пока Rackspace не купил Slicehost... и Linode не начал получать свою старую аудиторию. для некоммерческой организации в Латинской Америке я бы рассмотрел решение PHP для долгосрочного обслуживания. Хотя мне не нравится PHP, есть гораздо больше талантов, которые могут поддерживать там PHP, чем Python. - person Jonathan Vanasco; 03.09.2012

Выбор механизма хостинга не является причиной использования памяти, это то, как вы их настраиваете, а также какое толстое веб-приложение Python вы решите запустить.

Цитируется эталон:

http://nichol.as/benchmark-of-python-web-servers

является хорошим примером того, как тесты могут ошибаться.

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

Не обращая внимания на память, некоторые другие комментарии о том, где будут находиться настоящие узкие места, справедливы. Более подробно обо всем этом вопросе см. в моем выступлении на PyCon.

http://lanyrd.com/2012/pycon/spcdg/

person Graham Dumpleton    schedule 01.09.2012