2016-08-24 48 views
2

我正在使用Ubuntu 16.04上的Django應用程序,最近注意到在我的Django應用程序的測試套件中使用硒的功能測試有時會失敗(超時)。這些是先前通過的測試,並且沒有代碼已被更改。發生這種情況時,看似隨機的測試會失敗;在一次運行中,測試A將失敗,下一次測試B將失敗,A將通過。然而,似乎通常會失敗的是調用外部Web服務(Google Maps API調用)或加載外部庫(通過CDN加載Font Awesome或Bootstrap) - 硒會超時等待這些資源加載。Django測試服務器和開發服務器間歇性地檢索外部資源時遇到問題

發生這種情況時,使用開發服務器(./manage.py runserver)在本地運行站點通常比平常運行速度慢(即某些頁面的加載速度會比平時慢很多,或者無法完全加載)。

我懷疑我的計算機上的某種網絡流量阻塞或放慢了Django的開發和測試服務器,就像另一個進程正在使用/嘗試使用相同的端口或某種性質的東西。

在這個問題特別糟糕的時候,我意識到我正試圖在同一臺機器上上傳1GB文件到Dropbox。當我停止這個過程時,我的測試套件和開發服務器都開始順利運行。另一次,我通過Google音樂管理器上傳音樂文件,當我退出音樂管理器時,測試和開發服務器恢復正常。但是,我目前遇到同樣的問題,目前我還沒有做任何主要的文件下載或上傳(我知道這一點)。

因此,假設這些都不是巧合,是,任何一種很大的網絡流量會引起Django開發服務器和測試服務器的問題的情況下,或者是這個引起我的機器上嘗試使用某些程序與Django服務器相同的端口/資源/東西?我如何診斷/解決這樣的問題?

我已經在SO和其他地方搜索瞭解該問題,但我無法找到解決方案,部分原因是因爲我不確定問題是什麼或者如何以搜索的方式表達它引擎理解。

我已經使用netstat工具嘗試,與懷疑是其他一些工藝上127.0.0.1:8000運行(與runserver開發服務器運行)和127.0.0.1:8081(這是測試服務器似乎運行),但我會承認我並不確定我應該在那裏尋找什麼,或者如果我應該在那裏尋找。

請原諒我的無知;我對網絡問題很陌生(如果那是我所經歷的),並且我知道我可能在討論這個問題的方式會讓退伍軍人的皮膚爬行。如果這個問題過於模糊,我很抱歉。如果您必須贊成,請告知我可以提供的其他信息,以使問題更清晰/更有用。

在準備這篇文章的時候,這個問題再一次自行解決了,我所有的測試都通過了,但是我知道它會回來,所以任何建議都不勝感激。謝謝!

+2

'sudo netstat -putan'應該顯示你在同一個端口上偵聽的任何進程(看看你是否有'0.0.0.0:8000'和'127.0.0.1:8000')。無論如何,你的問題似乎是有時你的網絡延遲增長太多。當大量傳出連接開始並且您的上傳帶寬減少(即上傳大文件時),特別是當您的連接不對稱時,這往往會發生。您的互聯網連接是否不對稱(下載量大於上傳量)?如果是這樣,您需要通過停止服務或使用流量整形來確保您的帶寬足夠。 – jjmontes

+0

謝謝,這些信息非常有幫助。是的,看起來我確實有不對稱連接(4.93 Mbps下降,最後測試時爲0.79)。下次發生這種情況時,我會嘗試將網絡活動與沒有遇到問題的網絡活動進行比較。 – elethan

+0

這是哪個操作系統? – o9000

回答

1

一個可能的問題是,處於開發模式的Django服務器將store all database requests

重要的是要記住,在DEBUG運行時打開 ,Django會記住它執行的每個SQL查詢。在調試時,這很有用 ,但它會快速佔用生產服務器上的內存。

如果在設置中打開DEBUG = False,是否會發生相同的行爲?重新啓動服務器解決它嗎?

+0

重新啓動服務器不能解決問題;我已經嘗試過了。然而,我還沒有測試是否將'DEBUG'改爲'False'有助於解決這個問題。我會在下次開始看到效果的時候嘗試這個。感謝您的建議! – elethan