繁体   English   中英

引擎,python27的性能下降

[英]Appengine, performance degradation with python27

我想在appengine上测试python27,所以我从python25迁移了我的应用程序。 每个请求的性能都要慢2倍! 然后我又回到了python25,性能再次像以前一样。 这是一张图片:

在此输入图像描述 (毫秒/请求)(cgi处理程序python 27,然后是python25)

我的应用程序使用WerkzeugJinja2 ,并且使用了很多memcache。 什么原因会导致性能急剧下降? 或者仅仅是因为appengine上的python2.7还处于测试阶段?

关于申请的一些细节:

这是一个非常简单的网上商店。 有一些延迟的任务与pdf生成,但这些不会影响整体图形,因为首页获得最多的命中。 几乎所有内容都是memcached。 使用python 2.5加载页面时,空缓存需要约0.8秒。 非缓存页面加载时间很长,主要是因为有很多数据库查询。 缓存页面加载时间为60~100 ms。 平均加载时间约为150毫秒。 用python 2.7表现很糟糕。 非缓存页面需要2秒以上才能加载。 缓存页面加载时间超过200毫秒。

不幸的是,我没有任何分析数据,我无法分辨python 2.7中究竟是什么减慢了。

我的页面加载时间数据是从实时页面收集的,该页面提供~10 req / sec和1个常驻python25实例,可以轻松处理此负载。

我还用wsgi和threadsafe:yes测试了python 2.7 threadsafe:yes ,但与python 2.7和cgi相比,性能提升了一点点。

在Usenet的某个地方,我从Google那里读到了这样一句话:“在某些情况下,Python 2.7运行时比Python 2.5运行时慢,而在其他情况下则更快。我们现在还没有公开原因。” 似乎到目前为止没有人发现2.7比2.5更快的情况因此......

我读到了这个

  1. 谷歌知道一个预先形成的问题。
  2. 他们不确定如何处理它。

我的分析表明python 2.7多线程应用程序花费大约。 他们35%的时间都在{method 'acquire' of 'thread.lock' objects} - 而且似乎是在谷歌的RPC代码中发生的。 还有迹象表明导入存在严重的锁定问题。

除了等待AppEngine修复它之外,基本上你无能为力。 另请参阅有关减速的综合文档

几乎肯定不会在这方面发挥重要作用的因素是:

  • 上传pyc文件(GAE基础设施为您做到这一点)
  • 服务器配置(GAE规模如此之大,甚至在封闭式测试版2.7中也很慢)
  • WSGI与CGI(不会解释如此巨大的性能影响)

丑陋的是,谷歌在两个步骤中进行了大规模的价格上涨,但告诉我们“通过使用多线程python 2.7,你可以运行更高效,新价格看起来不那么糟糕”。 不幸的是Python 2.7。 运行时仍然标记为“实验性”,并且不提供生产质量性能。

Python 2.7支持仍然是实验性的。 新的和实验性的一个方面是它没有Python 2.5具有的那种性能烘焙和调整。

在python 2.7上运行时,您是否将应用程序迁移到使用WSGI而不是CGI?

CGI接口可能只是现在为2.7启用的WSGI的包装器。

通过切换到python2.7,我的应用程序在负载下的性能差3倍。

用2.5:

连接时间(ms)min mean [+/- sd]中位数最大连接数:36 48 15.4 41 109处理:685 3010 1893.3 2657 9255等待:685 3009 1893.3 2656 9255总计:725 3058 1900.5 2711 9333

在特定时间内服务的请求百分比(毫秒)50%2711 66%3287 75%3896 80%4521 90%6146 95%7078 98%7934 99%8413 100%9333(最长要求)

用2.7:

连接时间(ms)min mean [+/- sd] max maximum连接:35 46 11.4 41 96处理:1076 7614 4190.5 6711 32284等待:1075 7614 4190.5 6711 32283总计:1124 7660 4195.5 6764 32353

在特定时间内服务的请求百分比(毫秒)50%6764 66%7790 75%8751 80%9392 90%10844 95%13139 98%25219 99%27259 100%32353(最长请求)

来自谷歌本身的一句话

实验!

Python 2.7运行时是App Engine的实验性,创新性和快速变化的新功能。 不幸的是,处于前沿意味着我们可能会做出向后不兼容的变化。 一旦Python 2.7运行时不再是实验性的,我们将通知社区。

它们还没有真正用于生产用途,它就像beta测试一样。

因此,请将您的应用程序保存在python2.7中,直到实验阶段结束。

您还可以尝试仅上载已编译的.pyc文件,因为python27运行时支持字节码上载

据我所知,Python 2.7应该比2.5快。 但是,有一些因素会影响速度:

  • 二进制编译的方式;
  • 您的库(例如Memcache)是编译为C(++)还是Python。 当然,C ++模块比Python等效模块更快;
  • 它所使用的服务器 - 我从未使用过App Engine,但我认为服务器只运行Python 2.5或Python 2.7,因为混合使用它们会浪费资源。 如果使用的2.7服务器比2.5服务器多得多,并且App Engine没有对此进行补偿,您会发现性能也会下降。

这是我提出的前三件事,但有很多因素。 即使是天气也可能在理论上影响性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM