ECharts分析xdebug跟踪日志

简介: 2015年12月23日 15:36:11 星期三 之前用的是国外的图表工具, 有点麻烦, 文档是英文的, 看着不顺眼, 发现了百度出品的ECharts, 文档比较全, 功能比较多, 做出的图也比较好看, 用起来也比较简单   图注:  I/O密集型: 一次mysql的联结查询的效率分析...

2015年12月23日 15:36:11 星期三

之前用的是国外的图表工具, 有点麻烦, 文档是英文的, 看着不顺眼,

发现了百度出品的ECharts, 文档比较全, 功能比较多, 做出的图也比较好看, 用起来也比较简单

 

图注: 

I/O密集型: 一次mysql的联结查询的效率分析

CPU密集型: 将联结查询分成两次简单查询, 并借助PHP计算得到最终结果的效率分析

 

代码:

  1 <!DOCTYPE html>
  2 <head>
  3     <meta charset="utf-8">
  4     <title>ECharts</title>
  5 </head>
  6 <body>
  7 <?php
  8 function makeData($file)
  9 {
 10     $fp = fopen($file, 'r');
 11     $arrLineData = [];
 12     $arrDetailData = [];
 13     
 14     while(!feof($fp)){
 15         $row = fgets($fp);
 16         $row = trim($row);
 17         $arr_now = preg_split('#\s+#', $row);
 18         
 19         if (count($arr_now) > 2 && is_numeric($arr_now[0])) {
 20             $x = $arr_now[0]*10000; //时间消耗, 变成整数, 单位ms*10
 21             $y = $arr_now[1]/1000; //内存消耗, 缩小数量级, 单位KB
 22             $arrLineData[] = [$x, $y];
 23             
 24             $tmp = [];
 25             $tmp['time_used']     = $arr_now[0];
 26             $tmp['memory_used'] = $arr_now[1];
 27             $tmp['memory_add']     = $arr_now[2];
 28             $tmp['function']     = $arr_now[4];
 29             $tmp['location']     = $arr_now[5];
 30             $key = $x.'_'.$arr_now[1];
 31             $arrDetailData[$key] = $tmp;
 32         }
 33     }
 34     
 35     return [$arrLineData, $arrDetailData];
 36 }
 37 
 38 $cpuData = makeData('./file/trace._test_index_ab_cpu_XDEBUG_TRACE=start_trace.xt');
 39 $ioData = makeData('./file/trace._test_index_ab_io_XDEBUG_TRACE=start_trace.xt');
 40 
 41 ?>
 42     <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
 43     <div id="main" style="height:400px"></div>
 44     <!-- ECharts单文件引入 -->
 45     <script src="./js/echarts-all.js"></script>
 46     <script type="text/javascript">
 47     var cpuData = <?= json_encode($cpuData)?>;
 48     var ioData = <?= json_encode($ioData)?>;
 49     var line1Name = 'CPU密集型';
 50     var line2Name = 'I/O密集型';
 51     
 52     // 基于准备好的dom,初始化echarts图表
 53     var myChart = echarts.init(document.getElementById('main')); 
 54     
 55     option = {
 56     title : {
 57         text: 'PHP效率分析',
 58         //subtext: '纯属虚构'
 59     },
 60     tooltip : {
 61         trigger: 'axis',
 62         axisPointer:{
 63             show: true,
 64             type : 'cross',
 65             lineStyle: {
 66                 type : 'dashed',
 67                 width : 1
 68             }
 69         },
 70         formatter : function (params) {
 71             var x = params.value[0];
 72             var y = params.value[1];
 73             
 74             var key = x+'_'+y*1000;
 75             if (params.seriesName == line1Name) {
 76                 var obj = cpuData[1][key];
 77             } else {
 78                 var obj = ioData[1][key];
 79             }
 80             str = params.seriesName+': <br>';
 81             str += '时间消耗: '+obj.time_used+"s<br>";
 82             str += '内存消耗: '+obj.memory_used/1024+"KB<br>";
 83             str += '内存增量: '+obj.memory_add+"B<br>";
 84             str += '函数调用: '+obj.function+"<br>";
 85             str += '所在行: '+obj.location;
 86             return str;
 87         }
 88     },
 89     dataZoom: {
 90         show: true,
 91         start : 0
 92     },
 93     legend: {
 94         data:[line1Name, line2Name]
 95     },
 96     toolbox: {
 97         show : true,
 98         feature : {
 99             dataView : {show: true, readOnly: true},
100             restore : {show: true},
101             saveAsImage : {show: true}
102         }
103     },
104     calculable : true,
105     xAxis : [
106         {
107             type: 'value',
108             axisLine: {
109                 lineStyle: {
110                     color:'grey',
111                     width:1
112                 }
113             }
114         }
115     ],
116     yAxis : [
117         {
118             type: 'value',
119             axisLine: {
120                 lineStyle: {
121                     color:'grey',
122                     width:1
123                 }
124             }
125         }
126     ],
127     series : [
128         {
129             name:line1Name,
130             type:'line',
131             data:cpuData[0],
132         },
133         {
134             name:line2Name,
135             type:'line',
136             data:ioData[0]
137         }
138     ]
139 };
140 
141         // 为echarts对象加载数据 
142         myChart.setOption(option); 
143     </script>
144 </body>
145 </html>

 

Summer PHP 框架

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
监控 Android开发 C语言
深度解读Android崩溃日志案例分析2:tombstone日志
深度解读Android崩溃日志案例分析2:tombstone日志
84 0
|
3月前
|
Go 数据处理 Docker
elk stack部署自动化日志收集分析平台
elk stack部署自动化日志收集分析平台
80 0
|
23小时前
|
机器学习/深度学习 前端开发 数据挖掘
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断(下)
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
32 11
|
6天前
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断2
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
12 0
|
7天前
|
机器学习/深度学习 前端开发 数据挖掘
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
38 0
|
18天前
|
SQL 存储 监控
日志问题精要:分析与总结
该文档讲述了应用系统日志记录的重要性和规则。主要目的是记录操作轨迹、监控系统状态和回溯故障。日志记录点包括系统入口、调用其他模块、调用结束、出口和出错时。内容应遵循UTF-8编码,避免敏感信息,按INFO级别记录,及时、完整且安全。日志输出要控制频率和长度,不影响系统性能,并按策略备份和清理。日志等级分为DEBUG、INFO、WARN、ERROR和FATAL。日志文件应有明确目录结构,大小有限制,并定期清理。注意事项包括输出异常堆栈、避免打印对象实例的hashCode、选择合适的日志框架和格式,并支持动态修改日志级别。还要实现链路追踪,确保在多线程环境中正确记录日志。
18 0
|
1月前
|
存储
Hudi Log日志文件格式分析(一)
Hudi Log日志文件格式分析(一)
25 1
|
1月前
|
缓存 索引
Hudi Log日志文件写入分析(二)
Hudi Log日志文件写入分析(二)
21 1
|
1月前
|
缓存
Hudi Log日志文件读取分析(三)
Hudi Log日志文件读取分析(三)
22 0
|
3月前
|
存储 Java
jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
44 0

热门文章

最新文章