2009-09-16 15 views
7

私は他のアプリケーションを監視し、リソースの消費を追跡するLinuxアプリケーションを作成しています。私はJavaでの作業を計画していますが、プログラミング言語は私にとって重要ではありません。目標は重要なので、私は別の技術に切り替えたり、モジュールを使用したりすることができます。私のアプリケーションは、選択されたサードパーティアプリケーションを子プロセスとして実行します。ほとんどの子ソフトウェアは、グラフ、文字列検索などのアルゴリズムを解決します。オブザーバープログラムは、ジョブを終了している間、子のリソースを追跡します。スレッドメモリとCPU使用量のトラッキング

子アプリケーションがマルチスレッドの場合、どのように多くのリソースが各スレッドを消費するかを何らかの形で追跡することは可能でしょうか? Javaスレッド、Boostスレッド、POSIXスレッド、OpenMP、その他の分散メモリスレッド技術を使用してアプリケーションを記述できます。

+1

あなたはインスピレーションのためにOProfileを見ましたか? http://oprofile.sourceforge.net –

+0

いいえ、これは私の修士号です。たぶん私の講師が見た:-)しかし、OProfileは面白そうです。どうも。 – Pawka

答えて

5

最新のLinuxシステム(2.6)では、各スレッドには、pidとほぼ同じ扱いの別の識別子があります。プロセステーブル(少なくともhtopプログラム)に表示され、別の/procというエントリもあります。つまり、/proc/<tid>/statです。

​​をチェックし、特に注意してください。statstatmstatusなどです。そこに興味のある情報があります。

この唯一の障害はスレッドの識別子を取得することです。プロセスIDがの場合、は異なる!私。 getpid()すべてのスレッドで同じ値が返されます。実際のスレッドIDを取得するには、(Cプログラム内で)使用する必要があります。

pid_t tid = syscall(SYS_gettid); 

ところで、Java仮想マシン(少なくとも、そのOpenJDKのLinuxの実装)は、内部とにデバッグ目的のためにそれを使用していることを行いますそのバックエンドは、Javaインターフェイスに公開しません。

4

メモリはスレッドに割り当てられず、しばしばスレッド間で共有されます。これは一般的に不可能であり、少なくともスレッドのメモリ消費について話すことは無意味になります。

例としては、11スレッドのプログラムがあります。 1つはオブジェクトの作成、10はそのオブジェクトの使用です。ほとんどの作業はこれらの10個のスレッドで行われますが、すべてのメモリはオブジェクトを作成した1つのスレッドに割り当てられています。今、どうやってそれを説明していますか?

+0

あなたが正しくないとは言えません。しかし、単一スレッドのメモリ使用量は、特定のスレッドが現時点で動作するメモリの量であると仮定できます。ほとんどのスレッドは、データを操作しながら、セモフォアやmutexでメモリをロックします。 – Pawka

+0

申し訳ありませんが、それでも理にかなっていません。読み取り専用メモリーはまったくロックする必要はありません。ミューテックスを使用する場合、コードに行かずにどのメモリを保護するかを判断する合理的な方法はありません。 – MSalters

+0

私は読み込み専用メモリについて話していません。私たちはまだスレッドのメモリ消費量をカウントできます。たとえば、いくつかのグラフを使って作業したり、何らかの計数などのためにノードを作成したりすることができます。これらの各データは、1つのスレッドでアクセス可能で、単独で作成され、 – Pawka

1

あなたはこれを見てみるPerlを使用して喜んでいる場合:Sys-Statistics-Linux

が、私は様々な処理のためのシステムリソースの使用状況のグラフを生成するためにGDのグラフパッケージの一部と一緒にそれを使用。

注意すべきことは、/ procを読み、jiffiesを理解する必要があることです。最後には、マニュアルページに正しく書かれていないと思われます。おそらくカーネルソースを読む必要があります: - 彼らは、カーネルがそれらを実装する方法で同じだということ以外

http://lxr.linux.no/#linux+v2.6.18/include/linux/jiffies.h

また、Linuxでスレッドやプロセス間の唯一の違いは、スレッドがメモリを共有することであることを覚えておいてください。

+0

Sys-Statistics-Linuxリンクが壊れています。 –

関連する問題