所以我有一个用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()始终为true代码并不复杂,所以我对cpu的使用感到茫然 - callgrind看起来很正确。我怀疑数据库连接,但在其他类似的应用程序中没有表现出这种行为。我的下一步是将valgrind附加到一个进程并让它运行几天 - 同时,我可以尝试其他任何东西?
答案 0 :(得分:2)
这并不令人惊讶。在描述应用程序时,数据库表变得越来越大。
对较大的表的查询可能需要更多的CPU。您没有描述表,索引或查询,但行为是合理的。
您不一定会看到数据库使用的空间增加,因为数据库通常会在磁盘上为增长的表保留额外的空间。
答案 1 :(得分:1)
原来不是db部分 - 有人在巨大的地图对象上使用.find()。这是一个埋在一堆数据库部分中的调用,这就是为什么我倾向于db。
这里没什么可看的,继续:)