5

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

有没有办法让 Valgrind 与我们的应用程序并行运行,这样我们就不会损失那么多性能?

4

4 回答 4

10

你不能那样做。Valgrind 实际上并没有在本地执行你的代码——而是在模拟器中运行它。这就是为什么它这么慢。因此,没有办法让它运行得更快,并且仍然可以从 Valgrind 中受益。

您最好的选择是设置 ,ulimit以便您的程序在崩溃时生成一个核心文件。然后,您可以尝试通过检查核心来找出问题所在。

于 2009-09-27T14:09:53.273 回答
6

值得注意的是,虽然 Valgrind 支持多线程程序,但如果您有多个可用内核,则实际上不会并行运行程序的线程。它还以比本机操作系统调度程序更细的粒度交错线程。这两个事实结合起来可能会使具有竞争条件或其他并发异常的程序表现不同。

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

于 2009-10-01T12:48:31.293 回答
1

这不是直接回答您的问题,但如果您怀疑同步错误,您是否尝试过使用 Valgrind 工具Helgrind

于 2009-09-27T13:36:02.177 回答
0

Valgrind 通过挂钩到您的 malloc 调用来工作,因此您可以期望您的程序在 valgrind 下运行得更慢。所以,我想说你不能在 valgrind 下更快地运行你的程序获得分析内存错误的好处。

于 2010-02-23T01:46:31.073 回答