apache jmeter_Apache Server和JMeter调试

apache jmeter

我一直在使用JMeter为生产服务器生成负载以测试我的应用程序。 该测试计划具有13个以上的HTTP采样器以发出不同的请求,并具有一个正则表达式提取器以从响应中提取一些值。 此值在连续的HTTP Sampler中使用。 这个测试用例简单而直接。 最初,我使用200个JMeter线程来模拟200个用户。 服务器能够轻松地处理许多请求,但是当线程数量增加时,它就无法无限地处理和等待。 当然发生了什么事。 JMeter线程正在等待连接,因此无法无限等待它。 为了避免这种情况,我引入了“ HTTP Request default”来添加一些连接和响应超时。 解决了一个问题,现在线程并没有无限地挂在那里,但是它们因以下异常而超时。

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)

肯定是服务器的一部分(Apache 2.2.14 + Apache-tomcat-7.0.11)正在崩溃,但不确定是哪一部分。 当然设置中存在一些瓶颈。 在当前设置中,Apache服务器正在将请求转发到Tomcat引擎。 因此,可以肯定的是,它们之一都不能一次处理200多个请求。 我做了一些更改,将所有请求直接转发到Tomcat引擎。 它能够处理它,这意味着Apache在懈怠。 我Swift检查了/var/log/apache2/error.log存在的Apache error.log文件,发现以下几行。

