2013-08-30 115 views
1

我有一個Apache2和Django(mod_wsgi)設置,提供了一個RESTful API。我有一套自動化測試,它按順序執行〜1000個API請求(純HTTP GET/POST/PUT/DELETE)。奇怪的Apache請求延遲

問題是,對於每80個請求左右,我得到一個奇怪的滯後/超時精確到5秒或10秒。看到時間戳示例在這裏:

Request 1: 2013-08-30T03:49:20.915 
Response 1: 2013-08-30T03:49:30.940 
Request 2: 2013-08-30T03:50:32.559 
Response 2: 2013-08-30T03:50:37.597 

我不明白爲什麼發生這種情況。我有一個關閉KeepAlive的Apache配置(Django的推薦設置),但是Ubuntu 12.04 LTS的標準安裝。我試圖從同一臺服務器運行Web服務器,我首先想到這是某種DNS緩存的事情,但我已經添加了我要求給/ etc/hosts的主機名,但是問題是仍然存在。

當這種滯後/超時發生時,系統處於空閒狀態並有大量cpu和mem。 滯後不是特定於某個請求(URL),它似乎有點隨意。

考慮到它總是精確到毫秒5秒或10秒,感覺這是一些特定的設置導致這一點。

+0

在您的Apache配置中,MaxRequestsPerChild的值是多少? –

+0

@ThomasOrozco它被設置爲0,默認.. – Niklas9

+0

那麼'WSGIDaemonProcess'的'maximum-requests'屬性怎麼樣? (見[這裏](https://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines)) –

回答

0

這是一個DNS問題,加入我本地使用/ etc/hosts文件實際上解決了這個問題的域名。我剛剛沒有重新啓動服務器以使更改生效,認爲重新啓動網絡會照顧到這一點,但顯然不是。

1

如果它提供了一些見解,請觀看來自PyCon US的演講。

的東西像工藝流失,啓動成本的談話交易。有一件事你不應該做的是設置最大的請求,如果你不需要它。

另外考慮嘗試New Relic來幫助診斷問題出在哪裏。如果這是一個後端服務基礎架構問題的Web應用程序,這將節省很多猜測。

只要看到這樣的監測如何提供幫助,請觀看我的另一個PyCon會談。