zoukankan      html  css  js  c++  java
  • 性能监控工具选择

    1.接口返回信息

         使用jmeter插件的<聚合报告>统计接口的请求数、响应时间、平均响应时间、TPS、错误率等指标

    2.服务器负载

        使用jmeter插件<PerfMon Metrics Collector>统计服务器cpu、内存、硬盘IO、网络IO的趋势图

    3.jvm性能指标

       a.) jmap -heap  pid  查看堆内存使用信息,用于查看新生代、老年代内存使用情况

       b.) jmap -histo pid 查看java进程中class生成的对象占用的信息,压测中每隔2秒查看一次占用最大内存的class,可以用来定位内存溢出的原因

              ps:  jmap -histo 202190|grep "1:"|head -1

        c.) jstat -gcutil pid  频率(毫秒) 总打印次数  查看gc情况,fullgc次数不能太频繁,每次fullgc时间不能太长,性能指标之一

    制作监控脚本,在目标服务器启用websocket服务,打印以上信息,在静态网页上显示ws请求返回的信息,可以用来生成图表(主要用来集成到网站中,生成性能报告,其实jvisualvm结合jconsole.exe、jstat命令更详细好用)。

    简单实现演示:

     a.)启动websocket服务,连接之后会执行监控脚本

    #!/bin/bash
    #一定要加/bin/bash,否则会报错
    freightpid=`ps -ef|grep osp-financial-freight|grep -v 'grep'|awk '{print $2}'`
    #jmap -histo $freightpid|head -20
    #echo $freightpid
    for ((COUNT=1;COUNT<=10;COUNT++));do
      jmap -heap $freightpid|grep -E "used$"|awk '{print $1}'|tail -n 1
      sleep 5
    done
    View Code

     b.)js发起websocket请求,实时根据监控脚本的返回重新渲染图表。如图。

    html代码如下:

     1 <!DOCTYPE HTML>
     2 <html>
     3     <head>
     4         <meta charset="utf-8"><link rel="icon" href="https://static.jianshukeji.com/highcharts/images/favicon.ico">
     5         <meta name="viewport" content="width=device-width, initial-scale=1">
     6         <style>
     7             /* css 代码  */
     8         </style>
     9         <script src="https://img.hcharts.cn/highcharts/highcharts.js"></script>
    10         <script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script>
    11         <script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script>
    12     </head>
    13     <body>
    14         <div id="container" style="min-400px;height:400px"></div>
    15         <script>
    16             Highcharts.setOptions({
    17     global: {
    18         useUTC: false
    19     }
    20 });
    21 function activeLastPointToolip(chart) {
    22     var points = chart.series[0].points;
    23     chart.tooltip.refresh(points[points.length -1]);
    24 }
    25 var chart = Highcharts.chart('container', {
    26     chart: {
    27         type: 'spline',
    28         marginRight: 10,
    29         events: {
    30             load: function () {
    31             var temp =0;
    32             var ws =new WebSocket('ws://172.31.52.18:8187');
    33             ws.onopen = function(event){console.log("CONNECT")};
    34             ws.onmessage = function(event){console.log(event.data.split("%")[0]);temp=parseFloat(event.data.split("%")[0])};
    35             ws.onerror = function(event){console.log(event)};
    36                 var series = this.series[0],
    37                     chart = this;
    38                 activeLastPointToolip(chart);
    39                 setInterval(function () {
    40                     var x = (new Date()).getTime(), // 当前时间
    41                         y = temp;          // 随机值
    42                     series.addPoint([x, y], true, true);
    43                     activeLastPointToolip(chart);
    44                 }, 5000);
    45             }
    46         }
    47     },
    48     title: {
    49         text: '新生代内存使用监控'
    50     },
    51     xAxis: {
    52         type: 'datetime',
    53         tickPixelInterval: 150
    54     },
    55     yAxis: {
    56         title: {
    57             text: null
    58         }
    59     },
    60     tooltip: {
    61         formatter: function () {
    62             return '<b>' + this.series.name + '</b><br/>' +
    63                 Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
    64                 Highcharts.numberFormat(this.y, 6);
    65         }
    66     },
    67     legend: {
    68         enabled: true
    69     },
    70     series: [{
    71         name: '新生代已用内存占比',
    72         data: (function () {
    73         var temp =0;
    74         var ws =new WebSocket('ws://172.31.52.18:8187');
    75         ws.onopen = function(event){console.log("CONNECT")};
    76         ws.onmessage = function(event){temp=parseFloat(event.data.split("%")[0])};
    77         ws.onerror = function(event){console.log(event)};
    78             // 生成随机值
    79             var data = [],
    80                 time = (new Date()).getTime(),
    81                 i;
    82             for (i = -19; i <= 0; i += 1) {
    83                 data.push({
    84                     x: time + i * 5000,
    85                     y: temp
    86                 });
    87             }
    88             return data;
    89         }())
    90     }]
    91 });
    92         </script>
    93     </body>
    94 </html>
    View Code

    未完成之前,先使用jvisualvm.exe远程代替查看,或者直接命令行查看。

        附jvisualvm.exe的远程使用教程:

            在java程序的启动参数中增加:

               -Djava.rmi.server.hostname=172.xx.xx.xx   ////////本机地址

               -Dcom.sun.management.jmxremote

              -Dcom.sun.management.jmxremote.port=1099

              -Dcom.sun.management.jmxremote.authenticate=false

              -Dcom.sun.management.jmxremote.ssl=false

         启动之后如下图:

      查看1099端口是否可用:  lsof -i:1099,如下图即为可用,否则要在防火墙中添加

    使用windows上的jvisualvm.exe,点击 远程-》右键-》rmi连接 

    进入之后可看到配有启动参数的java程序,点击监视,可查看该程序占用的cpu、堆内存占比、线程运行情况

    jconsole.exe可以跟踪堆栈信息,连接方式rmi,同上

    4.数据库性能查看语句

    show global status like 'Thread%'; //查看线程运行情况

    innodb引擎查看死锁语句
    select b.trx_mysql_thread_id AS '被阻塞线程',
    b.trx_query AS '被阻塞SQL',
    c.trx_mysql_thread_id AS '阻塞线程',
    (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(c.trx_started)) AS '阻塞时间'
    from information_schema.INNODB_LOCK_WAITS a
    join information_schema.INNODB_TRX b on a.requesting_trx_id =b.trx_id
    join information_schema.INNODB_TRX c on a.blocking_trx_id=c.trx_id
    where (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(c.trx_started))>60;

  • 相关阅读:
    20175310 《Java程序设计》第3周学习总结
    IDEA学生免费申请教程
    20175310 《Java程序设计》第2周学习总结
    在虚拟机中使用中文输入法
    VMware虚拟机将英文改成中文的方法
    20175310 《Java程序设计》第1周学习总结(1)安装虚拟机
    20175310 《Java程序设计》第1周学习总结(2)
    Java 开源 CMS :magnolia
    开源网络监控管理系统:OpenNMS
    开源摄影机:Axiom Camera
  • 原文地址:https://www.cnblogs.com/zipon/p/9456763.html
Copyright © 2011-2022 走看看