[alibaba/arthas]修改ProfilerCommand的错误样例

2024-07-17 456 views
2

根据Async-profiler,include,exclude参数在采样的时候是不起作用的,只在dump的时候起作用。 如果profiler start带--include,--exclude参数而stop没有带是无法排出指定包的,因此样例

profiler start --include 'java/*' --include 'com/demo/*' --exclude '*Unsafe.park*'

中的"start"应该改为"stop"

回答

8

async-profiler 的具体文档的哪里?没有找到有说明 dump 才起作用。

3

我自己使用的时候发现有这个问题,async-profiler文档没有找到这个问题的说明 后来翻了一下async-profiler 的代码

在profiler.cpp里面,这两个参数是在excludeTrace这个函数里用到的

bool Profiler::excludeTrace(FrameName* fn, CallTrace* trace) {
    bool checkInclude = fn->hasIncludeList();
    bool checkExclude = fn->hasExcludeList();
    if (!(checkInclude || checkExclude)) {
        return false;
    }

    for (int i = 0; i < trace->num_frames; i++) {
        const char* frame_name = fn->name(trace->frames[i], true);
        if (checkExclude && fn->exclude(frame_name)) {
            return true;
        }
        if (checkInclude && fn->include(frame_name)) {
            checkInclude = false;
            if (!checkExclude) break;
        }
    }

    return checkInclude;
}

这个函数有三个地方调用,分别在dumpCollapsed ,dumpFlameGraph,dumpText

5

的确是 stop才起作用 ? 。还需要更新相关的文档: site/docs/doc/profiler.md , site/docs/en/doc/profiler.md