V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jimy1
V2EX  ›  C

请问 perf record 生成程序运行统计信息(排查 CPU 占用过高)只能通过 perf ./test 启动程序,还是可以直接对正在运行的程序进行分析呢?

  •  
  •   jimy1 · 2017-11-10 11:27:26 +08:00 · 1999 次点击
    这是一个创建于 2600 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟维护的一个程序在客户现场运行占用 CPU 过高(几百上千),请问怎么能不重启这个程序就能大概分析出耗费 CPU 的大概代码段?谢谢了

    5 条回复    2017-11-10 12:24:12 +08:00
    detailyang
        1
    detailyang  
       2017-11-10 11:34:20 +08:00   ❤️ 1
    cpu 利用率高是一种非常容易优化的行为(复现条件),你可以利用成熟的 linux 跟踪工具 stap 和 perf 等来进行在线活体分析,你的场景下,建议使用 perf, 方便安装。你可以通过 `perf record -F 99 -p 13204 -g -- sleep 30` 来采样 on-cpu 的热点函数,或者 perf top -p 13204 直接进行观测,注意跟踪工具只能做到 C-Land 级别的跟踪,更上一层的虚拟机级别的需要自己额外实现。
    jimy1
        2
    jimy1  
    OP
       2017-11-10 11:39:21 +08:00
    谢谢 detailyang
    chunk
        3
    chunk  
       2017-11-10 12:02:28 +08:00   ❤️ 1
    我记得 perf 可以直接查看运行中的进程的 https://perf.wiki.kernel.org/index.php/Tutorial#Attaching_to_a_running_process
    Mirana
        4
    Mirana  
       2017-11-10 12:18:04 +08:00   ❤️ 1
    perf top -p <pid>
    gouchaoer
        5
    gouchaoer  
       2017-11-10 12:24:12 +08:00   ❤️ 1
    perf 查看调用栈对不同的语言有的可能看不到,建议你看看: https://huoding.com/2016/08/18/531
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5501 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:42 · PVG 11:42 · LAX 19:42 · JFK 22:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.