在做任何测试时,都需要对测试的结果有一个直观的体现,可能是页面上的报错、乱码、功能无法实现等等。。。。在进行性能测试时,我们需要时刻关注施压端、应用服务器、数据库服务器等设备的表现情况,如果有第三方的监控软件,我们可以通过软件直观的进行分析,如果没有第三方的软件,则可以用过自身携带的参数进行查看
此处只表述个人接触的设备,欢迎探讨对其他设备的监控
在使用Java进行开发中,遇到的性能问题包括:
1)OutOfMemoryError,内存不足
2)内存泄露
3)线程死锁
4)锁争用(Lock Contention)
5)Java进程消耗CPU过高
。。。。。。。等等
我们可以根据数据的流向一点一点的排查问题的原因,然后根据不同设备的特点制定测试场景及脚本。
数据流向:用户——网络—应用服务器(tomacat)——后台数据库—数据落地(数据是否写入到数据库或者查询到)
一、 基本性能监控指标及问题
基本指标1、对于Windows的系统来说,直接使用:任务管理器进行监控即可
2、对于Linux的系统来说,可以使用相应的命令进行查看,一般的服务器均使用Linux系统。
二、性能命令(Top、vmstat、jsatack(堆日志)、jstat -gcutil(E,S0、 S1)、free、fdisk)
1、top 实时查看进程对系统资源使用情况(CUP、内存、I/O)
top命令load average:分别表示1分钟、5分钟、15分钟CPU的使用平均值
2) 在top之后 按1 查看单个CUP的详细信息:
单个CPU其中:
us:用户占用的cup
sy:系统占用的cpu
id :cpu处在空闲状态的时间百分比。
wa:IO等待所占用的CPU时间的百分比。
wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的
2、vmstat、iostat 查看:memory、CPU 、IO、内存使用情况
两个命令查看到的数据与Top类似
用法:vmstat 【n】+ 【m】 :每隔n秒钟刷新,抓取m次数后退出。
swpd:可用的虚拟内存交换内存
free:空闲内存,空闲越多越好
3、jstack 检查死锁
用法:jstack+进程ID
结果标志:fand deadlock
死锁查询然后从打印的内容中进行查找,是否有死锁
4、jstat -gcutil 查看GC的使用情况
用法:jstat -gcutil +进程ID+时间(毫秒)+加上统计的次数
查看GC关注指标:YGC、FGC
如果有频繁FGC,需要dump下GC日志(GC日志,在配置jvm参数的时候,会配置GC日志地址)
5、free查看内存使用情况
PS:Buffer与cash的却别
文件属性:目录、权限的信息暂时存放在buffer ,文档内容存储在cash 中
6、fdisk 磁盘管理
可以进行磁盘的新增、删除、修改
7、df -h 查看分区使用情况
df -h每一列分别对应:分区名、大小、使用量、剩余量、使用百分比、挂载点
PS:tmpfs是个特殊分区,可以理解为2.6内核带来的新功能,更好、更高的提高内存和虚拟空间的技术