Laravel 执行时间记录和统计工具

统计接口时间的方法有不少,比如修改nginx日志格式记录时间,或者直接使用网关统计,但是都不够简便,于是我自己写了这一个统计包,不需要修改服务器配置,不需要安装软件,也不需要后台运行进程,当然也足够简单。

写这个包的目的是用来统计接口运行时间的,方便发现响应慢的接口,然后优化。

laravel-running-time

  • 支持统计响应时间最长的请求
  • 支持日志延迟批量写入以提高性能
  • 支持单个请求地址分析
  • 支持友好的日期筛选
  • 实测100W行日志,2.3秒可分析完

GitHub 地址

欢迎大家使用和提意义

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 10

https://github.com/y-ui/laravel-running-time/blob/master/src/Commands/RunningTimeCommand.php
可以先array_filter下

$sortedPath  = array_filter($sortedPath );
foreach ($sortedPath as $key => &$value) {
            //if (empty($value)) {
            //    unset($sortedPath[$key]);
            //    continue;
            //}
            $value = [$value, $key];
        }
4天前

@lovecn 是的,这样性能更好,代码也更好看~感谢~

4天前
ruby

可以,哈哈,学会了 file() 的用法 :stuck_out_tongue_winking_eye:

3天前
ruby

改了一下 RunningTimeCommand.php,使用了 fgets 配合 yield 减少内存的使用。同时 $pathTimes 只记录比较、统计的结果,不记录所有的数据,减少内存使用。

https://github.com/y-ui/laravel-running-time/pull/1

file

2天前
ruby

修改了一下 pathTime 来兼容使用 yield 的写法.

没使用 yield 之前
file

使用 yield
file

2天前

@ruby 非常优秀的想法,内存使用大大减少,不过真实场景下的计算时间并不像你测试的那样也减少了,我用我的真实数据跑了一下,计算时间增加了大概 34%左右,应该和每行日志的长度有关,内容越多,fgets导致的额外时间开销越多,我用最简单的日志测试计算时间增加15%,总体来说这个时间换来的内存节约非常划算 :+1:

没有yield:

file

使用yield:

file

2天前
ruby

@y-ui 时间增加应该是的。昨天一不小心写了个 bug 进去,php artisan running-time 没有统计到最小时间,提了个 PR

2天前

@ruby 哈哈,改出来的BUG不少呢,你这个pr我就不合并了

2天前
ruby

@y-ui 还有什么其他 bug 吗 :joy:

2天前

@ruby

  • path统计数量不正确
  • 你说的这个最小时间问题
  • 延迟批量写入功能不能用了
  • 检查目录是否存在不要每次都检查 ,延迟写入模式只需要在写入文件时检查,减少IO

我merge了你的第一个pr,然后修复了以上BUG,并且加入了 --lessMemory 选项使用你的读取文件方式。
默认还是使用file函数读取,但是使用yield,有效减少了多个日志文件统计时的内存开销,因为数据越多使用fgets花费时间越多,400W数据时 时间差达到了100%

2天前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!