2013-02-28 96 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