CPU使用分析
krpc可以分析程序中的热点函数。
开启方法
- 链接
libtcmalloc_and_profiler.a- 这么写也开启了tcmalloc,不建议单独链接cpu profiler而不链接tcmalloc,可能越界访问导致crash.可能由于tcmalloc不及时归还内存,越界访问不会crash。
- 如果tcmalloc使用frame pointer而不是libunwind回溯栈,请确保在CXXFLAGS或CFLAGS中加上
-fno-omit-frame-pointer,否则函数间的调用关系会丢失,最后产生的图片中都是彼此独立的函数方框。
- 定义宏KRPC_ENABLE_CPU_PROFILER, 一般加入编译参数-DKRPC_ENABLE_CPU_PROFILER。注意:KRPC_ENABLE_CPU_PROFILER宏需要定义在引用到krpc头文件(channel.h或server.h)的代码里。比如A模块引用B模块,B模块在实现中引用krpc头文件,必须在B模块的编译参数加上KRPC_ENABLE_CPU_PROFILER宏,在A模块加是没用的。
- 如果只是krpc client或没有使用krpc,看这里。
注意要关闭Server端的认证,否则可能会看到这个:
$ tools/pprof --text localhost:9002/pprof/profile
Use of uninitialized value in substitution (s///) at tools/pprof line 2703.
http://localhost:9002/profile/symbol doesn't exist
server端可能会有这样的日志:
FATAL: 12-26 10:01:25: * 0 [src/krpc/policy/giano_authenticator.cpp:65][4294969345] Giano fails to verify credentical, 70003
WARNING: 12-26 10:01:25: * 0 [src/krpc/input_messenger.cpp:132][4294969345] Authentication failed, remote side(127.0.0.1:22989) of sockfd=5, close it