google-pprof检测到数值C++程序中__nss_database_lookup占大量时间的原因
异常剖析问题描述
基础环境与程序预期
- 剖析工具:google-pprof 行级性能剖析
- 程序属性:自研数值计算类C++程序
- 运行系统:Ubuntu 20.04
- 编译工具链:g++-7、g++-9
- 预期程序逻辑:仅执行数值计算、内存分配、自定义C++数据类型传递操作,无UNIX系统用户、权限相关的业务处理逻辑
观测到的异常现象
剖析结果显示,程序累计63.6%的运行时间消耗在系统函数__nss_database_lookup上。该函数原生职责为处理passwd等UNIX系统数据库查询事务,和程序设计的预期行为存在明显偏差。
匿名化处理后的剖析统计输出如下:
Total: 1046 samples
665 63.6% 63.6% 665 63.6% __nss_database_lookup ??:0
107 10.2% 73.8% 193 18.5%file.h:1035
92 8.8% 82.6% 92 8.8%file.h:...
87 8.3% 90.9% 87 8.3%file.h:995
17 1.6% 92.5% 734 70.2%file.h:1128
...
注:输出涉及的函数名、文件名已按保密要求做匿名化处理
核心待解疑问
- 该异常高时间占比的产生机制是什么?
- 剖析结果中
__nss_database_lookup的高占比,是否是google-pprof的工作机制导致的统计假象? - 若并非统计假象,该函数是否确实被高频调用,实际消耗了程序三分之二的运行时间?
- 若该函数确实被频繁触发,具体的调用来源是什么?是否是自研C++类存在误调用逻辑?
- 定位、排查该问题的具体操作步骤是什么?
内容的提问来源于stack exchange,提问作者Tom Ellis
相关产品推荐
相关产品推荐

