2013-02-28 95 views
0

因此,我有一个用C++编写的应用程序,运行在Ubuntu 12.04上,最初从数据库读取一些数据,然后观察目录中的文件。当它们出现时,它会处理它们,然后将一些数据写回到数据库。随着时间的推移,CPU使用率逐渐增加,大约为每天5%左右,但内存使用率保持不变。从逻辑上讲,它看起来是这样的:逐渐增加CPU使用率而不增加内存。想法?

-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

的代码并不复杂,所以我在为CPU使用率损失keep_running()总是真 - callgrind期待权。我怀疑数据库连接,但没有在其他类似的应用程序中表现出这种行为。我的下一步是将valgrind附加到一个流程并让它运行几天 - 同时,我可以尝试的其他任何事情?

回答

1

原来不是db部分 - 有人在巨大的地图对象上使用.find()。这是一个埋在一堆db部分的调用,这就是为什么我倾向于db。

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

2

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

在较大的表上查询可能需要更多的CPU。您不描述表,索引或查询,但行为是合理的。

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

+0

那么也许优化更新查询?它目前是INSERT INTO(blah)VALUES(blah)有没有更好的方法? – 2013-02-28 16:01:39

+0

@ codeMonkey_39。 。 。你的问题是一般的。我的答案是一般的。从你说的话来看,CPU数量的增加是由于数据量增加。有可能使代码更有效的方法,但整个应用程序的分析超出了本论坛的范围。 – 2013-02-28 16:08:04

+0

因此,对于一个大型表项的INSERT需要比对较小的INSERT更长的时间?我对数据库了解不多,但这似乎与直觉相反...... – 2013-02-28 16:23:10