性能调优
性能测试
负载测试
应用系统接收正常情况的访问量,一开始访问量低,然后逐步增加,直至应用系统达到一个较高的负载。通过负载测试,可以知道应用系统随着并发用户数的增加,其响应时间的变化情况,从而确定系统的伸缩性以及在访问高峰系统响应时间是否仍然合理
压力测试
系统接收异常情况的用户访问量,正常访问量的数倍或者数十倍,并持续增加负载,直至系统崩溃,通过压力测试,可以获知系统崩溃的临界负载以及在极端条件下才会出现的系统BUG
持续运行时间测试
需要让应用系统不间断运行数天甚至更久,而且模拟正常用户访问系统,可以发现那些负载测试中不易发现的BUG,内存泄漏等问题。
性能测试工具
ApacheBench、Apache JMeter、Grinder、Pylot、WCAT、Web Polygraph
查看网络使用 : nload、bmon、slurm
查看每个套接字iftop、iptraf、tcptrack、pktstat、newwatch
查看内存/CPU top命令
- -h 输出当前版本信息
- -c 切换显示命令名称和完整命令行
- -d 指定每两次屏幕信息刷新之间的时间间隔
- -o 指定显示项目的顺序
- -p 通过指定监控进程ID来仅仅监控某个进程的状态
- -u 指定显示用户进程
JVM运行状况 jstat
jmap用于打印进程的堆内存详情、产生对象数量以及内存使用情况,可以用于检查内存泄漏、对象不合理创建及销毁的问题
对于jmap -dump生成的hprof文件,可以使用jhat命令查看,jhat [options] head-dump-file 在浏览器中输入localhost:7000查看结果 也可以使用mat工具来分析dump文件
还可以使用jstack在代码级别帮助我们定位问题,可以输出指定进程或远程主机的栈信息
两个可视化工具,JConsole(使用jconsole命令)和VisualVM(使用jvisualvm命令)