0

そのため、Ubuntu12.04で実行されているC++で記述されたアプリがあります。このアプリは、最初にデータベースからデータを読み取り、ディレクトリでファイルを監視します。それらが表示されると、それらを処理してから、データをデータベースに書き戻します。時間の経過とともに、CPU使用率は徐々に増加し、1日あたり約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は正しく見えます。db接続が疑われますが、他の同様のアプリではこの動作は見られません。次のステップは、valgrindをプロセスにアタッチし、それを数日間実行することです。その間に、他に何か試すことができますか?

4

2 に答える 2

2

これは驚くべきことではありません。アプリケーションを説明すると、データベーステーブルが大きくなります。

より大きなテーブルでのクエリは、おそらくもう少しCPUを消費します。テーブル、インデックス、またはクエリについては説明しませんが、動作は合理的です。

データベースは通常、テーブルを拡張するためにディスク上に余分なスペースを予約するため、データベースによって使用されるスペースの増加は必ずしも見られません。

于 2013-02-28T16:00:37.743 に答える
1

db部分ではないことが判明しました-誰かが巨大なマップオブジェクトで.find()を使用していました。これは、一連のdbセクションに埋め込まれた1つの呼び出しであり、それが私がdbに傾倒していた理由です。

ここには何も表示されません、続けてください:)

于 2013-03-05T17:15:03.173 に答える