如何与我们的流程并行运行Valgrind,因此其性能不会降低太多?

red*_*ver 5 linux debugging multithreading valgrind

我需要使用Valgrind来检测服务器应用程序中发生的任何内存访问冲突.服务器创建许多线程.我怀疑有一种竞争条件会导致服务器每1小时左右崩溃一次.我们使用Valgrind分析其内存使用情况,但服务器进程的速度急剧下降.服务器的速度下降太多,以至于几乎无法使用,也没有可能的竞赛条件.

无论如何,与我们的应用程序并行运行Valgrind,所以我们不会失去那么多的性能?

ale*_*gle 9

你不能这样做.Valgrind实际上并不是本地执行代码 - 而是在模拟器中运行它.这就是它如此缓慢的原因.因此,没有办法让它运行得更快,仍然可以获得Valgrind的好处.

最好的办法是设置,ulimit以便程序在崩溃时生成核心文件.然后你可以尝试通过检查核心来找出问题所在.


Fal*_*ina 5

值得注意的是,Valgrind在支持多线程程序的同时,如果你有多个核心可用,它们并不会实际并行运行程序的线程.它还以比本机OS调度程序更精细的粒度交错线程.这两个事实相结合可能使得具有竞争条件或其他并发异常的程序将表现不同.

您可能想尝试Helgrind,一种主要用于检测正确锁定规则的工具和drd,这是一种主要用于检测数据竞争的工具.