vlambda博客
学习文章列表

性能测试小工具的使用




    • 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插件

    1. 打开jvisualvm.exe

    2. 工具-插件

    3. 在可安装插件中找到【Visual GC】,安装。

  • 添加远程主机监控

    1. 添加远程主机

    2. 右键远程主机,添加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.yml
  • grafana模板

    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.yml
  • grafana模板

    https://grafana.com/dashboards/763