2010-01-08 54 views
1

我們使用Jmeter來測試運行在Apache 2 Web服務器上的Php應用程序。我可以加載Jmeter以使用25或50個線程,並且服務器上的負載不會增加,但服務器的響應時間確實如此。線程越多,響應時間越慢。好像Jmeter或Apache正在排隊請求。我已經在apache web服務器配置文件中更改了maxclients的值,但這並沒有改變這個問題。當Jmeter運行時,我可以使用該應用程序並獲得可觀的響應時間。是什麼賦予了?我希望能夠通過增加線程數量將我的服務器降至0%空閒狀態。任何人都可以幫助我指出正確的方向嗎?jmeter多用戶問題

更新:我發現如果我從應用程序中刪除會話,我能夠模擬服務器上的全部負載。我試圖重新啓用會話併爲每個線程使用HTTP Cookie管理器,但似乎沒有產生影響。

+1

Update2:我發現,如果我更改作爲參數傳遞的會話ID,我可以加載服​​務器。如果我使用相同的會話ID,則所有請求都會排隊並按順序處理。這導致服務器處於閒置狀態的80%左右,無論我投入多少請求都不會改變。 – CLJ 2010-05-24 12:40:12

回答

3

您需要確定瓶頸發生的位置,然後嘗試修復問題。

  • JMeter客戶端應該在設備良好的機器上運行。我更喜歡運行JVM的Solaris/Unix服務器,但對於< 200個線程,現代Windows機器將會很好。 JMeter可能會成爲一個瓶頸,一旦它出現,你將不會得到任何有意義的結果。此外,它應該在一臺獨立的機器上運行,以適應您的測試,並且最好在同一個網絡上運行。如果您的測試平臺和服務器相距甚遠,則WAN延遲可能會成爲問題。
  • 第二件要檢查的是你的Apache工作人員。 Apache有一個模塊 - mod_status - 它會告訴你每個worker的狀態。可能會將池大小設置得太低。從mod_status中,您可以看到有多少員工正在使用。爲數不多,並且Apache不會有任何工作人員來處理請求,並且請求將排隊等候。太多了,Apache可能會耗盡它運行的盒子上的內存。
  • 接下來,你應該檢查你的數據庫。如果它在單獨的機器上,那麼數據庫可能會出現IO或CPU短缺。
  • 如果您遇到了瓶頸,並且服務器和db位於同一臺計算機上,則通常會遇到CPU,RAM或IO限制。我按照他們最容易識別的順序列出這些數據。如果你得到一個CPU綁定的應用程序,你可以很容易地看到你的CPU使用率達到100%。如果RAM耗盡,您的機器將開始交換。在Windows和unix上都可以很容易地看到你的可用RAM。最後,你可能會受IO限制。這也可以使用各種工具或統計來監視,但不像CPU那麼明顯。

最後,特別是對於您的問題,突出的一點是可能會將大量會話文件存儲在單個目錄中。通常PHP將會話信息存儲在文件中。如果此目錄變大,PHP將花費越來越多的時間來查找會話。如果您運行了測試,cookie會關閉,PHP應用程序可能會爲每個用戶請求創建數千個會話文件。在Windows服務器上,它比UNIX服務器上的速度要慢,對兩個操作系統上存儲目錄的方式有所不同。

+1

對我來說,最後的修正是改變傳遞給php頁面的會話id。事實證明,Apache/PHP將以串行方式處理每個具有匹配會話ID的請求。如果您的測試工具使用的是10個用戶,則必須確保您有10個_different_ session ID,否則所有10個用戶都被視爲相同,並且每個請求都會等待最後一個用戶完成。 – CLJ 2010-01-19 13:18:47

0

嘗試檢查由apache提供的靜態文件,而不是通過PHP來查看問題出在Apache配置還是PHP配置中。

另請檢查您的網絡連接和配置。我們的JMeter測試進展順利,直到遇到困難。最終意識到我們只有一個100Mb連接,並且已經飽和,要千兆位固定它。您的網卡或交換機可能以比您想象的更低的速度運行,特別是如果它們的速度設置爲「自動」。

2

您是否正在使用恆定吞吐量定時器?如果Jmeter無法爲分配給它的線程服務吞吐量,則會在響應時間內看到此排隊和爆發。要弄清楚這是否是問題,請嘗試添加更多線程。

我還在腳本內部發現了JavaScript調用時發現了這種情況的報告。在這種情況下,嘗試將JavaScript調用移動到腳本頂部的測試計劃元素,或者查找預先計算值的方法。