簡體   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