zoukankan      html  css  js  c++  java
  • nginx performance monitor

    nginx performance monitor

    Nginx中的stub_status模块主要用于查看Nginx的一些状态信息

    示例 

    Active connections: 2
    server accepts handled requests
    12055 12055 34907
    Reading: 0 Writing: 1 Waiting: 1

    这些状态信息包括

    1. Active connections:

    对后端发起的活动连接数.

    2. server accepts handled requests:

    Nginx总共处理了12055个连接,成功创建12055握手(证明中间没有失败的),总共处理了34907个请求.

    3. Reading:

    Nginx读取到客户端的Header信息数.

    4. Writing:

    Nginx 返回给客户端的Header信息数.

    5. Waiting:

    开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是Nginx已经处理完成,正在等候下一次请求指令的驻留连接.所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中.

    开启Nginx的stub_status模块

    在Server块中添加如下location规则,重新加载配置文件。

    location /nginx-status {
        stub_status on;
            access_log  off;
        #加入访问限制
        allow 127.0.0.1;
        deny all;
    }

    通过/nginx-status便可以查看nginx的性能参数状态。
    在linux中默认是不会将stub_status编译进来的,所以要开启此功能,需要编译时增加配置 ./configure –with-http_stub_status_module

    但是这样这样简单的即时值无法直观的展示nginx负载、性能的变化趋势,如果能够有一个实时趋势图是最好了。
    如下代码使用highchart linechart图来展示nginx负载、性能趋势。
    javascript code

    $(function() {
          $(document).ready(function() {
              Highcharts.setOptions({
                  global: {
                      useUTC: false
                  }
              });
     
              function initData() {
                  var data = [],
                      time = (new Date()).getTime(),
                      i;
                  for (i = -100; i <= 0; i++) {
                      data.push({
                          x: time + i * 1000,
                          y: 0
                      });
                  }
                  return data;
              }
              $('#container').highcharts({
                  chart: {
                      type: 'spline',
                      animation: Highcharts.svg, // don't animate in old IE
                      marginRight: 10,
                      events: {
                          load: function() {
                              var series = this.series;
                              setInterval(function() {
                                  $.get('/nginx-status', {}, function(data) {
                                      var status = data.split(' ');
                                      var x = (new Date()).getTime(); // current time
                                      var y0 = Number(status[2]);
                                      var y1 = Number(status[11]);
                                      var y2 = Number(status[13]);
                                      var y3 = Number(status[15]);
                                      series[0].addPoint([x, y0], true, true);
                                      series[1].addPoint([x, y1], true, true);
                                      series[2].addPoint([x, y2], true, true);
                                      series[3].addPoint([x, y3], true, true);
                                  }, 'text');
                              }, 3000);
                          }
                      }
                  },
                  title: {
                      text: 'nginx stub-status'
                  },
                  xAxis: {
                      type: 'datetime',
                      tickPixelInterval: 150
                  },
     
                  tooltip: {
                      formatter: function() {
                          return '<b>' + this.series.name + '</b><br/>' +
                              Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
                              Highcharts.numberFormat(this.y, 2);
                      }
                  },
                  legend: {
                      enabled: true
                  },
                  series: [{
                      name: 'Active connections',
                      data: (function() {
                          var data = [],
                              time = (new Date()).getTime(),
                              i;
                          for (i = -100; i <= 0; i++) {
                              data.push({
                                  x: time + i * 1000,
                                  y: 0
                              });
                          }
                          return data;
                      })()
                  }, {
                      name: 'Reading',
                      data: initData()
                  }, {
                      name: 'Writing',
                      data: initData()
                  }, {
                      name: 'Waiting',
                      data: initData()
                  }]
              });
          });
     
      });

    html page

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
        <meta name="format-detection" content="telephone=no">
        <title> performance monitor</title>
        <script type="text/javascript" src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>
        <script type="text/javascript" src="http://cdn.hcharts.cn/highcharts/highcharts.js"></script>
        <script>
        /* highchart code */
        </script>
    </head>
    <body>
    <div id="container" style="min-700px;height:400px"></div>
    </body>
    </html>

    监控图像如下
    Alt

  • 相关阅读:
    2020年秋招联发科小米等20家公司面经总结
    一个普通硕士生的2020秋招总结(文末送福利)
    Linux内核中container_of宏的详细解释
    拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)
    UWB硬件设计相关内容
    SpringToolSuit(STS)添加了Lombok后仍然报错
    Spring Boot整合Mybatis出现错误java.lang.IllegalStateException: Cannot load driver class:com.mysql.cj.jdbc.Driver
    Word快捷选取
    微服务下的用户登录权限校验解决方案
    Spring Boot 使用Mybatis注解开发增删改查
  • 原文地址:https://www.cnblogs.com/philzhou/p/nginx_performace_monitor.html
Copyright © 2011-2022 走看看