多线程64位进程“内存不足”

时间:2014-06-30 22:08:24

标签: multithreading delphi debugging memory

我有内存和CPU密集型应用程序,它运行数百个并行执行文本处理的线程。后台有很多工作,处理文件,记录到磁盘等等。应用程序是在XE2下为x64平台编译的。

偶尔会崩溃,而且我已经尝试调试这个问题几天了,但没有成功。以下是错误报告:http://pastebin.com/raw.php?i=sSUXCznT

我尝试在调试器下运行它,并在一段时间后报告Out of Memory异常。在崩溃时,它使用了670mb的RAM,而机器的总RAM为32gb。

我当时认为它可能是碎片,但如果我正确地理解了这个错误报告,它会说最大的空闲块:8185.75 GB ,这表明碎片不是问题在这里。

应用程序不会在任何地方泄漏内存(至少我知道),我已启用ReportMemoryLeaksOnShutdown并且工作正常。

由于我没有任何其他想法,为什么它会因Out of memory异常而崩溃,我想得到一些提示,以便我可以找到正确的方法来解决这个问题。

1 个答案:

答案 0 :(得分:1)

尝试在System.pas procedure Error(errorCode: TRuntimeError);中设置断点。当内存不足时,您的应用程序应该停在那里。当你到达那里时,跳过ErrorAt函数(通过使用Debug->"设置下一个语句"在上下文菜单中)。这将默默地忽略异常,因此您可以更轻松地调试调用堆栈。使用F7保留函数,直到有一个有用的堆栈跟踪。