用户响应时间=服务器响应时间+网络时间java
(1)总体系统CPU利用率mysql
(2)内存利用率linux
(3)磁盘I/O的利用率和延迟ios
(4)网络利用率web
CPU:top、vmstat、uptime、sarsql
通常咱们指望会指望系统平都可用的CPU很多于20%数据库
JVM自带监控命令:jstat、jmap、Jvisualvm、JConsole浏览器
Mysql监控工具:Spolight、Monyog、及命令行工具缓存
total used free buffers cached tomcat
Mem 物理内存总量 使用的物理内存总量 空闲的物理内存总量 用做内核缓存的内存量 缓存的交换区总量
swap 交换区总量 使用的交换区总量 空闲交换区总量
可用物理内存=Mem(free+buffers+cached)
当物理内存不够时,会使用swap分区,因此性能测试过程当中须要关注swap和mem的使用状况。物理内存不够,大量的内存置换到swap空间,可能致使CPU和I/O的瓶颈。
I/O比较频繁(读或者写)的时候,若是I/O得不到知足会致使应用的阻塞。
须要考虑I/O的TPS、平均I/O数据、平均队列长度、平均服务时间、平均等待时间、IO利用率(磁盘Busy Time%)等指标
不少时候,这些因素彼此之间是相互依赖的,任何一个处于高负载状态,均可能致使其余资源受到影响,如:
(1)大量的网络吞吐量致使占用CPU的资源增大,此时系统要分出部分资源进行软件终端的处理
(2)大量的CPU开销会尝试更多的内存使用
理解并分析当前系统的特色很重要,多数系统对应的应用类型分为如下两种:
(1)IO范畴
大量数据处理的过程,不对CPU及网络发起更多请求。如数据库软件(mysql、Oracle)
(2)CPU范畴
批量处理CPU请求及数学计算的过程。如:webserver、mailserver等。
CPU利用率大于50%是,须要注意了;大于70%,须要密切关注;高于90%,状况比较严重了。
监控命令:vmstat、sar、dstat、mpstat、top、ps
类型 | 度量方法 | 衡量标准 |
使用状况 | 一、vmstat 统计1-%id的计数 二、sar -u 统计1-%idle的计数 三、dstat 统计1-%idl的计数 四、mpstat -P ALL 统计%idle的计数 五、ps 统计CPU的计数 |
注意>=50% 告警>=70% 严重>=90% |
满载 | 六、vmstat的r计数器> cpu逻辑颗数 七、sar -q ,“runq-sz”>cpu逻辑颗数 八、dstat -q ,“run”>cpu逻辑颗数 |
运行队列大于1时,证实已经有必定的负载了,不过这个计数也不绝对,须要进一步分期其余的资源状况来判定是否CPU已经满负荷运做 |
错误 | 九、perf工具捕获处理器的错误信息,需处理器支持 | 安装perf:yum install perf* 需处理器支持 |
监控命令:vmstat、sar、dstat、free、top、ps等
类型 | 度量方法 |
衡量标注 |
使用状况 | 一、free 查看使用状况 二、vmstat 三、sar -r 四、ps |
注意>=50% 告警>=70% 严重>=80% |
满载 | 五、vmstat的si/so比例辅助swapd和free利用 六、sar -W 查看次缺页数 七、查看内核日志有误OOM机制kill进程 八、dmesg | grep killed |
一、so数值大,且swapd已经占比很高,内存确定已经饱和 二、sar命令次缺页多意味已经在不定地和swap打交道,证实内存已经饱和 三、但内存不够用会出发内核的OOM机制 |
错误 | 九、查看内核有无physical failures 十、经过工具如valgrind等进行检查 |
有计数 |
监控命令:sar、ifconfig、netstat,以及查看net的dev速率,经过查看发现收发包的吞吐率达到网卡的最大上限,网络数据报文有由于这类缘由而引发的丢包、阻塞等现象都证实当前网络可能存在瓶颈。在进行性能测试是为了减少网络的影响,通常咱们都在局域网中进行测试执行。
类型 | 度量方法 | 衡量标准 |
使用状况 | 一、sar -n DEV 的收发计数大于网卡上限 二、ifconfig RX/TX宽带超过网卡上限 三、cat /proc/net/dev的速率超过上限 四、nicstat的util基本满负荷 |
一、收发包的吞吐速率达到网卡上限 二、有延迟 三、有丢包 四、有阻塞 |
满载 | 五、ifconfig dropped 有计数 六、netstat -s "segments retransmited"有计数 七、sar -n EDEV,rxdrop/s txdrop/s有计数 |
统计的丢包有计数证实已经满了 |
错误 | 八、ifconfig,“errors” 九、netstat -i,RX-ERR TX-ERR 10 sar -n EDEV,rxerr/s txerr/s 十一、ip -s link, “errors” |
错误有计数 |
监控命令:sar、iostat、iotop
类型 | 度量方法 | 衡量标准 |
使用状况 | 一、iostat -xz,“%util” 二、sar -d,“%util” 三、iotop的利用率很高 四、cat /proc/pid/sched | grep iowait |
注意>=40% 告警>=60% 严重>=80% |
满载 | 五、iostat -xnz,“avgqu-sz ”>1 六、iostat await>70 |
IO已经有满载嫌疑 |
错误 | 七、dmseg 查看io错误 八、smartctl /dev/sda |
有信息 |
能够经过uptime、top、w等命令分析
系统时间 up:主机运行时间 当前登陆用户数 平均负载:过去1分钟、5分钟、15分钟
(1)运行时间越长,系统越稳定
(2)当前用户数,用w命令能够更详细
(3)系统的平均负载只在特定时间间隔内运行队列中的平均进程数。
通常建议每一个CPU内核平均负载不大于0.8;若大于1~3之间,若是系统其余资源都很正常,可接受;若>5,则系统性能有问题
uptime是从文件/proc/loadavg文件里面读取的。统计过去1分钟、5分钟、15分钟平均负载:
[dcai@localhost ~]$ uptime | awk '{print $(NF-2)}'
0.00,
[dcai@localhost ~]$ uptime | awk '{print $(NF-1)}'
0.02,
[dcai@localhost ~]$ uptime | awk '{print $NF}'
0.12
top以外,还有htop、dstat、nmon、glances等
一、第一行:uptime同样
二、第二行:运行状态信息
运行、睡眠、中断、僵死
三、第三行:CPU信息
us:用户占用CPU百分比
sy:系统占用CPU百分比
ni:优先级(用户进程空间内改变过优先级的进程占用CPU百分比),范围-20(最低优先级)~19(最高优先级)
id:空闲CPU百分比
wa:等待输入输出的CPU时间百分比
hi:硬中断占用的CPU百分比
si:软中断占用的百分比
咱们比较关注:us、sy、id、wa、hi、si这六个数值
(1)按下键盘1,能够显示每一个逻辑CPU的使用状况
(2)id持续太低时,系统迫切须要解决CPU资源问题
(3)wa使用率太高,须要考虑IO性能是否有瓶颈,能够用iostat,sar等命令进一步分析
(3)hi使用率太高,能够分析文件 /proc/interrupts、/proc/irq/pid/smp_affinity、服务irqbalance是否配置、以及CPU的频率设置,经过这些能够帮系统大赛优化系统的硬中断
(4)si:内核经过一种软件的方法(可延迟函数)来模拟硬件的中断模式,一般叫软中断。常见的软中断都和网络有关,长时间的写日志也可能产生软中断。
系统有个进程ksoftirqd来处理软中断,每一个CPU都有本身对应的ksoftirqd/n(n为CPU逻辑ID)。但网络出现阻塞的时候,ksoftirqd会出现瓶颈,此时可经过ps命令查看ps aux | grep ksoftirqd
(5)CPU利用率=1-%id
四、第四行+第五行:内存使用状况
buffer和cache的做用是缩短IO系统调用的时间。若是频繁地访问文件都能被命中,很明显会比读取磁盘调用快,磁盘的IO一定会减少。cache的命中率很关键,若是不能命中,对cache而言是极大的浪费,此时应考虑drop cache并提高相应的cache命中率。
五、第六行:进程信息
进程号(PID)、进程全部者(USER)、进程优先级(nice值、NI)、进程使用的虚拟内存(VIRT)、进程使用的实际物理内存(RES)、共享内存(SHR)、CPU占用百分比、进程使用的物理内存百分比(%MEM)、进程使用的CPU时间总计(1/100秒,TIME+)、命令行
(1)top显示的是进程信息,要看线程级,可用ps -ef
(2)TIME+表示的是进程使用的CPU时间总计,不是进程的存活时间
(3)默认不会显示进程分布在那颗CPU上,如想分析CPU对应的应用程序,可修改top默认配置,添加字段Last used CPU便可。
(4)H:top配置帮助页
d:刷新间隔
f:添加进程字段显示列
1:显示平均/各颗CPU的利用率信息
W:保存配置信息
六、top参数
-d 批处理模式
-c 命令/程序名 触发
-d 设置延迟间隔(刷新频率)
-n 设置迭代数量(退出前监控次数)
-p 监控特定的PID
-u或-U: 用户名 或 UID
top -b -d 1 -n 3 > top.log
目前流行的中间件有tomcat、jetty、Jboss、weblogic、WebSphere等,基本原理类似,都遵循servlet规范。对容器的监控其实是对JVM的监控,容器运行在JVM纸上。JVM的监控分析工具备jvisualVM、jconsole、jprofiler、zabbix、nagios、cacti等。下面介绍tomcat监控工具probe,probe只须要一个war包就能够完成监控任务,彻底不用设置,下面是tomcat常规监控项:
类别 | 计数器 | 描述 |
tomcat | JVM内存 | 关注GC回收频率,Full GC次数越少越好 |
最大线程数 | 线程池链接数长期大于80%以上,建议优化 | |
数据库链接数 | 活动链接数长期大于80%以上,建议优化链接池 | |
请求数 请求状态 |
线程数,线程状态,大量blocked状态线程能够dump线程栈信息进行优化 |
安装probe以后,打开浏览器访问probe:127.0.0.1:8089/probe
线程池的监控:
current_threads_count:线程池中ready好的数量,个人在运行状态,个人在等待状态
current_threads_busy:当前活动状态的线程数量,正处在活动状态
max_threads:最大线程池数量
咱们须要关注current_threads_count和current_threads_busy是否接近max_threads,若是是,则须要加大max_threads数量;若是服务器硬件支撑不了更多线程数,就须要更换更强的硬件或作集群来分担负载。
除了probe以外,自带监控工具也比较好用
jps是jdk提供的一个查看当前java进程的小工具, 能够看作是JavaVirtual Machine Process Status Tool的缩写。很是简单实用。
jps –l:输出主类或者jar的彻底路径名
jps –v :输出jvm参数
jps –q :仅仅显示java进程号
jps -m : 输出main method的参数
jps -mlv 10.134.68.173 (若是须要查看其余机器上的jvm进程,须要在待查看机器上启动jstatd。)
FGC(Full gc)会暂停用户相应,也就是不处理用户请求,等待Full gc完成后响应用户请求,这个等待时间过大会影响用户体验,因此Full gc是JVM调优的重点
jstat -gcutil [PID]
分析程序内存占用实际上是分析堆(Heap)内存,堆快照使用jamp获取
典型获取方式:
jmao dump:format=b,file=d:\heap.hprof [pid]
heap.hprof是快照文件,可使用JVisualvm来打开
JDK自带的JVM可视化监控工具
在%JAVA_HOME%\bin下找到,双击启动
下图:能够作堆Dump操做,查看堆内存明细。堆的回收曲线可以直观反映堆内存回收频率,是否有内存溢出等问题。
下图:点击“线程Dump”导出JVM当前线程栈信息,经过分析这些信息来定位到程序问题
总结:对于Java的应用来说,JVM的性能反映了Java程序的性能,JVM的监控分两大类,一是堆内存,二是线程;从堆内存能够分析大对象与内存溢出等问题,从线程状态及线程信息分析出低效程序,解决的是CPU资源占用的问题。
MySql监控方法:官方客户端、命令行、SQL、MONyog
一、下载MONyog.地址:https://www.webyog.com/
二、安装完成后,启动MONyog进行链接配置
三、MONyog绝大多数指标都进行了详细说明
当性能测试环境复杂的状况下,能够借助zabbix、nagios、cacti等监控平台