SRS性能(CPU)、内存优化工具用法

如题所述

第1个回答  2022-07-08
SRS提供了一系列工具来定位性能瓶颈和内存泄漏,这些在 ./configure && make 后的 summary 中是有给出来用法的,不过不是很方便,所以特地把用法写到这个文章中。

文中所有的工具,对于其他的linux程序也是有用的。

RTC是UDP的协议,先设置 网卡队列缓冲区 ,下面命令是UDP分析常用的:

也可以修改系统文件 /etc/sysctl.conf ,重启也会生效:

查看接收和发送的丢包信息:

查看接收和发送的长度:

下面是netstat的一些参数:

PERF是Linux性能分析工具,参考[PERF](perf record -e block:block_rq_issue -ag)。

可以实时看到当前的SRS热点函数:

或者记录一定时间的数据:

记录堆栈,显示调用图:

GPROF是个GNU的CPU性能分析工具。参考 SRS GPROF ,以及 GNU GPROF 。

Usage:

GPERF是 google tcmalloc 提供的cpu和内存工具,参考 GPERF 。

GCP是CPU性能分析工具,就是一般讲的性能瓶颈,看哪个函数调用占用过多的CPU。参考 GCP 。

Usage:

图形化展示,在CentOS上安装dot:

然后生成svg图片,可以用Chrome打开:

GMD是GPERF提供的内存Defense工具,检测内存越界和野指针。一般在越界写入时,可能不会立刻导致破坏,而是在切换到其他线程使用被破坏的对象时才会发现破坏了,所以这种内存问题很难排查;GMD能在越界和野指针使用时直接core dump,定位在那个出问题的地方。参考 GMD 。

Usage:

GMC是内存泄漏检测工具,参考 GMC 。

Usage:

GMP是内存性能分析工具,譬如检测是否有频繁的申请和释放堆内存导致的性能问题。参考 GMP 。

Usage:

VALGRIND是大名鼎鼎的C分析工具,SRS3之后支持了。SRS3之前,因为使用了ST,需要给ST打PATCH才能用。

系统调用的性能排查,参考 centos6的性能分析工具集合

在OSX/Darwin/Mac系统,可以用Instruments,在xcode中选择Open Develop Tools,就可以看到Instruments,也可以直接找这个程序,参考 Profiling c++ on mac os x

还有DTrace可以用,参考 动态追踪技术(中) - Dtrace、SystemTap、火焰图 或者 浅谈动态跟踪技术之DTrace 。

多核时,一般网卡软中断在CPU0上,可以把SRS调度到其他CPU:

或者,指定SRS运行在CPU1上:

调整后,可以运行 top ,然后按数字 1 ,可以看到每个CPU的负载:

或者使用 mpstat -P ALL :

如果是多CPU,比如4CPU,则网卡中断可能会绑定到多个CPU,可以通过下面的命令,查看网卡中断的绑定情况:

我们可以强制将网卡软中断绑定到CPU0,参考 Linux: scaling softirq among many CPU cores 和 SMP IRQ affinity :

然后将SRS所有线程,绑定到CPU0之外的CPU:

如果要获取极高的性能,那么可以在SRS的启动脚本中,在启动SRS之前,执行绑核和绑软中断的命令。

可以设置SRS为更高的优先级,可以获取更多的CPU时间:

可以从ps中,看到进程的nice,也就是 NI 字段:
相似回答
大家正在搜