您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页用ltrace坑了自己

用ltrace坑了自己

来源:爱问旅游网

     这些天有SRE告警说我的进程总是长时间占用满一个CPU核心,然后给我拉进一个告警群。一旦发现告警我就上机器看看。

     坚守了一些天,好家伙,终于出现了。

     一顿操作,登录机器,然后top,我的进程果然跑满了单个核,我的进程是做rtc混流的,都是编解码,混音,视频拼接的运算。视频编码是有fpp的,不太应该占满单核。

数据帧也不会无穷无尽,奇了怪了。于是ltrace一把?看到的调用栈是一些线程操作。好像没看出来啥,于是退出ltrace。

    退出后发现ubuntu的approt进程启动了,查了下,是因为有应用程序core了,一看果然是我的进程core了。

看下调用栈,

看到的栈是在gettimeofday函数例,然后周六的时候又出现了一台,彻底晕了。用gdb看了每一个线程的调用栈,都没有问题,chap工具也试了,也没发现啥问题。

 

     今天无意中,仔细看到core的信号是SIGTRAP,原来不是段错误,于是google了一下,trace/breakpoint, 原来是因为我ltrace导致的。

做实验试试,把正在混流的房间trace一把。

果然出现了。分析原因,ltrace会卡住当时正在执行的线程,然后别的线程还能跑,等ltrace退出的时候,恢复线程运行,这个时候,卡住的线程的资源可能已经被回收了,就马上挂了。

结论:没事不要在生产环境随便trace,gdb attach。 perf也要慎用,perf会导致线程运行速度变慢,前面那些会卡住当前线程。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务