Linux 程序启动缓慢,如何查看缓慢在那里?

2023-09-11 21:12:50 +08:00
 LuckyPocketWatch

系统是 ubuntu,我用 C++写了一个程序

int main(){
    std::cout<<get_current_time();  
    //do something..
    std::cout<<get_current_time();
    return 0;
}

编译的时候需要链接一些动态/静态库,然后运行的时候执行命令./T1,程序大约 10 秒后会打印

11:58:43:389
11:58:43:421

我有没有办法知道,我输入./T1 命令到执行第一行代码 std::cout<<get_current_time();这段时间程序做了什么,有哪些步骤,每步耗时大概多少?

我有 sudu 密码但没有 root 权限

1849 次点击
所在节点    Linux
8 条回复
yanqiyu
2023-09-11 21:27:18 +08:00
盲猜是你链接的库里面的全局/静态对象初始化的时间
可以借助 gprof 这样的 profile 工具采样调查耗时
或者-finstrument-functions 配合手写__cyg_profile_func_enter 以及__cyg_profile_func_exit 直接看每个函数的耗时(不知道有没有造好的轮子)
Jirajine
2023-09-11 21:34:15 +08:00
strace 和 gdb
LindsayZhou
2023-09-11 22:45:32 +08:00
uprobe
LindsayZhou
2023-09-11 22:54:58 +08:00
https://v2ex.com/t/953231

不太明白你说的有 sudo 密码没 root 权限是什么意思,只允许 sudo 切换到非特权用户?
uprobe 目前应该还是要 root 权限。
eatgrass
2023-09-11 23:18:03 +08:00
eatgrass
2023-09-11 23:19:50 +08:00
passive
2023-09-11 23:31:08 +08:00
之前遇到过一次图形驱动没设置好,gui 库走 mesa 加载了 opencl 还是 cuda 的 so ,每次启动先检测硬件,超时了才继续。
GeekGao
2023-09-12 02:57:27 +08:00
5 楼已经提及了,perf report

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/972841

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX