性能测试小工具的使用
mysqlreport
iftop
iperf
jvisualvm.exe
perf
iotop
iostat
监控JVM:grafana+prometheus+JVM
监控JVM:grafana+prometheus+Redis
mysqlreport
由 hackmysql.com 的站长所撰写的 perl Scritps,旨在协助 MySQL DBA 搜集与分析 MySQL 的运作状况。
安装DBI
yum -y install perl-DBI
//或者
# wget http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
# tar zxvf DBI-1.616.tar.gz
# cd DBI-1.616
# perl Makefile.PL
# make
# make test
# make
# make install
安装DBD-mysql
yum -y install perl-DBD-MySQL
# wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.020.tar.gz
# tar zxvf DBD-mysql-4.020.tar.gz
# cd DBD-mysql-4.020
# perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
# make
# make test
安装mysqlreport
http://pkgs.fedoraproject.org/repo/pkgs/mysqlreport/mysqlreport-3.5.tgz/33a345f5e2c89b083a9ff0423f7fd7b4/mysqlreport-3.5.tgz
【使用】
./mysqlreport --user root --password rootpwd --host 192.168.1.50
iftop
iftop是类似于top的实时流量监控工具。
官方网站: http://www.ex-parrot.com/~pdw/iftop/
下载和安装
# 安装依赖
# yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel
wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz
tar zxvf iftop-0.17.tar.gz
cd iftop-0.17
./configure
make && make install
含义解析
基本使用:iftop
-t汇总一行
iftop -P显示端口
iperf
Iperf是一个网络性能测试工具。可以测量最大TCP带宽。
官方网站: https://iperf.fr/iperf-doc.php
安装和使用
下载和安装(CentOS7)
wget 'https://iperf.fr/download/fedora/iperf3-3.1.3-1.fc24.x86_64.rpm'
yum install iperf3-3.1.3-1.fc24.x86_64.rpm使用
# 被测机执行
iperf3 -s
# 测试机执行
iperf3 -c 192.168.8.100
# -n表示传送的缓冲器数量。例如下面传输500m大小的数据包。
iperf3 -c 192.168.8.100 -n 500000000查看结果
jvisualvm.exe
Jdk安装目录/Bin目录/jvisualvm.exe
被监控端远程配置
JMX方式:java工程中添加参数
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=12301 -Djava.rmi.server.hostname=192.168.0.100
Jstatd方式
# 在 $JAVA_HOME/bin 下创建 jstatd.all.policy 文件,填写如下内容
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
# 启动
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.0.100
监控端配置
安装Visual GC插件
打开jvisualvm.exe
工具-插件
在可安装插件中找到【Visual GC】,安装。
添加远程主机监控
添加远程主机
右键远程主机,添加JVM或jstatd。
perf
用于查找到程序百分比高的热点代码片段。使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果。
命令使用
实时查看当前系统进程函数占用率情况。
perf top -g
-g:可以查看堆栈调用
-a:查看所有CPU
# 结果说明
第一列:符号引发的性能事件的比例,指占用的cpu周期比例。
第二列:符号所在的DSO(Dynamic Shared Object),可以是应用程序、内核、动态链接库、模块。
第三列:DSO的类型。[.]表示此符号属于用户态的ELF文件,包括可执行文件与动态链接库;[k]表述此符号属于内核或模块。
第四列:符号名。有些符号不能解析为函数名,只能用地址表示。收集采样信息并记录到文件分析。
记录单个函数级别的统计信息。
sudo perf record -e cpu-clock -g -p 2548
-g 选项是告诉perf record额外记录函数的调用关系
-e cpu-clock 指perf record监控的指标为cpu周期
-p 指定需要record的进程pid
# Ctrl+c结束执行后,在当前目录下会生成采样数据perf.data.
# 程序运行完之后,perf record会生成一个名为perf.data的文件,如果之前已有,那么之前的perf.data文件会被覆盖查看统计结果
perf report -i perf.data
-i 指定要查看的文件
# 结果分析
Command:进程名
Shared Object:模块名, 比如具体哪个共享库,哪个可执行程序。
Symbol:二进制模块中的符号名,如果是高级语言,比如C语言编写的程序,等价于函数名。
iotop
iotop是一个用来监视磁盘I/O使用状况的 top类工具,可监测到具体程序使用的磁盘IO的信息。
安装和使用
#安装
yum install iotop
# 使用
iotop
-o, --only只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
-p PID, --pid=PID指定监测的进程/线程。
iostat
命令使用
# -x 显示详细信息,使用率(%util)、响应时间(await)
iostat -x
# 每隔2秒刷新显示,且显示3次
iostat 2 3
# 显示指定磁盘信息
iostat -d /dev/sda
监控JVM:grafana+prometheus+JVM
jmx_exporter
https://github.com/prometheus/jmx_exporter
wget 'https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.15.0/jmx_prometheus_javaagent-0.15.0.jar'
# 新建配置文件simple-config.yml,内容如下
---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
rules:
- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
name: os_$1
type: GAUGE
attrNameSnakeCase: true增加JAR工程启动参数,以agent的形式引入jmx_exporter。
-javaagent:/usr/local/xingneng/jmx_prometheus_javaagent-0.15.0.jar=12789:/usr/local/xingneng/simple-config.yml
修改prometheus.yml配置文件,增加job
- job_name: 'jvm'
scrape_interval: 30s
static_configs:
- targets: ['localhost:3010']
# 重启prometheus
kill -9 x
./prometheus --config.file=prometheus.ymlgrafana模板
https://grafana.com/grafana/dashboards/8563
监控JVM:grafana+prometheus+Redis
redis_exporter
# https://github.com/oliver006/redis_exporter
sudo wget "https://github.com/oliver006/redis_exporter/releases/download/v1.17.1/redis_exporter-v1.17.1.linux-amd64.tar.gz" --user-agent="Mozilla/5.0 (X11;U;Linux i686;en-US;rv:1.9.0.3) Geco/2008092416 Firefox/3.0.3"
./redis_exporter -web.listen-address :9122 -redis.addr x.x.x.1:6378 -redis.password password2 &修改prometheus.yml配置文件,增加job
- job_name: 'redis'
static_configs:
- targets: ['172.17.0.5:6379']
- job_name: 'redis2'
static_configs:
- targets: ['172.17.0.5:6380']
# 重启prometheus
kill -9 x
./prometheus --config.file=prometheus.ymlgrafana模板
https://grafana.com/dashboards/763