2010-10-20 37 views
1

我使用的是Apache mod_wsgi的django,我的站點在每個頁面上都有動態數據,所有的媒體(css,images,js)都存儲在amazon S3 bucket中,通過「http://bucket.domain.com/images/ * .jpg」標記。 。 。 。我的問題是,清漆仍然可以幫助我加快我的網絡服務器?Django性能

我正試圖擊倒所有在這裏的絆腳石。還有什麼我應該看的?我在每一頁做了query profiler我的代碼將呈現約0.120 CPU秒這似乎不夠快,但是當我使用AB -c 5 -n 100 http://mysite.com/結果只有每秒要求:12.70 [# /秒](平均值)。 。 。

我意識到有很多變數在起作用,但我正在尋找一些指導我可以做的事情,並認爲清漆可能是答案。

UPDATE 這裏是我的探查 alt text

+0

這裏有一些很好的相關信息:http://serverfault.com/questions/81663/nginx-varnish-nginx-django – 2010-10-20 23:20:37

回答

2

您可以改善性能的唯一途徑的截圖,如果你措施什麼放慢你失望。雖然它不是世界上最好的分析器,但Django與hotshot profiler (described here)有很好的整合,你可以計算出那些要花費0.120 cpu秒的東西。

您是否在使用2 cpus?如果是這種情況,那麼當你使用ab時可能限制在db中?我只是這樣說,因爲0.120 * 12.70是1.5,這意味着有0.5秒等待某事。這也可能是IO或其他東西。

添加另一層沒有理由,如清漆通常不是一個好主意。唯一的情況就是清漆會有幫助,如果你的連接不好的客戶端緩慢持有線程,但是ab測試沒有達到這個條件,並且坦白地說,這不是一個足夠大的問題來保證額外的層。

現在,下一個主題是緩存,其中清漆可以幫助。您的網頁是爲每個用戶定製的,還是可以長時間保持靜態?除了簡單的登錄狀態屏幕外,頁面常常是靜態的 - 在這種情況下,請考慮使用cookie將該登錄狀態加載到JavaScript。如果你能夠緩存整個頁面,那麼他們會在ab中非常快。然而,接下來的問題是,ab並不是您網站的一個很好的基準,因爲用戶不會只坐在一個頁面上並反覆打f5。

+0

清漆可以幫助緩存完全靜態的頁面,但他可能會最好是將緩存構建到應用程序中,而不是依靠(有時非常笨拙的)外部層來完成這項工作。 Django本身有一個合理的緩存中間件來處理最簡單的情況。 – 2010-10-20 23:28:07

+0

但是我們不會知道任何東西,除非他首先將其描述:) – 2010-10-20 23:35:03

+0

絕對。優化前的配置文件 – 2010-10-20 23:40:40

2

想想你去安裝清漆前,有幾件事情:

  • 首先,你有沒有啓用內的Django的頁面緩存中間件?
  • etags是否正確設置並正常工作?
  • 您的數據庫服務器是否表現最佳?
  • 您是否考慮過在代碼中使用memcached設置緩存以獲取常見結果? (特別是前頁面和靜態網頁顯示給非登錄用戶)

除了該絕對必須爲每個用戶顯示顯着不同的數據查詢重動態網頁,0.12秒似乎是一個長的時間來服務於一個頁。看看你如何在你的應用中使用緩存來提高性能。如果您的頁面基本上是靜態的,而不是用戶名或類似內容,請緩存頁面的計算部分。

當Django的緩存工作正常時,公共頁面上的ab應該閃電般快。如果您沒有使用Apache的其他功能,請考慮使用lighttpd或nginx等更輕更快的功能。

Eric Florenzano組建了一個名爲django-newcache的相當有用的項目,它實現了一些高級緩存行爲。如果您遇到了內置緩存的限制,請考慮它。 http://github.com/ericflo/django-newcache