一:性能概念
1.概念:性能测试就是压力测试和负载测试的总和
应用场景:一门户网站能够支持多少用户并发操作(注册、写博客、看照片),看看支持多少并发
2.:主要指标
使用者:响应时间(实质指事物)、稳定性‘
系统的角度:网络、硬件、软件的配置情况(应用服务器的jvm的配置、数据库中的my.int配置、系统)
主要指标:响应时间、吞吐量、并发用户、资源利用率(cpu、内存使用)
3.实施过程
了解测试项目的需求-分析测试需求-编写测试用例-相关资源准备-脚本维护-执行脚本-分析结果-性能调优
例如:有2500用户的需求,并发500就可以了,满足二八原则,有10000的用户,活跃用户大概2000,并发2000就可以了;只测试核心业务模块就可以了。
4:性能测试需求(测试目标)
(1).响应时间:复杂查询时间小于15s,简单查询小于5秒
(2)持续运行时间:24、48小时
(3)并发用户数:10000用户2000并发量
(4)资源计数器:cpu平均时间不得超过85%;可以使用内存不得低于100m
5:具体观测
(1)服务器linux/window:cpu、内存、load、i/o
(2)应用服务器:tomcat、apache(线程、连接数、日志)、netty
(3)应用:JVM内存、日志、FULL\gc频率
(4)数据库:缓存命中、索引、单条SQL性能、数据库线程数、数据池连接
(5)网络:吞吐量、吞吐率
二:性能监测方法和性能监测工具的应用
1.linux系统
常用命令:1)whereis ***;2)ps -ef | grep tomcat 查找应用部署在哪里 3)uname -r 查内核 4)sudo
命令大全:http://www.php100.com/html/webkaifa/Linux/2009/1106/3485.html
1)linux下高并发socket最大连接数所受的各种限制
linux平台上,无论编写客户端程序还是服务端程序,在进行高并发tcp链接处理时,最高的并发用户数都受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个tcp链接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开文件数限制:使用命令 ulimit -a (压到几千就用到了,几百用户到)
http://linuxguest.blog.51cto.com/195664/362366
2)top命令
3)使用
(A) 一边加压,一边打开linux的日志(tail -f catalina.out),一边打开top查看资源利用率;一边观察java应用服务器的线程执行情况 ps -ef | grep java 找到应用程序进程号,使用jstack 20332 >23096.txt 观察线程的实际运行情况
(B)之后加压观察,cpu如果增加很多,线程出现很多waiting、locked(资源被占用,相当于打起来)等现象 http://www.cnblogs.com/sixiweb/archive/2012/11/25/2787591.html
(C)改变线程方式以及增加线程池数
BIO(同步堵塞,直接排队等)改变成NIO(异步堵塞,拿牌子坐着等叫)更高级的是AIO(异步非堵塞,如饿了吗直接送上来),怎么调呢:conf/server.xml下
URIEncoding="utf-8"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
connectionTimeout="20000"
acceptCount="300"
maxThreads="300" //改变线程大小
maxProcessors="1000"
minProcessors="5"
useURIValidationHack="false"
compression="on" //图片的是否压缩,压缩大小
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
redirectPort="8443"/>
(D)catalina.sh JVM调优 Heap(堆、整个程序运行的内存大小)和Non-heap(非堆、系统自己的空间)内存
如果遇到:java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: PermGe space
-Xms128m JVM初始分配的堆内存,默认是物理内存的1/64
-Xmx512m JVM最大允许分配的堆内存,按需分配,默认是物理内存的1/4,一般设置Xms=Xmx,防止GC频繁回收
-XX:PermSize=64M JVM初始分配的非堆内存
-XX:MaxPermSize=128M jvm允许的分配最大非堆内存,按需分配;两个最大值之和要小于pc的内存
例如:在/usr/local/apache-tomcat-5.5.23/bin 目录下的catalina.sh添加,位置cygwin=false前
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
(E)如果遇到timeout 看是不是有网络引起的可以 cmd ping 一下 大概需要多久,一般局域网都是2、3秒,超过了一般十几秒就是网络的带宽
可以设置运行时:Advanced Options HTTP 下面的 Http-request connect timeout Http-request receive timeout 120时间的调整
注:先看进程的状态,如果是锁了,可以看到日志显示的具体哪个进程或者是不是数据库锁了,调整进程大小,等待还好,但是有colsed就不好了;之后在调整内存大小,之后再有问题,找开发一起调整。
(F)数据库锁了,之后的优化,数据库做线程池优化;或者做缓存(先把数据库的数据加载出来,每次访问的时候先访问缓存,没有在查数据库)
三:以后要学习的
linux中检测:加虚拟内存swap
自动化的检测工具nmon、top、vmstat、jmap、Jprofiler
JVM:jconsole、jstat、jstack、jmap、jprofiler
数据库监测:慢查询、连接池、缓冲区、Monyog、spotli
redise性能监测