我需要使用Valgrind来检测服务器应用程序中发生的任何内存访问冲突。服务器创建许多线程。我怀疑有一个竞赛条件导致服务器每隔1小时左右崩溃。我们使用Valgrind来分析其内存使用情况,但服务器进程的速度急剧下降。服务器的速度下降很多,几乎没有可用性,没有可能的赛车条件。如何与我们的流程并行运行Valgrind,以便其性能不会降低太多?
有没有办法与我们的应用程序并行运行Valgrind,所以我们不会失去那么多的性能?
我需要使用Valgrind来检测服务器应用程序中发生的任何内存访问冲突。服务器创建许多线程。我怀疑有一个竞赛条件导致服务器每隔1小时左右崩溃。我们使用Valgrind来分析其内存使用情况,但服务器进程的速度急剧下降。服务器的速度下降很多,几乎没有可用性,没有可能的赛车条件。如何与我们的流程并行运行Valgrind,以便其性能不会降低太多?
有没有办法与我们的应用程序并行运行Valgrind,所以我们不会失去那么多的性能?
这不是直接回答您的问题,但是如果您怀疑同步错误,您是否尝试过使用Valgrind工具Helgrind?
你不能那样做。 Valgrind本质上并不实际执行你的代码,而是在模拟器中运行它。这就是为什么它如此缓慢。所以,没有办法让它跑得更快,并且仍然可以得到Valgrind的好处。
最好的办法是设置ulimit
,以便程序在崩溃时生成核心文件。然后,您可以通过检查核心来设法解决问题。
+1,我正要给出几乎相同的答案。 – 2009-09-27 15:55:27
Valgrind通过挂接到你的malloc调用中工作,所以你可以期望你的程序在valgrind下运行得更慢。所以,我会说,你不能在valgrind 和得到分析内存错误的好处时更快地运行你的程序。
因为我不是专业的Valgrind用户,所以我之前并不知道Helgrind。我今天才知道。我怀疑是一个对象正在被删除,但另一个线程正试图访问它,并导致进程崩溃。这很可能是因为该应用程序编码非常差。我会尝试Helgrind,看看它能提供什么。 – 2009-09-27 19:11:18