2012-05-29 139 views
2

我創建了一個非常簡單的Django應用程序,它可能會產生很高的CPU負載:使用簡單模型列表(其中20個)和每頁5-6個SQL查詢來呈現簡單的通用視圖產生一個加載CPU 30%-50%的apache進程。雖然內存使用情況相當不錯(30MB),但CPU負載並不理想,這不是因爲apache/wsgi設置或其他原因,當我通過runserver運行應用程序時,會發生相同的CPU負載。Django App的CPU使用率很高

因爲我是Django的新手,我想問: 1)這些30-50%的數字對於Django應用程序來說是否是一個常見的事情? (Django 1.4,Ubuntu 12.04,python 2.7.3) 2)如何分析CPU負載?我從這裏使用了一個配置文件中間件:http://djangosnippets.org/snippets/186/但它只顯示ms數字而不是CPU負載數字,沒有什麼特別之處,所以我如何確定什麼能夠消耗如此之多的CPU功率?

+0

你如何測量30-50%的CPU使用率?你用什麼來運行負載? – Lycha

+0

我在Linux中使用** top **並觀察%CPU列,以查看當我瀏覽應用程序時(或通過** ab **轟炸它時出現)的apache2進程 – Timus83

回答

0

CPU使用率本身並不能說明您的應用程序的效率如何。衡量性能的更重要指標是您的應用可以處理多少個請求/秒。你機器的處理器類型自然也會對結果產生巨大影響。

我建議你運行ab與多個併發請求和比較請求/秒數與一些基準(應該有許多網絡)。 ab會嘗試測試最大吞吐量,所以很自然會有一個資源被充分利用(瓶頸),通常這是disk-io。舉個例子,如果你碰巧使CPU使用率接近100%,這可能意味着你在某處浪費CPU(reqs/second很低),或者你已經優化了disk-io(reqs/s high)。

+0

我的應用程序提供了25個請求/ s的2GB Linode VPS。現在我很好奇,如何檢查這是否正常?是否有任何理想的數字可供使用或與之相比? – Timus83

+0

@ Timus83沒有明確的答案,如果沒有問題。這取決於很多東西。你應該閱讀更多關於Django性能和一些可用的基準來獲得可接受的球場號碼。我確定有很多人在EC2上對Django應用程序進行基準測試([這裏](http://www.mail-archive.com/[email protected]/msg94216.html)是其中之一)。如果在加載情況下CPU不接近100%,那麼您應該專注於優化數據庫訪問(例如緩存)。 – Lycha

0

查看%CPU列不是很準確。我一定會在所有時間內看到50%-100%的CPU峯值。它並不表示CPU的使用時間,只是我們在那個特定時刻達到了這個值。這些將分爲最小/最大數字,而不是您的平均CPU使用率。

另一件重要的事情:假設你有4個核心,這意味着top上的30-50%數字超出了最大值的400%。頂級50%意味着一個核心的50%,全部四個的12.5%等。

您可以按1來查看單個核心cpu數字。

+0

hm,謝謝你的提示。我有點好奇爲什麼會出現這些尖峯?例如,如果我運行像redmine這樣的基於Rails的應用程序,峯值會在最大值下達10%,這是一個用Ruby編寫的非常複雜的應用程序。另一方面,我的應用程序非常簡單,並且使用更高性能的Python編寫,所以我有些驚訝地發現這樣的尖峯並想找出原因。 – Timus83