- 浏览: 230360 次
- 性别:
- 来自: 杭州
最新评论
-
zjilvufe:
顶!但是感觉10*60*1000,比较好,可以避免时间差问题。 ...
memcache过期时间的一点小小的分析 -
zjilvufe:
顶!但是感觉10*60*1000,比较好,可以避免时间差问题。 ...
memcache过期时间的一点小小的分析 -
zjilvufe:
顶!但是感觉10*60*1000,比较好,可以避免时间差问题。 ...
memcache过期时间的一点小小的分析 -
kentkwan:
完全看不出哪里异步新特性了 新开一个线程 servlet3以下 ...
tomcat7和Servlet3之异步特性体验 -
5cai:
D:\install\tomcat-7.0.29\webapp ...
tomcat7和Servlet3之异步特性体验
现在网站高并发情况下,上个关键功能点都需要进行压力测试,进行性能调优,如何去做呢?来个实战吧
现在压力测试jmeter使用也非常普遍了,对于一些页面测试的,登录cookie等模拟的直接用jmeter就能做到,也可以用badboy录制脚本就能直接使用,但对于hessian接口的压测就比较麻烦,下面以对hessian接口压测为列
jmeter提供了对java等测试的扩展,但需要自己写脚本,建立个java工程,引入
可见jmeter充分预留了扩展功能。还有引入依赖的hessian的jar,以及hessian接口的jar编写脚本如下:
//继承AbstractJavaSamplerClient public class hessianTest extends AbstractJavaSamplerClient{ //hessian调用地址 private static String url = "http://10.20.147.182:8080/hessian/remoting/userService"; MyService collect = null; HessianProxyFactory factory = new HessianProxyFactory(); public int id; @Override public void setupTest(JavaSamplerContext arg0) { //获取jmeter传入参数 id=arg0.getIntParameter("id"); try { collect = (MyService) factory.create( MyService.class, url); } catch (MalformedURLException e) { e.printStackTrace(); } } @Override public SampleResult runTest(JavaSamplerContext arg0) { SampleResult sp = new SampleResult(); sp.sampleStart(); User rt = null; try { rt = collect.getUser(id); } catch (Exception e) { sp.sampleEnd(); sp.setSuccessful(false); return sp; } sp.sampleEnd(); if(rt.getId()==id) sp.setSuccessful(true); else sp.setSuccessful(false); return sp; } @Override public void teardownTest(JavaSamplerContext context) { super.teardownTest(context); } }
把此脚本打包jar,连同hessian的jar,以及hessian接口的jar,放入jmeter的lib\ext目录下,这样jmeter才能调用到脚本。启动jmter,新建线程组,java请求和聚合报告如下
java请求中可以看到,刚才新建的脚本,在类名称当中能选择了,id是可以依据需要设置,后台脚本能够动态读取的,这就是需要压力测试的脚本,把此脚本保存在bin目录下,
在调试的时候可以使用在windows下界面,真正压力测试肯定要在lunix下执行
下面直接配置jamon和jconsle,jconse配置很简单,只要在tomcat加上参数
JAVA_OPTS="$JAVA_OPTS -Xms64m -Xmx128m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1688 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
就能在1688端口直接上,监控jvm运行情况
至于jamon,就需要进行如下操作
1、tomcat的server.xml中加上
<Engine name="Catalina" defaultHost="localhost">下面加,这是tomcat6的,其他版本依据其他的配置
<Valve className="com.jamonapi.http.JAMonTomcatValve"/>
2、lib中加jamon-2.7.jar jamontomcat-2.7.jar
3、webapp加项目jamon,可直接去附件下载
4、hessian接口项目需要加spring配置
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Service</value> </list> </property> <property name="interceptorNames"> <list> <value>performanceMonitorInterceptor</value> </list> </property> </bean> <bean id="performanceMonitorInterceptor" class="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor"> <property name="logTargetClassInvocation" value="true" /> <property name="trackAllInvocations" value="true" /> </bean>
其中的*Service是指拦截的接口,
log4j.properties需要添加如下配置
log4j.logger.org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor =TRACE
这样就能够通过jamon监控每个方法的执行时间了。
如果你的日志调成info级别,你就能看到jamon监控方法执行的日志,如:
2010-11-10 11:46:54,436 TRACE[JamonPerformanceMonitorInterceptor.java:110] : JAMon performance statistics for method [hessian.server.impl.SleepServiceImpl.synchronizedMork]:
JAMon Label=hessian.server.impl.SleepServiceImpl.synchronizedMork, Units=ms.: (LastValue=90117.0, Hits=108.0, Avg=53088.28703703704, Total=5733535.0, Min=3001.0, Max=115330.0, Active=0.0, Avg Active=17.814814814814813, Max Active=30.0, First Access=Wed Nov 10 11:02:44 CST 2010, Last Access=Wed Nov 10 11:46:54 CST 2010)
启动tomcat,进入jmeter下bin目录执行之前保持的脚本
./jmeter -n -t user.jmx -l user.jtl
开始压力测试
hessian接口的测试代码如下:
public User getUser(int id) { //log.info(" id==" + id); sleepService.sleep(); sleepService.consumeMemery(); sleepService.synchronizedMork(); User u = new User(); return u; } public class SleepServiceImpl implements SleepService{ private static Object o=new Object(); private List<User> list=new ArrayList<User>(); public void sleep() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } public void consumeMemery(){ for(int i=0;i<1000;i++){ list.add(new User()); } } public void synchronizedMork() { synchronized(this){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
三个方法分别模拟了响应时间长,内存溢出,锁等情况!直接压就可以发现如下结果
summary + 1 in 8.1s = 0.1/s Avg: 8113 Min: 8113 Max: 8113 Err: 0 (0.00%)
summary + 3 in 16.4s = 0.2/s Avg: 13380 Min: 10343 Max: 16419 Err: 0 (0.00%)
summary = 4 in 17.3s = 0.2/s Avg: 12063 Min: 8113 Max: 16419 Err: 0 (0.00%)
summary + 4 in 28.6s = 0.1/s Avg: 24014 Min: 19456 Max: 28574 Err: 0 (0.00%)
summary = 8 in 29.3s = 0.3/s Avg: 18039 Min: 8113 Max: 28574 Err: 0 (0.00%)
summary + 3 in 37.7s = 0.1/s Avg: 34649 Min: 31611 Max: 37687 Err: 0 (0.00%)
summary = 11 in 38.3s = 0.3/s Avg: 22569 Min: 8113 Max: 37687 Err: 0 (0.00%)
其中0.1/s Avg就是tps,也就是系统的吞吐量,可见非常的低,查看jconse,
名称: http-8080-28
状态:BLOCKED 在 hessian.server.impl.SleepServiceImpl@7d7636ca 上,拥有者: http-8080-26
阻塞总数:2 等待总数: 1
堆栈追踪:
hessian.server.impl.SleepServiceImpl.synchronizedMork(SleepServiceImpl.java:29)
sun.reflect.GeneratedMethodAccessor71.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
当然这些线程信息也可以通过kill -3 javaid查看到
可以看到很多的线程是BLOCKED 的,需要优化,也可以进入jamon,http://ip:端口/jamon
通过上图,可以看到什么方法非常耗时,就可以进行专门优化,把sleep和synchronizedMork注释,再运行压,
你会发现jconse很快就会报内存溢出,java.lang.OutOfMemoryError: Java heap space
在lunix下通过top+1你会看到有个cpu使用率在100%左右,那是一直在gc却已经不行了
原来是那个consumeMemery在消耗内存,再优化掉后压
你会发现
summary + 13977 in 3.9s = 3578.3/s Avg: 3 Min: 0 Max: 165 Err: 0 (0.00%)
summary + 102067 in 10.1s = 10154.9/s Avg: 2 Min: 0 Max: 118 Err: 0 (0.00%)
summary = 116044 in 13.9s = 8344.9/s Avg: 2 Min: 0 Max: 165 Err: 0 (0.00%)
summary + 107456 in 10.0s = 10739.2/s Avg: 2 Min: 0 Max: 25 Err: 0 (0.00%)
summary = 223500 in 23.9s = 9349.1/s Avg: 2 Min: 0 Max: 165 Err: 0 (0.00%)
summary + 103882 in 10.0s = 10379.9/s Avg: 2 Min: 0 Max: 29 Err: 0 (0.00%)
summary = 327382 in 33.9s = 9655.6/s Avg: 2 Min: 0 Max: 165 Err: 0 (0.00%)
tps一下升到了9k多,这样一台机器就能扛住每秒9k的访问量了,那一天能支持多少pv呢?你自己算,当然这是模拟
通过这样循环测试优化,再进行稳定性测试,最终达到你期望的结果
服务器瓶颈经验数据:
– file server: network>memory>disk io
– static resources server: network>memory>cpu
– java web server: JVM>cpu>memory
– db server: memory>disk io>cpu>network
– cache server: memory>cpu>network
当然还有其他的监控工具,如javamelody,还有jvm的监控jvisualvm等,或者直接用命令监控,如jmap,jstat等等
总之达到你期望的目标,工具是辅助发现问题,优化才是根本
压测前,要对lunix参数调整一下/etc/sysctl.conf
fs.file-max = 65535
#Allow for more PIDs
kernel.pid_max = 65536
#Increase system IP port limits
net.ipv4.ip_local_port_range = 2000 65000
# TCP and memory optimization
# increase TCP max buffer size setable using setsockopt()
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# increase Linux auto tuning TCP buffer limits
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
修改后:
sysctl -p /etc/sysctl.conf // 作用:重新载入/etc/sysctl.conf文件
Load高的分析点: 1. GC 2. IO(vmstat) 3. 线程Blocked
- jamon.war (568.2 KB)
- 下载次数: 111
发表评论
-
facebook network-connection-class初探
2016-01-22 16:23 2220背景 网络质量 ... -
TIME_WAIT和CLOSE_WAIT(转)
2013-09-06 09:39 2428netstat -n | awk '/^tcp/ {++S ... -
nginx upstream的5种配置方式
2010-08-31 09:45 24411、轮询(默认) 每个 ... -
apache ab压力测试
2010-08-18 19:59 1497格式: ./ab [options] [http://]hos ... -
Keepalived + nginx 双备份
2010-08-12 15:48 5922配置一: 以前写过一篇,nginx+keepali ... -
memcache过期时间的一点小小的分析
2010-08-11 13:05 30603如果你清楚知道这一点,那就跳过吧!如果你不太清楚原因,那就 ... -
linux top
2010-07-29 18:04 1554linux top-统计信息区 top:动态观察进 ... -
memcached 缓存对象需要修改属性时候的陷阱
2010-07-23 09:02 1926类修改后需要重新计算serialVersionUID值 现 ... -
nginx 安装选项
2010-05-27 13:50 2265yum -y install pcre-devel opens ... -
debug分析问题 jps jmap jstat starce pmap pstack
2010-03-29 11:09 3724linux系统下 pstree:树 ... -
频繁分配释放内存导致的性能问题的分析(转载)
2010-03-29 09:25 2030现象 1 压力测试过程中 ... -
对jboss的一点想法
2010-03-11 20:49 995jboss是对tomcat的优化,以前一直使用tomcat,最 ... -
杂记,常用记录
2010-02-25 16:19 1388~ 按位非(NOT) & 按位与(AND) | 按 ... -
分页的一点想法
2010-02-01 13:44 1607在基于saas结构的管理管理系统中,往往数据量会比较大,尤 ... -
我为什么不建议使用OpenDNS和Google Public DNS(转载)
2009-12-08 10:26 3515今天看到 DNSpod 某位仁兄从用户视角对 Google P ... -
svn This client is too old to work with working copy '.'; please get a newer ...
2009-11-18 16:07 4537svn up svn: This client is too ... -
Lucene开发中的总结
2009-11-06 15:37 13791、Lucene搜索结果排序和sql排序结果不一致 系 ... -
分页的思考
2009-11-02 18:58 52在基于saas结构的管理管理系统中,往往数据量会比较大 ...
相关推荐
将 jpgc-graphs-basic-2.0.zip 解压缩后只有一个 lib 目录,该目录下有一个 ext 文件夹和一个 jmeter-plugins-cmn-jmeter-0.3.jar 包,ext 文件夹中有 jmeter-plugins-graphs-basic-2.0.jar 和 jmeter-plugins-...
Apache jmeter jmeter-plugins-cmn-jmeter-0.6.jar 下载
apache-jmeter-5.6.3.zip apache-jmeter-5.6.3.tgz apache-jmeter-5.6.3_src.zip apache-jmeter-5.6.3_src.tgz
【性能测试-Jmeter.pptx】的培训内容涵盖了性能测试的多个重要环节,包括数据制造、性能测试方案设计、脚本执行、性能监控与调优以及编写性能测试报告。以下是对这些知识点的详细阐述: 1. **如何制造数据**: - ...
Apache JMeter (apache-jmeter-5.5.zip)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache JMeter...
总的来说,"apache-jmeter-5.0压力测试安装包"是一个全面且强大的性能测试工具,无论你是想测试接口的稳定性还是Web服务的并发能力,都可以借助这个工具得到详尽的数据和分析。只要根据自身的测试需求进行适当的配置...
《全栈性能测试修炼宝典JMeter实战》是一本深入探讨性能测试技术,特别是使用Apache JMeter工具进行实战演练的专业书籍。这本书旨在帮助读者全面掌握性能测试的核心概念、方法论以及JMeter的具体应用,从而提升在...
Apache JMeter是一款强大的、开源的压力测试工具,专为评估应用程序的性能和稳定性而设计。它最初是为了测试Web应用,但随着时间的发展,其功能已经扩展到支持多种协议和服务,包括HTTP、FTP、SMTP、JDBC、SOAP、RMI...
Apache JMeter是一款强大的开源性能测试工具,主要用于模拟大量并发用户对Web应用、数据库服务器、FTP服务器等进行压力和负载测试。在"apache-jmeter-5.2.tgz"这个压缩包中,包含了JMeter 5.2版本的全部组件,适用于...
标题提到的两个压缩包文件分别是"apache-jmeter-3.0.zip"和"apache-jmeter-3.0_src.zip",它们代表了JMeter 3.0的不同版本。 1. **apache-jmeter-3.0.zip**:这是一个二进制发行版,包含了预编译的JMeter程序,用户...
JMeter是开源的,由Apache软件基金会维护,广泛应用于性能测试领域,尤其在Web应用的负载和压力测试上。它允许用户创建灵活且可扩展的测试计划,模拟多个并发用户执行各种操作,如点击链接、提交表单或执行其他与Web...
它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等。JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体...
Apache JMeter (apache-jmeter-5.5.tgz)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache JMeter...
总的来说,Apache JMeter是企业级应用性能测试的得力工具,无论你是进行功能测试、性能测试还是稳定性测试,都能提供全面且灵活的解决方案。通过熟练掌握JMeter,你可以有效地评估系统在高负载下的表现,找出瓶颈,...
JMeter主要用于对各种类型的应用程序进行性能和负载测试,帮助开发者和测试人员评估系统在高并发情况下的稳定性和响应速度。 JMeter的设计目标是模拟大量用户并发执行操作,从而测试服务器、网络或对象的性能。它...
这个最新的Windows版本,"apache-jmeter-5.4.zip",提供了许多增强的功能和改进,使得性能测试过程更加高效和精确。 1. **Apache JMeter介绍**:Apache JMeter是开源软件,遵循Apache Software Foundation的许可证...
因此要确保项目上线稳定可靠,必须要性能压力测试,便于早发现服务问题,早解决性能问题。 降本提效 ,始终是技术人员在企业中最能体现价值的核心技能。 当然,随着公司规模的扩张,部门扩张对每个人的要求不再是...
Apache JMeter (apache-jmeter-5.4.3.tgz)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache ...
Apache JMeter是一款强大的开源性能测试工具,主要用于对Web应用程序进行负载和压力测试。它由Apache Software Foundation开发并维护,广泛应用于测试各种服务器、协议和服务的性能。"apache-jmeter-5.6.2.zip"是...