堆剖析工具

了解堆探查器服务。

brpc公司可以分析内存是被哪些函数占据的。堆剖析工具的原理是每分配满一些内存就采样调用处的栈,一些”由环境变量TCMALLOC_SAMPLE_PARAMETER、默524288、即512K字节。根据栈表现出的函数调用关系汇总为我们看到的结果图。在实践中堆剖析工具对原程序的影响不明显。

开启方法

  1. 链接libtcmalloc_and_profiler。

    1. 如果tcmalloc帧指针libunload回溯栈,请确保在CXXFLAGS或CFLAGS中国-fno-omit-frame指针否则函数间的调用关系会丢失,最后产生的图片中都是彼此独立的函数方框。
  2. 壳体中心导出TCMALLOC_SAMPLE_PARAMETER=524288该变量指每分配这么多字节内存时做一次统计,默认为0,代表不开启内存统计。官方文档建议设置为524288。这个变量也可在运行前临时设置,如TCMALLOC_SAMPLE_PARAMETER=524288/服务器如果没有这个环境变量,可能会看到这样的结果:

    $tools/pprof—文本localhost:9002/pprof/heap正在从获取/prof/堆配置文件http://localhost:9002/pprof/heap/home/gejun/prof/echo_server.1419559063.localhost.pprof.heap将配置文件写入/home/gejun/prof/echo_server.1419559063.localhost.pprof.heap/home/gejin/pprof/echo_server.1415559063.localhost.pprof.heap:标头大小>=2**16
  3. 如果只是brpc客户端这里

联系方式服务器端的认证,否则可能会看到这个:

$tools/pprof—文本localhost:9002/pprof/heap在tools/pprof行2703处使用未初始化的值替换(s///)。http://localhost:9002/pprof/symbol不存在

服务器端可能会有这样的日志:

致命错误:12-26 10:01:25:*0[src/brpc/policy/giano_authenticator.cpp:65][4294969345]giano未能验证凭证,70003警告:12-26 10:01:25:*0[src/brpc/input_messenger.cpp:132][4294969345]身份验证失败,sockfd=5的远程端(127.0.0.1:22989),请关闭它

图示

国际货币基金组织

左上角是当前程序通过malloc公司分配的内存总量,顺着箭头上的数字可以看到内存来自哪些函数。

点击左上角的文本选择框可以查看文本格式的结果,有时候这种按分配量排序的形式更方便。

国际货币基金组织

左上角的两个选择框作用分别是:

  • 查看:个人资料选择<新配置文件>表示新建一个。新建完毕后,查看选择框中会出现新配置文件,URL也会被修改为对应的地址。这意味着你可以通过粘贴统一资源定位地址分享结果,点击链接的人将看到和你一模一样的结果,而不是重做剖析的结果。你可以在框中选择之前的配置文件,配置文件–保留的最大配置文件数调整。
  • 差异:和剖面图表示什么都不选。如果你选择了之前的某个配置文件,查看配置文件差异配置文件

下图演示了勾选差异和文本

国际货币基金组织

Linux操作系统下,你也可以使用批准(工具/批准)在命令行中查看文本格式结果:

$tools/pprof—文本db-rpc-dev00.db01:8765/prof/heap正在从获取/prof/heap配置文件http://db-rpc-dev00.db01:8765/prof/heap/home/gejun/prof/play_server.1453216025.db-rpc-dev00.db01.prof.heap将配置文件写入/home/gejin/pprof/play_server.1453216025.db-rpc-dev00.db01.pprof.heap针对1-in-524288采样率调整堆配置文件堆版本2总计:38.9 MB35.8 92.0%92.0%35.8 92.0%::cpp_alloc2.1 5.4%97.4%2.1 5.4%butil::平面贴图0.5 1.3%98.7%0.5 1.3%butil::IOBuf::append0.5 1.3%100.0%0.5 1.3%butil::IOBufAsZeroCopyOutputStream::Next0.0 0.0%100.0%0.6 1.5%MallocExtension::GetHeapSample0.00.0%100.0%0.5 1.3%ProfileHandler::初始化0.0 0.0%100.0%0.5 1.3%ProfileHandlerRegisterCallback0.0 0.0%100.0%0.5 1.3%__do_global_ctors_aux0.0 0.0%100.0%1.6 4.2%_结束0.0 0.0%100.0%0.5 1.3%_输入0.0 0.0%100.0%0.6 1.5%brpc::关闭空闲连接0.0 0.0%100.0%1.1 2.9%brpc::全局更新0.00.0%100.0%0.61.5%brpc::PProfService::heap0.0 0.0%100.0%1.9 4.9%brpc::套接字::创建0.0 0.0%100.0%2.9 7.4%brpc::套接字::写入0.0 0.0%100.0%3.8 9.7%brpc::范围::CreateServerSpan0.0 0.0%100.0%1.4 3.5%brpc::SpanQueue::Push0.0 0.0%100.0%1.9 4.8%butil::ObjectPool(对象池)0.0 0.0%100.0%0.8 2.0%butil::资源池0.0 0.0%100.0%1.0 2.6%butil::iobuf::tls_block0.0 0.0%100.0%1.0 2.6%bthread::TimerThread::Bucket::schedule0.0 0.0%100.0%1.6 4.1%b线程::get_stack0.0 0.0%100.0%4.2 10.8%bthread_id_create0.0 0.0%100.0%1.1 2.9%bvar::变量::describe_series_exposed0.0 0.0%100.0%1.0 2.6%bvar::detail::AgentGroup0.0 0.0%100.0%0.5 1.3%bvar::detail::Percentile::operator0.0 0.0%100.0%0.5 1.3%bvar::detail::PercentileSamples0.00.0%100.0%0.5 1.3%bvar::detail::Sampler::schedule0.0 0.0%100.0%6.5 16.8%leveldb::Arena::AllocateNewBlock0.00.0%100.0%0.5 1.3%leveldb::VersionSet::LogAndApply0.0 0.0%100.0%4.2 10.8%pthread_mutex_unlock0.0 0.0%100.0%0.5 1.3%深度0.0 0.0%100.0%0.5 1.3%标准::_Rb_tree0.0 0.0%100.0%1.5 3.9%标准::basic_string0.0 0.0%100.0%3.5 9.0%标准::字符串::_Rep::_S_create

brpc公司还提供一个类似的生长剖面仪分析内存的分配去向不考虑释放)。

国际货币基金组织

MacOS电脑

  1. 安装独立审批,批准二进制文件路径写入环境变量GOOGLE_PPROF_BINARY_PATH中心
  2. 安装llvm符号发生器(将函数符号转化为函数名),直接用酿造:brew安装llvm

上次修改时间:2024年5月6日更新index.md(66353dc)