2009-11-30 116 views
2

這裏的問題。爲什麼我的網站需要這麼長時間才能加載?

我有我的網站託管在一個共享主辦的asp.net mvc。我登錄並說出並填寫我的一份表格,然後提交。提交使用jquery ajax請求完成。

現在突然它會掛起,不會做20秒鐘的事情,然後突然它會完成我的要求保存表單。

現在,這是事情。我可以做相同的請求10次,其他9次可能需要200-500毫秒才能完成。那麼爲什麼會有這樣的時間差?

似乎如果我做了一個請求,然後做一些其他請求這兩個請求將會走得很快,但如果我停下來回來幾分鐘,第一個請求可能需要一段時間才能完成(似乎範圍從5到20秒)。

但實際上它似乎只是在感覺時纔會發生。有時候我幾乎可以在沒有看到的情況下進行整個會話。有時候,我連續得到多個,並且必須刷新頁面,然後它會再次快速。

那麼是什麼原因造成的呢?

  • 難道這是我寫的代碼,這就是爲什麼它變慢?
  • 是我的託管網站嗎?
  • 這是我在家裏的連接嗎?

就像我不知道是什麼原因導致這個或如何測試,所以我甚至不能開始修復它。

+0

服務器上是否已經有一些穩定的負載,或者只有你自己?如果只有你,這可能是工作流程被回收。 – 2009-11-30 10:47:05

回答

0

如果您在一天中的不同時間測試了這一點,或者您剛剛部署並注意到滯後,我會很好奇。可能是在服務器上運行備份或其他導致行爲的管理作業。問題是,在共享主機上,用於識別性能問題原因的選項很少。如果延遲發生的時間,很可能有下列情況之一:

  • 的服務器(主機不會承認)
  • 您與共享硬件太多的共享帳戶並沒有足夠的資源一個非常繁忙的網站(你的主機不會輕易承認這一點,但你可以找到你自己)
  • 其他帳戶都十分運行資源密集型應用程序(你的主機會幫你)

你可以這樣做爲您的IP進行反向DNS查找並查看還有哪些內容正在運行。 您可以在等待響應時ping通服務器,並查看網絡延遲是否升高,或者響應速度是否一致。最後,你可以請支持人員看看。

+0

嗯,也許你的權利。我在2小時後回來,做了同樣的事情(創建了6個帳戶並執行相同數量的操作),我只有一次掛斷。我如何做這個反向查找?此外,我正在測試的部分正在驗證中。我是否必須取消身份驗證才能ping通它,或者在身邊嗎? – chobo2 2009-11-30 07:14:55

+0

有網站這樣做(只是谷歌反向DNS)。或者,ping您的站點以獲取IP地址,然後使用您的IP運行nslookup -d xx.xx.xx.xx,並且您將獲得所有具有DNS的dns記錄的域的列表。 – cdonner 2009-11-30 13:00:41

4

您需要使用分析器(如ANTS Profiler)來確定緩慢的原因。造成性能下降的原因有很多,如果沒有關於應用程序運行情況的數據,將無法分辨出來。

+0

任何免費的? – chobo2 2009-11-30 07:05:26

3

首先要開始使用像Fiddler或Firebug這樣的網絡分析器。如果問題來自網絡延遲或者實際上是等待服務器的響應,那麼您應該能夠非常輕鬆地進行分析。可能它是服務器。

下一步是在遇到緩慢請求時能夠看到CPU和內存正在發生什麼,並且如果它正在訪問數據庫,則需要能夠看到那裏發生了什麼。也許有一個交易被阻止。

理想情況下,您應該查看幾個與硬件和.Net本身相關的內置系統性能計數器,例如請求隊列和GC統計數據。

+0

如何判斷它是否與螢火蟲網絡滯後?我目前使用螢火蟲,但不知道在哪裏檢查網絡滯後。我不知道我是否可以看到CPU和內存,因爲它是共享主機。 – chobo2 2009-11-30 07:15:39

+1

Firebug擁有「Net」標籤。你必須切換到啓用它。然後,它會將請求時間的組成分解爲DNS查找,連接,排隊,等待響應和接收數據。如果除等待響應之外所有組件都很小,那麼您知道這是服務器代碼花費的時間。如果「接收數據」是小文件的最大組件,那麼您可能會懷疑網絡出現問題。 – womp 2009-11-30 18:10:26

+0

好酷,我將不得不等待,直到我看到再次減速並檢查。 – chobo2 2009-12-01 06:21:03

0

您是否已將日誌記錄添加到您的應用程序中,以便您可以識別服務器代碼中的滯後時間?

除了Fiddler和Firebug,我還會實現一系列日誌記錄。這可能是服務器上的特定請求被阻止。

伐木將縮小它在哪裏的可能性。

+0

我有我的記錄elmah,但我想這是一種不同類型的日誌記錄? – chobo2 2009-11-30 06:38:39

+0

不知道,但我會放置類似log4net的東西,然後記錄所有嚴重程度爲所謂的調試。那麼一旦你解決了它,你可以通過配置文件來打開和關閉日誌記錄。 – griegs 2009-11-30 07:20:22

1

我也注意到共享主機上的應用程序可以退出全局內存並需要在第一次重新編譯時重新訪問該網站。這個過程(重新編譯)顯然與你的代碼庫的大小有關,但是15-20秒對於重新編譯中小型站點聽起來並不合理。

爲了解決這個問題,確保所有的視圖都被編譯了,而不僅僅是你的核心DLL代碼。

+0

如何確保我的視圖已編譯? – chobo2 2009-11-30 21:24:20

+0

chobo2, 這裏有一個關於SO的參考資料。試試這些: http:// stackoverflow。com/questions/959859/compiling-views-when-publishing-asp-net-mvc-project http://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc jimi – 2009-12-01 10:08:12

相關問題