2

パフォーマンス メトリックを格納するためのグラフ作成バックエンドとしてRRDTool ( http://oss.oetiker.ch/rrdtool/ ) を使用しています。これは、Python スクリプトから RRDTool CLI を介して実行されます。

私の問題は、スクリプトがマルチスレッド化されており、各スレッドが RRD を非常に速いペースで更新していることです。1 つのスレッドが RRD ファイルにアクセスしているときに、別のスレッドが RRD ファイルにアクセスしようとしているために、更新が失敗することがあります。

RRDTool は独自のロック メカニズムを使用しているため、これを試しても問題ないという印象を受けましたが、そうではないと思います。

RRDへの同時アクセスのための良いアプローチを持っている人はいますか?

いくつかの方法を考えることができます:

  1. 1 つのスレッドでキューを作成し、単一のスレッドからのみ RRD をフィードします。

  2. Python スクリプト内に独自のロック メカニズムを作成します。(どうすればいいですか?)

以前にこの問題に遭遇したことがありますか?

4

4 に答える 4

2

rrd-users リストのこのスレッドは役に立つかもしれません。rrdtool の作成者は、そのファイル ロックが同時読み取りと書き込みを処理すると述べています。

于 2010-07-22T11:40:09.513 に答える
1

この問題には排他ロックで十分です。

スレッド レベルではなく、メイン レベルでロック オブジェクトを定義すれば完了です。

コメントに応じて編集:

ロック ( lock = new Lock()) をスレッド レベルで定義すると、実行中のスレッドごとに 1 つのロック オブジェクトが作成され、ファイル rrdtool の更新に対して 1 つのロックが必要になるため、この定義はメイン レベルで行う必要があります。

于 2008-09-25T15:32:22.893 に答える