开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

随风香飘飘/FlameGraph

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (3)
标签 (1)
master
colors
gh-pages
v1.0
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (3)
标签 (1)
master
colors
gh-pages
v1.0
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (3)
标签 (1)
master
colors
gh-pages
v1.0
FlameGraph
/
stackcollapse-xdebug.php
FlameGraph
/
stackcollapse-xdebug.php
stackcollapse-xdebug.php 5.56 KB
一键复制 编辑 原始数据 按行查看 历史
Matt Dudys 提交于 2018年07月10日 10:04 +08:00 . make comments not appear in stdout
#!/usr/bin/php
<?php
#
# Copyright 2018 Miriam Lauter (lauter.miriam@gmail.com). All rights reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# (http://www.gnu.org/copyleft/gpl.html)
#
# 13-Apr-2018 Miriam Lauter Created this.
ini_set('error_log', null);
$optind = null;
$args = getopt("htc", ["help"], $optind);
if (isset($args['h']) || isset($args['help'])) {
usage();
}
function usage($exit = 0) {
echo <<<EOT
stackcollapse-xdebug.php collapse php function traces into single lines.
Parses php samples generated by xdebug with xdebug.trace_format = 1
and outputs stacks as single lines, with methods separated by semicolons,
and then a space and an occurrence count. For use with flamegraph.pl.
See https://github.com/brendangregg/FlameGraph.
USAGE: ./stackcollapse-xdebug.php [OPTIONS] infile > outfile
-h --help Show this message
-t Weight stack counts by duration using the time index in the trace (default)
-c Invocation counts only. Simply count stacks in the trace and sum duplicates, don't weight by duration.
Example input:
For more info on xdebug and generating traces see
https://xdebug.org/docs/execution_trace.
Version: 2.0.0RC4-dev
TRACE START [2007年05月06日 18:29:01]
1 0 0 0.010870 114112 {main} 1 ../trace.php 0
2 1 0 0.032009 114272 str_split 0 ../trace.php 8
2 1 1 0.032073 116632
2 2 0 0.033505 117424 ret_ord 1 ../trace.php 10
3 3 0 0.033531 117584 ord 0 ../trace.php 5
3 3 1 0.033551 117584
...
TRACE END [2007年05月06日 18:29:01]
Example output:
- c
{main};str_split 1
{main};ret_ord;ord 6
-t
{main} 23381
{main};str_split 64
{main};ret_ord 215
{main};ret_ord;ord 106
EOT;
exit($exit);
}
function collapseStack(array $stack, string $func_name_key): string {
return implode(';', array_column($stack, $func_name_key));
}
function addCurrentStackToStacks(array $stack, float $dur, array &$stacks) {
$collapsed = implode(';', $stack);
$duration = SCALE_FACTOR * $dur;
if (array_key_exists($collapsed, $stacks)) {
$stacks[$collapsed] += $duration;
} else {
$stacks[$collapsed] = $duration;
}
}
function isEOTrace(string $l) {
$pattern = "/^(\\t|TRACE END)/";
return preg_match($pattern, $l);
}
$filename = $argv[$optind] ?? null;
if ($filename === null) {
usage(1);
}
$do_time = !isset($args['c']);
// First make sure our file is consistently formatted with only one \t delimiting each field
$out = [];
$retval = null;
exec("sed -in 's/\t\+/\t/g' " . escapeshellarg($filename), $out, $retval);
if ($retval !== 0) {
usage(1);
}
$handle = fopen($filename, 'r');
if ($handle === false) {
echo "Unable to open $filename\n\n";
usage(1);
}
// Loop till we find TRACE START
while ($l = fgets($handle)) {
if (strpos($l, "TRACE START") === 0) {
break;
}
}
const SCALE_FACTOR = 1000000;
$stacks = [];
$current_stack = [];
$was_exit = false;
$prev_start_time = 0;
if ($do_time) {
// Weight counts by duration
// Xdebug trace time indices have 6 sigfigs of precision
// We have a perfect trace, but let's instead pretend that
// this was collected by sampling at 10^6 Hz
// then each millionth of a second this stack took to execute is 1 count
while ($l = fgets($handle)) {
if (isEOTrace($l)) {
break;
}
$parts = explode("\t", $l);
list($level, $fn_no, $is_exit, $time) = $parts;
if ($is_exit) {
if (empty($current_stack)) {
echo "[WARNING] Found function exit without corresponding entrance. Discarding line. Check your input.\n";
continue;
}
addCurrentStackToStacks($current_stack, $time - $prev_start_time, $stacks);
array_pop($current_stack);
} else {
$func_name = $parts[5];
if (!empty($current_stack)) {
addCurrentStackToStacks($current_stack, $time - $prev_start_time, $stacks);
}
$current_stack[] = $func_name;
}
$prev_start_time = $time;
}
} else {
// Counts only
while ($l = fgets($handle)) {
if (isEOTrace($l)) {
break;
}
$parts = explode("\t", $l);
list($level, $fn_no, $is_exit) = $parts;
if ($is_exit === "1") {
if (!$was_exit) {
$collapsed = implode(";", $current_stack);
if (array_key_exists($collapsed, $stacks)) {
$stacks[$collapsed]++;
} else {
$stacks[$collapsed] = 1;
}
}
array_pop($current_stack);
$was_exit = true;
} else {
$func_name = $parts[5];
$current_stack[] = $func_name;
$was_exit = false;
}
}
}
foreach ($stacks as $stack => $count) {
echo "$stack$count\n";
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/myitgit/FlameGraph.git
git@gitee.com:myitgit/FlameGraph.git
myitgit
FlameGraph
FlameGraph
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /