要进行性能调优,首先我们要找到程序的性能瓶颈在哪里?而要知道性能瓶颈在哪里,我们需要借助一定的工具进行处理。
在windows操作系统下,当我们的系统运行很慢的时候,80%的人首先查看的就是任务管理器,因为它可以让我们快读的知道是那个程序占用了较多的资源(如CPU、内存、磁盘I/O等),或者是那个进程不能响应导致整个操作系统巨卡,我们通过任务管理器可以轻松的查看和管理我们的应用程序。
另外,对于运行在JVM上的服务器(如Tomcat、JBoss、Weblogic等等),通过监控JVM的CPU、内存、线程、垃圾回收等情况可以了解JVM的运行情况,是否需要调优JVM参数。
如果不是使用工具自带的监控功能,而是使用第三方的监控工具,如Linux的Top、JConsole,也是能监控服务器的相关指标,但这种对长时间测试作用不大,因为用户不可能一直盯着显示器看。性能测试有时会有些突发情况,如内存回收之类时占CPU很大,有时是运行一天,或二天,或几个小时才出现的,如果那个时刻没盯着显示器看,可能就忽视了。
另外,CPU大时,可能吞吐量、请求数、或者用户失败了,这是相关的,需要知道CPU大时那时刻的其他指标反映,这就需要对比曲线,或过滤CPU大于某个值(如70%)时,其他指标当时的情况,这些才能有效定位问题。如在2小时时,出现用户失败比较多,这时就需要看下当时的服务器指标CPU、内存、IO之类的,才好定位问题。
kylinPET工具长时间记录指标数据,可以用于定位问题,如比较图表、过滤之类的,不然用其他监控工具很难与测试指标结合起来(需要精确到秒),如果不结合起来,定位问题就难了。
业务性能测试时,通常还需要记录业务服务器的资源数据,如CPU、内存、线程数、I/O、吞吐量,将它们与运行日志、或指标数据进行曲线对比,则可展示某段时间的资源指标值、普通指标值,这样可辅助定位性能问题。如,用户失败数量在某时刻很高,是否由于CPU占用太高导致。
各项指标作用可以参照下面网址:
http://www.docin.com/p-509128282.html
http://wenku.baidu.com/view/86606a45a8956bec0975e3a4.html
http://wenku.baidu.com/link?url=sG9FXg3RybIFambpuDBqvjf0Zwh9N2CrOcPXzhZsOyAYtvAKHBOaE08esI83g4jp79hqqH7yfX4-iHSNB4wF-05ec-S4J0YQGBuSNk0Kfhy
http://wenku.baidu.com/view/103943d2b9f3f90f76c61b44.html
http://wenku.baidu.com/view/48390a85d4d8d15abe234e44.html
http://wenku.baidu.com/view/63dad608b52acfc789ebc923.html
资源组 |
信息 |
资源指标条目 |
描述 |
CPU |
列出监控代理器的CPU信息。Total代表所有CPU;1代表第1个CPU线程;4代表第4个CPU线程。 |
% CPU Time |
CPU占用率,包括用户进程与系统进程 |
% User Time |
用户占用率,用户进程使用的CPU率 |
||
% System Time |
系统占用率,系统进程使用的CPU率 |
||
% Interrupt Time |
中断率 |
||
Memory 内存 |
内存只有一个Total选项,表示所有内存 |
Free Memory |
内存可用空间,单位为MB |
% Free Memory |
内存可用空间占总内存的百分比 |
||
Used Memory |
内存已用空间,单位为MB |
||
% Used Memory |
内存已用空间占总内存的百分比 |
||
Swap 交换分区 |
只有一个Total选项,表示所有交换分区 |
Pages In |
读取的总页数 |
Pages In/s |
每秒读取的页数 |
||
Pages Out |
写入的总页数 |
||
Pages Out/s |
每秒写入的页数 |
||
Free Swap |
交换分区可用空间,单位为MB |
||
% Free Swap |
交换分区可用空间占总大小的百分比 |
||
Used Swap |
交换分区已用空间,单位为MB |
||
% Used Swap |
交换分区已用空间占总大小的百分比 |
||
Total Swap |
交换分区的总大小 |
||
Process 进程 |
列出监控代理器的所有进程信息。包括进程名称与进程id |
% CPU Time |
进程占用CPU百分率 |
% User Time |
进程占用CPU用户处理的百分率 |
||
% System Time |
进程占用CPU系统处理的百分率 |
||
Virtual Memory |
进程虚拟内存大小 |
||
Page Faults/s |
进程每秒钟处理的错误页数 |
||
Threads |
进程的线程个数 |
||
Disk 磁盘 |
列出监控代理器的磁盘信息。Total代表所有磁盘;C:\代表C盘。 |
Queue |
当前处理对列的长度 |
Read Bytes/s |
每秒读取的字节,单位KB |
||
Read Times/s |
每秒读取的次数 |
||
Write Bytes/s |
每秒写入的字节,单位KB |
||
Write Times/s |
每秒写入的次数 |
||
Network 网络 |
列出监控代理器的所有网卡 |
Receive Bytes/s |
每秒接收的字节,单位KB/s |
Receive Packets/s |
每秒接收的报文个数 |
||
Send Bytes/s |
每秒发送的字节,单位KB/s |
||
Send Packets/s |
每秒发送的报文个数 |
||
Receive Dropped/s |
每秒丢弃接收的报文个数 |
||
Send Dropped/s |
每秒丢弃发送的报文个数 |
||
Receive Errors/s |
每秒收到错误报文的个数 |
||
Send Errors/s |
每秒发送错误报文的个数 |
监控代理器必须与被测服务系统安装在同一台服务器上。
1) Linux版本下载地址
http://www.kylinpet.com/cloud/download/kylinPET_Cloud.tar.gz
2) Windows版本下载地址
http://www.kylinpet.com/cloud/download/scripter.exe
Copy目录下的jre目录(linux系统为jre的linux版本)、 monitorAgent目录
说明:
1.
Monitor
Agent是运行在业务服务器上,监控业务服务器的CPU、内存、I/O等资源。
2.
一般业务服务器为linux系统,则copy目录jre linux与目录monitorAgent即可。
3.
如果linux系统已经存在JDK1.6以上版本,且JAVA环境变量已经设置,则不需复制jre linux目录,而只要命令行运行java -jar monitor.jar
1) windows操作系统上直接双击monitor.bat运行,或命令窗口输入monitor.bat
2) linux操作系统上进入monitorAgent目录,输入./monitor.sh运行
3) 运行成功,将显示正在监听5000端口
注意:
如果运行失败,程序将自动退出。即没有显示port=5000,则表示5000端口被占用,请先关闭该端口先;失败在目录下的run.log里将包括日志port=5000:Address already in use: JVM_Bind
² “监控资源项”窗口:列出该监控代理器的所有监控指标
² 添加资源指标:选择左边监控资源的指标(叶子节点),然后选择右边“监控资源”列表里的一项,单击“确定添加”,添加成功则会在 “监控指标”表格里添加该记录。
如图,选择“%CPU Time”表示监控CPU的百分比,右边的Total、1、2、3、4,其中1-4表示该机器有4个CPU线程,分别对应每个CPU线程,Total表示监控所有CPU。
注意:
1.
选择下面表格里的监控代理器,然后选择左边监控资源的指标(叶子节点),如果在右上面的“监控资源”里没有列出信息,则表示没有获取到监控代理器的信息;需要先关闭窗口,然后在“监控树”选择该代理器,右键菜单选择“断开”,然后再右键菜单选项“连接”,重新获取监控代理器的信息。
² 删除资源指标:
删除“监控指标”表格中选择的指标项,也可按键盘del键
² 刷新资源指标:
如果监控的服务器进程(如重启进程导致ID发生变化)或资源发生变化,可通过点击刷新重新获取监控器资源并刷新列表。
资源组 |
资源指标条目 |
描述 |
JVM |
% CPU Time |
CPU占用率 |
线程 |
当前JVM正在运行的线程数 |
|
堆内存使用使用率 |
堆内存使用/堆内存提交 |
|
堆内存使用 |
JVM堆内存占用的空间,单位为MB |
|
堆内存提交 |
JVM堆内存提交的空间,单位为MB |
|
堆内存最大 |
JVM堆内存最大能占用的空间,单位为MB |
|
非堆内存使用使用率 |
非堆内存使用/非堆内存提交 |
|
非堆内存使用 |
JVM非堆内存占用的空间,单位为MB |
|
非堆内存提交 |
JVM非堆内存提交的空间,单位为MB |
|
非堆内存最大 |
JVM非堆内存最大能占用的空间,单位为MB |
|
持久堆内存使用使用率 |
持久堆内存使用/持久堆内存提交 |
|
持久堆内存使用 |
JVM持久堆内存占用的空间,单位为MB |
|
持久堆内存提交 |
JVM持久堆内存提交的空间,单位为MB |
|
持久堆内存最大 |
JVM持久堆内存最大能占用的空间,单位为MB |
|
垃圾回收次数 |
垃圾全回收的次数,全回收会导致业务暂停一段时间 |
|
垃圾回收时间 |
垃圾全回收的时间 |
JVM服务器包括Tomcat、JBoss、Weblogic、Jetty、Resin等等这些由JAVA运行的WEB服务器。
JVM服务器在启动前添加JVM参数,如Tomcat可以在bin目录下的catalina.bat(Linux为catalina.sh)里添加
set JAVA_OPTS=-Xms256m -Xmx512m -Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=192.168.1.7 -Dcom.sun.management.jmxremote.port=8000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
其中:
-Djava.rmi.server.hostname=192.168.1.7为绑定的IP
-Dcom.sun.management.jmxremote.port=8000为监听的端口
-Dcom.sun.management.jmxremote.authenticate=false不使用鉴权,工具默认为admin/admin
-Dcom.sun.management.jmxremote.ssl=false不使用SSL
各个服务器的JVM参数配置方法可在网上查找
启动服务器,然后使用netstat命令查看8000端口是否监听
在运行界面的“监控项”右键弹出菜单
² “监控资源”窗口:列出该监控代理器的所有监控指标
² 添加资源指标:选择左边监控资源的指标(叶子节点),然后选择右边“监控资源”列表里的一项,单击添加按钮,添加成功则会在的“监控指标”表格里添加该记录。
如图,选择“%CPU Time”表示监控CPU的百分比,右边的Total、1、2、3、4,其中1-4表示该机器有4个CPU线程,分别对应每个CPU线程,Total表示监控所有CPU。
注意:
1、
选择下面表格里的监控代理器,然后选择左边监控资源的指标(叶子节点),如果在右上面的“监控资源”里没有列出信息,则表示没有获取到监控代理器的信息;需要先关闭窗口,然后在“监控树”选择该代理器,右键菜单选择“断开”,然后再右键菜单选项“连接”,重新获取监控代理器的信息。
² 删除资源指标:
删除“监控指标”表格中选择的指标项,也可按键盘del键