Poor Man PHP Profiler
2023-04-18 14:47:53 时间
说起 Profiler,老派的 PHP 程序员会选 XDebug,新派的 PHP 程序员会选 Xhprof,不过我们公司的服务器上都没装,于是我写了这个「Poor Man PHP Profiler」。
既然不用 XDebug 和 Xhprof,我们就要自己找 Profiler 的数据源才行。好在 PHP 本身支持慢日志,而且里面包含了调用栈信息,还包含了文件路径和具体的行号:
Slow
理论上不用写什么工具,把这个日志从前到后看一遍就能发现系统哪里慢,但我们人穷志不短,能通过工具提升一点效率总是好的。工具写起来其实很简单,大概思路:扫描日志,把数据汇总,看看哪一个文件的哪一行出现的次数多,八成就是短板所在(当然要除去一些公共的入口文件)。下面就是源代码:
#!/bin/bash
usage() {
echo "Usage: $0 --log=<LOG>"
}
eval set -- $(
getopt -q -o "h" -l "context:,log:,help" -- "$@"
)
while true; do
case "$1" in
--context) CONTEXT=$2; shift 2;;
--log) LOG=$2; shift 2;;
-h|--help) usage; exit 0;;
--) break;;
esac
done
if [[ -z "$LOG" ]]; then
usage
exit 1
fi
C=${CONTEXT:-5}
awk '
$1 ~ "0x" && $3 ~ "/" { files[$3]++ }
END {
for (file in files) {
print files[file], file | "sort -nr"
}
}
' $LOG | while IFS=" " read count data; do
IFS=":" data=($data)
file=${data[0]}
line=${data[1]}
echo FILE: $file [COUNT: $count]
cat -n $file | grep -P -C $C --color=always "^s*$line .*"
echo
done
为了提升用户体验,我加了一些必要的色彩提示,最终的效果如下:
Profiler
最后,需要提醒大家的是:因为要扫描慢日志,所以如果文件体积非常大的话,那么效率会很低下。建议定期切分日志,具体可以参考我以前写的:被遗忘的Logrotate。
相关文章
- 谷歌向ChatGPT竞争对手Anthropic投资近4亿美元
- 网络结构这么多,这怕是争议最大的一个
- 来了,ChatGPT开始在金融圈抢活
- 亚马逊云科技获评“中国公有云市场领导者” 其创新发展能力在报告中居于首位
- Wi-Fi与以太网:有线连接有多好?
- Dapr 可观测性之分布式追踪
- 自然语言与人工智能解决方案相结合助力传统制造业
- 节能网络如何支持可持续发展
- 2022年全球混合云发展趋势报告
- 如何选择以太网电缆
- 谷歌聊天机器人LaMDA被爆突然现身!只会聊狗子,被ChatGPT秒成渣
- 规划 OTA 更新需要了解的三件事
- 应该使用哪种以太网(Cat5、Cat5e、Cat6、Cat6a)电缆?
- ChatGPT是否构成对网络安全的威胁?人工智能机器人给出了自己的答案
- ChatGPT化身政治说客:帮企业判断是否受政府新法案影响,甚至写信建议修改立法
- 亚马逊云科技与沃尔沃汽车“智能汽车共创加速计划”圆满收官
- 阿里云与泰国True IDC、日本JP GAMES等近30家海外企业达成合作
- 阿里云将投入70亿元建国际生态、增设6大海外服务中心
- 什么是无线接入点 Access point?
- OpenAI发布ChatGPT人工智能文本生成检测工具