apache jmeter_Apache Server和JMeter调试
apache jmeter
我一直在使用JMeter為生產(chǎn)服務(wù)器生成負(fù)載以測(cè)試我的應(yīng)用程序。 該測(cè)試計(jì)劃具有13個(gè)以上的HTTP采樣器以發(fā)出不同的請(qǐng)求,并具有一個(gè)正則表達(dá)式提取器以從響應(yīng)中提取一些值。 此值在連續(xù)的HTTP Sampler中使用。 這個(gè)測(cè)試用例簡(jiǎn)單而直接。 最初,我使用200個(gè)JMeter線程來(lái)模擬200個(gè)用戶。 服務(wù)器能夠輕松地處理許多請(qǐng)求,但是當(dāng)線程數(shù)量增加時(shí),它就無(wú)法無(wú)限地處理和等待。 當(dāng)然發(fā)生了什么事。 JMeter線程正在等待連接,因此無(wú)法無(wú)限等待它。 為了避免這種情況,我引入了“ HTTP Request default”來(lái)添加一些連接和響應(yīng)超時(shí)。 解決了一個(gè)問(wèn)題,現(xiàn)在線程并沒(méi)有無(wú)限地掛在那里,但是它們因以下異常而超時(shí)。
java.net.SocketTimeoutException: Read timed outat java.net.SocketInputStream.socketRead0(Native Method)at java.net.SocketInputStream.read(SocketInputStream.java:129)at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)at java.io.BufferedInputStream.read(BufferedInputStream.java:237)at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)at org.apache.jmeter.protocol.http.sampler.HTTPHC3Impl.sample(HTTPHC3Impl.java:258)at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62)at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1088)at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1077)at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:428)at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)at java.lang.Thread.run(Thread.java:662)肯定是服務(wù)器的一部分(Apache 2.2.14 + Apache-tomcat-7.0.11)正在崩潰,但不確定是哪一部分。 當(dāng)然設(shè)置中存在一些瓶頸。 在當(dāng)前設(shè)置中,Apache服務(wù)器正在將請(qǐng)求轉(zhuǎn)發(fā)到Tomcat引擎。 因此,可以肯定的是,它們之一都不能一次處理200多個(gè)請(qǐng)求。 我做了一些更改,將所有請(qǐng)求直接轉(zhuǎn)發(fā)到Tomcat引擎。 它能夠處理它,這意味著Apache在懈怠。 我Swift檢查了/var/log/apache2/error.log存在的Apache error.log文件,發(fā)現(xiàn)以下幾行。
[Wed Jun 26 16:46:19 2013] [error] server is within MinSpareThreads of MaxClients, consider raising the MaxClients setting [Wed Jun 26 16:46:20 2013] [error] server reached MaxClients setting, consider raising the MaxClients setting [Wed Jun 26 17:24:42 2013] [error] server is within MinSpareThreads of MaxClients, consider raising the MaxClients setting [Wed Jun 26 17:24:43 2013] [error] server reached MaxClients setting, consider raising the MaxClients setting這清楚地表明MaxClients數(shù)應(yīng)該增加,這反過(guò)來(lái)又會(huì)增加Apache線程數(shù)。 我Swift編輯了apache2.conf文件,通過(guò)添加以下配置來(lái)增加MaxClients數(shù)量,并執(zhí)行"apache2ctl -t"以確認(rèn)在配置文件中所做的更改是正確的。
<IfModule mpm_worker_module>StartServers 2MinSpareThreads 25 MaxSpareThreads 100 ThreadLimit 800ThreadsPerChild 800 MaxClients 2400MaxRequestsPerChild 0 </IfModule>我有些放松,以為現(xiàn)在Apache一定會(huì)處理現(xiàn)在的負(fù)載。 但是令我驚訝的是,它無(wú)法再一次將相同的異常擊中JMeter。 在這一點(diǎn)上,我想通過(guò)啟用服務(wù)器狀態(tài)來(lái)檢查Apache的性能。 此功能可以使您清楚地了解連接狀態(tài)。 我將以/etc/apache2/mods-available/status.conf放在/etc/apache2/mods-available/status.conf
<Location /server-status>SetHandler server-statusOrder deny,allowDeny from allAllow from .your.domain.here.com localhost </Location>我通過(guò)執(zhí)行以下命令重新啟動(dòng)了Apache和服務(wù)器
/> sudo service apache2 restart; sudo service tomcat restart;Apache重新啟動(dòng)后,我點(diǎn)擊以下URL獲取服務(wù)器狀態(tài)。
http://your.server.name/server-status?refresh=3在為200多個(gè)線程運(yùn)行JMeter之后,我在狀態(tài)頁(yè)面上注意到了這一點(diǎn)。
Apache服務(wù)器狀態(tài)
狀態(tài)頁(yè)指示"W" (發(fā)送答復(fù))狀態(tài)下有大量連接。 這可能是由其他原因引起的。 我試圖用谷歌搜索它,但是找不到任何確定的解決方案。 但是有一件事可以肯定,Apache不會(huì)引起問(wèn)題。 它必須在Apache和tomcat之間。 我意識(shí)到JMeter測(cè)試計(jì)劃適用于200個(gè)線程,甚至Tomcat默認(rèn)情況下也具有200個(gè)線程。 我只是碰巧通過(guò)編輯"<APACHE_TOMCAT_HOME>/conf/server.xml"文件將線程數(shù)增加到400。
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="400" minSpareThreads="20" /> 現(xiàn)在,服務(wù)器可以輕松處理JMeter負(fù)載,即使完成測(cè)試計(jì)劃,Apache連接也處于良好狀態(tài)。
盡管問(wèn)題已解決,但是當(dāng)JMeter配置為直接將所有請(qǐng)求發(fā)送到Tomcat時(shí),我無(wú)法理解為什么Tomcat能夠處理負(fù)載,但是當(dāng)Apache將請(qǐng)求轉(zhuǎn)發(fā)到Tomcat時(shí),卻無(wú)法處理負(fù)載。 如果您對(duì)此行為有任何解釋,請(qǐng)?jiān)谠u(píng)論部分中共享。
翻譯自: https://www.javacodegeeks.com/2013/07/apache-server-and-jmeter-debugging.html
apache jmeter
總結(jié)
以上是生活随笔為你收集整理的apache jmeter_Apache Server和JMeter调试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ddos攻击形式主要有哪两种(ddos有
- 下一篇: 使用Speedion 3.0.17或更高