2009-11-07 62 views
6

我目前有一個django網站,它有點慢,所以我想了解發生了什麼。我怎麼可以分析它,以便區分之間:網絡 我使用的服務器端執行的JavaScript 如何爲網站執行分析?

  • 效果
  • 效果託管
  • 效果(Python代碼的

    • 效果)和sql訪問。
    • 任何其他影響我不考慮由於我今晚發生的大規模頭痛。

    當然,對於他們中的一些,我可以使用Firebug,但有些效果是相關的

    感謝

  • 回答

    5

    客戶端:

    • 檢查與螢火蟲是否有/哪個頁面組件需要很長時間來加載和瀏覽器需要加載完成後呈現的頁面多久。如果一切都很快,但渲染需要時間,那麼可能你的html/css/js就是問題,否則就是服務器端。

    服務器端(我假設你坐在一些UNIX的一致好評服務器上):

    • 檢查與小靜內容的Web服務器(一個小GIF或少許的HTML頁面),使用Apache工作臺(ab,apache web服務器包的一部分)或httperf,服務器應該能夠每秒響應至少100個請求(當然,這很大程度上取決於測試內容的大小,web服務器類型,硬件和其他東西,所以不要認真對待這100個)。如果這看起來不錯,

    • 測試的Django與「靜態視圖」 abhttperf(一個,這並不使用數據庫對象),如果那是慢的,你需要更多的CPU功率的提示。用top檢查服務器上的CPU利用率。如果可以,問題可能出在Web服務器執行python代碼的方式

    • 如果服務半靜態內容正常,您的問題可能是數據庫或IO綁定。數據庫問題是一個廣泛的領域,這裏有一些一般性的建議:

      • iostat檢查I/O吞吐量。如果你看到很多的寫入,那麼你可以獲得更好的光盤子系統,更快的RAID,SSD硬盤驅動器......或優化你的應用程序以減少寫入。
      • 如果它的大量讀取,主機可能沒有足夠的內存專用作爲文件系統緩衝區,或者您的數據庫查詢可能未被優化
      • 如果I/O看起來不錯,那麼數據庫可能不適合您工作量或未正確配置。登錄慢查詢和監控數據庫活動,鎖具等可能給你一些想法

    ,如果你讓我們知道你用什麼硬件/軟件,我也許能夠提供更多的建議

    編輯/ PS:忘了一件事:當然你的應用程序可能有一個不好的設計,並做了很多不必要的/低效的事情...

    3

    (因爲它做緩慢的網絡訪問,例如JavaScript的可能出現慢)看看的Django debug toolbar - 這可以幫助您處理服務器端代碼(例如,數據庫查詢運行的時間以及它們花費的時間);並且通常是Django開發的一個很好的資源。

    您可以用yslow進行配置的其他非Django特定位。

    +0

    當然,您應該在實時網站上執行這種分析,因爲它通常是真實數據的位置,但我也認爲這不是特別安全......標準解決方案是什麼?用假查詢打網站(我記得有一個實用程序)? – 2009-11-07 14:26:35

    +0

    您不必在實時網站上執行django-debug-toolbar的內容,但您可能想在您的實時網站上運行yslow。我在開發服務器上使用了django-debug-toolbar。不要將它用於絕對數字('x'需要'y'秒),而是用於查詢的相對時間等。這對於確定特定視圖是否發出比需要的更多數據庫查詢特別有用。 – 2009-11-07 14:32:55

    1

    有各種工具,但這樣的問題不難找到,因爲他們很大。

    您遇到問題,並且在刪除它時會遇到加速問題。假設加速是一些因素,比如2x。這意味着該計劃花費了50%的時間等待緩慢的部分。我所做的只是停下來幾次,看看它在等待什麼。在這種情況下,我會看到問題的50%,我停止它。

    首先,我會在客戶端執行此操作。如果我看到這50%是花在等待服務器上,那麼我會嘗試在服務器端停止它。然後如果我看到它正在等待SQL查詢,我可以看看那些。

    我幾乎肯定會發現,正在請求的工作量比實際需要的要多。它通常不像「熱點」或「算法」那樣深奧。它通常是愚蠢的,就像在多次查詢時進行多次查詢,以避免必須編寫代碼來保存第一個查詢的結果。

    Here's an example.

    0

    首先第一件事情;確保你知道哪些頁面很慢。你可能會感到驚訝。我建議django_dumpslow