[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数应该增加,这反过来又会增加Apache线程数。 我Swift编辑了apache2.conf文件,通过添加以下配置来增加MaxClients数量,并执行"apache2ctl -t"以确认在配置文件中所做的更改是正确的。

<IfModule mpm_worker_module>StartServers          2MinSpareThreads      25  MaxSpareThreads     100 ThreadLimit         800ThreadsPerChild     800 MaxClients         2400MaxRequestsPerChild   0   
</IfModule>

我有些放松,以为现在Apache一定会处理现在的负载。 但是令我惊讶的是,它无法再一次将相同的异常击中JMeter。 在这一点上,我想通过启用服务器状态来检查Apache的性能。 此功能可以使您清楚地了解连接状态。 我将以/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>

我通过执行以下命令重新启动了Apache和服务器

/> sudo service apache2 restart; sudo service tomcat restart;

Apache重新启动后,我点击以下URL获取服务器状态。

http://your.server.name/server-status?refresh=3

在为200多个线程运行JMeter之后,我在状态页面上注意到了这一点。

Apache服务器状态

状态页指示"W" (发送答复)状态下有大量连接。 这可能是由其他原因引起的。 我试图用谷歌搜索它,但是找不到任何确定的解决方案。 但是有一件事可以肯定,Apache不会引起问题。 它必须在Apache和tomcat之间。 我意识到JMeter测试计划适用于200个线程,甚至Tomcat默认情况下也具有200个线程。 我只是碰巧通过编辑"<APACHE_TOMCAT_HOME>/conf/server.xml"文件将线程数增加到400。

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="400" minSpareThreads="20" />

现在,服务器可以轻松处理JMeter负载,即使完成测试计划,Apache连接也处于良好状态。
尽管问题已解决,但是当JMeter配置为直接将所有请求发送到Tomcat时,我无法理解为什么Tomcat能够处理负载,但是当Apache将请求转发到Tomcat时,却无法处理负载。 如果您对此行为有任何解释,请在评论部分中共享。

参考:来自我们的JCG合作伙伴 Rakesh Cusat的Code4Reference博客上的Apache Server和JMeter调试 。

翻译自: https://www.javacodegeeks.com/2013/07/apache-server-and-jmeter-debugging.html

apache jmeter

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CDMA系统的三种码

CDMA系统中用到的三种码&#xff1a;PN码、Wash码、长码 种类作用PN码伪随机码&#xff0c;主要是把发送的序列转化为伪随机序列Wash码消除或者抑制多址干扰&#xff0c;如果多址信号是正交的&#xff0c;那么多址干扰可以减小到0&#xff1b;区分前向信道长码区分用户的业务信…

4计算准确率_孩子计算总出错?4个好方法帮助低年级学生提高计算准确率!

低年级孩子&#xff0c;由于活泼好动&#xff0c;注意力不容易集中&#xff0c;思维容易被分散。表现在学业上&#xff0c;就会出现学习水平参差不齐的情况。而最主要的表现&#xff0c;就是计算能力的差异。据资深数学老师观察&#xff1a;成绩好的孩子&#xff0c;一般不只掌…

使用Speedion 3.0.17或更高版本轻松从事务中返回值

交易次数 在我以前的文章中&#xff0c;我写了关于如何使用Speedment轻松使用事务的方法&#xff0c;其中我们原子地更新了两个银行帐户。 众所周知&#xff0c;事务是一种将多个数据库操作组合到一个原子执行的单个操作中的方法。 但是事务不仅与更新数据库有关&#xff0c;而…

无线业务需求的线路设计以及拓扑图实现

MSC →\rightarrow→BSC →\rightarrow→ BTS ADM-1 →\rightarrow→ ADM-14 →\rightarrow→ ADM-16 边缘层 →\rightarrow→ 汇聚层 →\rightarrow→ 核心层 设计光缆链路时要注意的问题&#xff1a; 链路要适当长一些&#xff0c;减少中继设备接续造成的损耗尽可能多的使…

双代号网络图节点时间参数_管理和实务都考!快速学会单代号与双代号参数计算...

工程网络计划是二级建造师《建设工程施工管理》科目每年均会进行考核的高频考点&#xff0c;重点在双代号、单代号网络计划的概念及应用。主要题型为通过网络图或文字描述计算相关网络参数或确定关键线路&#xff0c;本篇就双代号、单代号网络计划相关参数的计算&#xff0c;以…

idea中maven执行install报错_IntelliJ IDEA Maven编译install时报错,无效的发行版:1.8

1.首先看java环境是否配置正确JAVA_HOME : C:\Program Files\Java\jdk1.8.0_92 //安装的Jdk路径PATH: %JAVA_HOME%\bin;按下"window"R 输入cmd 按下"ENTER" 输入java -version&#xff0c;如果出现了版本号等信息说明配置成功2.确认maven配…

gc可视化分析_GC内存可视化器教程–第一部分

gc可视化分析正如您从过去的文章中可能已经读到的那样&#xff0c;要获得的Java程序员的一项关键技能就是理解和评估JVM的运行状况的能力&#xff0c;例如Java堆内存占用量以及垃圾回收过程。 为了实现上述目标&#xff0c;所有JVM供应商&#xff08;Oracle&#xff0c;IBM等&…

涉及到IP地址的各种计算(CIDR/子网划分/IP地址范围的确定等)

1.判断是否属于子网 方法&#xff1a;如子网86.32.0.0/12&#xff0c;它的网络前缀有12位&#xff0c;把点十分制划为二进制展开&#xff0c;每一个点分隔开的是相邻的两组数字&#xff0c;每组数字有八个&#xff0c;你把他写在纸上数一下&#xff0c;扣掉前面的八位数字&…

go 变量大写_go语言如何将大写转小写

go语言将大写转小写的方法&#xff1a;首先创建一个go示例文件&#xff1b;然后定义一个字符串类型的变量&#xff1b;接着使用ToLower函数将大写的变量字符全部转成小写&#xff1b;最后使用print函数打印转换后的结果即可。本文操作环境&#xff1a;Windows7系统、Go1.11.2版…

为什么Spring的健康状况会再次下降,下降,上升,上升,上升和下降?

为什么 我们新JavaScript客户端应用程序会定期调用Grails后端的/health端点来确定离线状态。 事情开始变得“​​有趣”。 我们免费获得此端点&#xff0c;因为Grails基于Spring Boot&#xff0c;而Spring Boot带有一个名为Spring Boot Actuator的子项目。 这给了我们许多端点…

浅谈auto与decltype函数的区别

auto与decltype都是C里处理类型的指示符&#xff0c;它们的使用场景如下&#xff1a; autodecltype在我们需要给变量赋值的时候&#xff0c;简单的程序往往可以通过观察得出表达式的类型&#xff0c;但在一些大型程序中这样做往往是行不通的&#xff0c;为此可以使用auto指示符…

php mysql 快餐_用PHP+MYSQL做一个简单的点餐系统的后台,初学者. 请高手指点下如何实现后台添加菜名 餐馆 价格...

展开全部" name"cm" placeholder"菜名" type"text" />" name"cg" placeholder"餐馆" type"text" />" name"jg" placeholder"价格" type"text" />if…

三句话讲清楚直接初始化与拷贝初始化

直接初始化 int main() {int a(3);printf("%d",a); }拷贝初始化 int main() { int a3; printf("%d",a); }区别 直接初始化拷贝初始化不使用等号初始化一个变量就是直接初始化使用等号初始化一个变量就是拷贝初始化 直接初始化与拷贝初始化的使用一般以代…

redhat 9.0 mysql 配置_RedHat 9.0下Apache+PHP+MySQL服务器安装配置

一、安装环境操作系统&#xff1a;Linux RedHat 9.0web服务软件&#xff1a;Apache httpd-2.2.3.tar.gz数据库软件&#xff1a;MySQL-server-5.0.26-0.i386.rpm(服务端)MySQL-client-5.0.26-0.i386.rpm(客户端)MySQL-devel-5.0.26-0.i386.rpm(开发包)MySQL-shared-5.0.26-0.i38…

spark减少内存消耗_将内存消耗减少20倍

spark减少内存消耗这将是另一个故事&#xff0c;与我们分享有关内存相关问题的最新经验。 该案例是从最近的客户支持案例中提取的&#xff0c;在该案例中&#xff0c;我们遇到了一个行为异常严重的应用程序&#xff0c;该应用程序因生产中的OutOfMemoryError消息而死。 在连接了…

运筹视角下,体系化学习机器学习算法原理的实践和总结

文章目录 引言目标设计目标实践文章汇总经验总结一则预告 引言 上两周总结了我在体系化学习运筹学基础知识方面的个人经验&#xff0c;看过那篇文章的人可能知道&#xff0c;今年我还花了很多时间学习机器学习中各种模型的算法原理。 在工业应用中&#xff0c;机器学习和运筹…

C++输出一句话里面第一个单词并大写

这里主要是使用了decltype()函数来方便我们对数据处理&#xff0c;它可以自动的帮助我们推算变量的类型&#xff0c;防止后面出现溢出的错误 #include<iostream> #include<string> using namespace std; int main() {string s1("juice and rice");//迭代…

低版本mysql utf8mb5_记住:永远不要在 MySQL 中使用 UTF-8

最近我遇到了一个 bug&#xff0c;我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串&#xff0c;然后出现了一个离奇的错误&#xff1a;Incorrect string value: ‘\xF0\x9F\x98\x83 我用的是 UTF-8 编码的客户端&#xff0c;服务器也是 UTF-8 编码的&…

C++中使用cin读取一组词存入vector后将其大写打印

今天在复习C的时候偶然看到这个题目&#xff0c;要求是使用C完成大写转换然后存放到vector中去&#xff1a; 这里也是使用了一个string库&#xff0c;但不知道为什么string库里并没有自带大小写转化&#xff0c;只得使用algorithm库的transform函数来进行大小写转化 #include&…

使用Logstash,JDBC将数据聚合并索引到Elasticsearch中

介绍 在我以前的帖子在这里和这里我展示了如何使用JDBC和Elasticsearch JDBC进口商库从SQL数据库索引数据到Elasticsearch。 在这里的第一篇文章中&#xff0c;我提到了使用导入程序库的一些缺点&#xff0c;这些缺点我已在此处复制&#xff1a; 不支持ES版本5及更高版本 嵌套…