0

所以我有一个用 C++ 编写的应用程序,在 Ubuntu 12.04 上运行,它最初从数据库中读取一些数据,然后监视一个目录中的文件。当它们出现时,它会处理它们,然后将一些数据写回数据库。随着时间的推移,cpu 使用量逐渐增加,大约每天 5%,但内存使用量保持不变。逻辑上它看起来像这样:

-open db connect
-while(keep_running())
    - check dir for new files (I know - it should use the watch system and callbacks, but..)
    - process files
    - (possibly) update db
-end while
-close db connect

在您发出 SIGINT 信号之前,keep_running() 始终为真

代码并没有那么复杂,所以我对 cpu 的使用感到茫然 - callgrind 看起来不错。我怀疑数据库连接,但在其他类似的应用程序中并没有表现出这种行为。我的下一步是将 valgrind 附加到一个进程并让它运行几天 - 同时,我还能尝试什么?

4

2 回答 2

2

这并不奇怪。当您描述应用程序时,数据库表变得越来越大。

对较大表的查询可能会占用更多 CPU。您没有描述表、索引或查询,但行为是合理的。

您不一定会看到数据库使用的空间增加,因为数据库通常会在磁盘上为不断增长的表保留额外空间。

于 2013-02-28T16:00:37.743 回答
1

结果不是数据库部分——有人在一个巨大的地图对象上使用了 .find() 。这是一个隐藏在一堆 db 部分中的调用,这就是我倾向于 db 的原因。

这里没什么可看的,继续:)

于 2013-03-05T17:15:03.173 回答