我一直在使用JMeter为生产服务器生成负载以测试我的应用程序。 该测试计划具有13个以上的HTTP采样器以发出不同的请求,并具有一个正则表达式提取器以从响应中提取一些值。 此值在连续的HTTP Sampler中使用。 这个测试用例简单而直接。 最初,我使用200个JMeter线程来模拟200个用户。 Server能够轻松处理许多请求,但是当线程数增加时,它就无法无限地处理和等待。 当然发生了什么事。 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线程数。 我通过放置以下配置快速编辑了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" (发送答复)状态下有大量连接。 这可能是由其他原因引起的。 我试图用Google搜索它,但找不到任何确定的解决方案。 但是有一件事可以肯定,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时,却无法处理负载。 如果您对此行为有任何解释,请在评论部分中分享。

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

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

Apache Server和JMeter调试相关推荐

  1. apache jmeter_Apache Server和JMeter调试

    apache jmeter 我一直在使用JMeter为生产服务器生成负载以测试我的应用程序. 该测试计划具有13个以上的HTTP采样器以发出不同的请求,并具有一个正则表达式提取器以从响应中提取一些值. ...

  2. 用Apache Server配置php,cgi服务器

    现在有越来越多的个人主页站长需要了解如何如何在windows下配置自己的php,cgi服务器,以方便本地调试cgi和php的程序. 我们可以用Apache(windows版)来一次搞定:以下由我自己整 ...

  3. httpd开启status模块_开启Apache Server Status

    Apache的日志又多又杂,如果靠分析日志或者查看服务器进程来监视Apache运行状态的话,比较繁冗.其实在Apache 1.3.2及以后的版本中就自带一个查看Apache状态的功能模块server- ...

  4. ArcGIS Server SOI的调试与触发

    本人在完成创建水印出图SOI(https://blog.csdn.net/u010520626/article/details/50899642,感谢yizhi鬼的实验记录)的实验编码后,一度懵逼不知 ...

  5. socket server 用telnet调试正常,用SocketTool工具不行

    socket server 用telnet调试正常,用SocketTool工具不行 ##现象 输入ECHO 1 后按回车 回复 1 用sockettool连接服务器 填完数据,点击发送,并没有收到回复 ...

  6. Apache Server搭建图片服务器

    Apache Server搭建图片服务器 导读:公司来了几个应届生,经常问我图片应该上传到哪里,是直接在工程下面创建一个upload_image文件夹,然后将图片上传到这个upload_image文件 ...

  7. 403 Forbidden You don‘t have permission to access this resource. Apache Server at IP Port 80的解决方法

    ECS下载站Forbidden You don't have permission to access this resource. Apache Server at IP Port 80的解决方法 ...

  8. Zend Studio 如何配置本地apache服务器使用xdebug调试php脚本

    本地环境搭配: apache 2.2 安装位置:D:/program files/Apache Software Foundation/Apache2.2 php 5.2.10 安装位置:C:/php ...

  9. [java]apache server与 tomcat 的区别以及整合

    Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成.由于有了Sun的参与和支持,最新的 ...

最新文章

  1. 计算机二级评卷看结果还是步骤,计算机二级评分严格吗 步骤错了有分吗
  2. PostgreSQL在何处处理 sql查询之六十六
  3. Python:python语言中与时间有关的库函数简介、安装、使用方法之详细攻略
  4. 易企秀如何生成图片_易企秀可以导出图片吗
  5. bmp转换tiff c++代码_Creative Convert for Mac(文件格式转换工具)
  6. Spring IoC 源码系列(一)BeanDefinition 初始化与注册
  7. c++语言函数strcpy,C++中函数的安全版本的意义及strcpy函数的功能和差别(图)
  8. 2016-2017-2学期《程序设计与数据结构》教学进程
  9. input内的字体颜色_嘉兴市硅胶喷涂颜色油订制
  10. Linux 系统版本查询
  11. 学习微信公众号oauth2.0
  12. 发生内部错误。请与 microsoft 支持部门联系。_设计变更、工程签证、确认单、工程洽商、联系单、会签的区别,一文搞懂...
  13. .net 版农业银行接口
  14. 计算机械效率的公式四种,初级中学物理计算公式定律整编汇总.doc
  15. UVM——TLM通信机制(port、export、imp + analysis_port)
  16. 吊打何同学?猛肝24小时,用6000元成本打造 AirDesk!
  17. 微信支付及支付宝支付开发指南
  18. javaSE探赜索隐之三--<类与对象的爱恨情仇下>
  19. egret(白鹭引擎) 学习历程(二)
  20. 计算机系统xp和w7,告诉你十年老电脑装xp还是win7

热门文章

  1. php 去掉url中的index.php,php 去掉url中的index.php
  2. qq空间说说服务器维护,如何解决QQ空间说说发表不了
  3. 转: 深入浅出-网络七层模型
  4. 单件模式(单例模式)
  5. java –cp ./:_成为Java流专家–第2部分:中级操作
  6. java parse_Java命令行界面(第9部分):parse-cmd
  7. slf4j 记录日志文件_教程:正确的SLF4J日志记录用法以及如何检查它
  8. java 1.8新增功能_睡觉时:新增的Java 8新增功能
  9. java 性能调优_Java性能调优调查结果(第二部分)
  10. javafx 和swing_Swing和JavaFX:使用JFXPanel