我被要求查看一个用 C++ 编写并在 Linux 上运行的内部应用程序,这有一些困难。周期性地它会有大量的主要页面错误(~200k),这会导致挂钟运行时间增加 x10+,然后在某些运行中它将没有。
我已经尝试隔离不同的代码片段,但在测试它时很难重复页面错误错误。
有没有人对从应用程序/Linux 中获取更多关于主要页面错误的信息有任何建议?我所拥有的只是一个总数。
我被要求查看一个用 C++ 编写并在 Linux 上运行的内部应用程序,这有一些困难。周期性地它会有大量的主要页面错误(~200k),这会导致挂钟运行时间增加 x10+,然后在某些运行中它将没有。
我已经尝试隔离不同的代码片段,但在测试它时很难重复页面错误错误。
有没有人对从应用程序/Linux 中获取更多关于主要页面错误的信息有任何建议?我所拥有的只是一个总数。
您可能想考虑Valgrid,主页上描述为:
Valgrind 是一个用于构建动态分析工具的仪器框架。Valgrind 工具可以自动检测许多内存管理和线程错误,并详细分析您的程序。您还可以使用 Valgrind 构建新工具。
具体来说,Valgrind 包含一个名为Massif的工具,手册中给出了以下(转述)概述:
Massif 是一个堆分析器。它测量您的程序使用了多少堆内存。[..]
堆分析可以帮助您减少程序使用的内存量。在具有虚拟内存的现代机器上,这提供了以下好处:
它可以加速你的程序——一个更小的程序将更好地与你机器的缓存交互并避免分页。
如果您的程序使用大量内存,它将减少耗尽机器交换空间的机会。