- PR -

HORBオブジェクトのオーバーヘッド

1
投稿者投稿内容
しんにぃ
会議室デビュー日: 2006/09/05
投稿数: 17
投稿日時: 2006-12-05 19:21
現在、HORBを用いて研究を行っているのですが、HORBのデーモンオブジェクトをHORBサーバ上に一つ登録するとどの程度のメモリを使用するのか?や登録する際のCPUの使用率はどの程度なのか?また分散されたオブジェクト同士の通信にかかるネットワークトラフィックの量は?など評価の段階で必要な基本的な情報のとりかたがよくわからないのですが、単に自分でストップウォッチを持って調べたりするような方法以外にあるのでしょうか?どなたか教えていただけないでしょうか?HORBというよりJavaの話になるのかもしれませんが。。。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2006-12-06 18:56
 Javaというよりプログラム一般のお話のような気がします。

 ツールとか探せはいろいろありそうですが,
あまり詳しくないので簡単に試したときの方法。

1) メモリ使用量
 処理前と後でjava.lang.RuntimeのtotalMemory()とfreeMemory()を表示すると
おおよその使用メモリサイズがわかる。(Cでもツールを使わないときは同じような)
JavaSE6なら
 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxx -Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
で起動してjconsoleで見るという手もあるかもしれない。
jconsoleを使うとCPU使用状況も見れるようだ。
Windowsならタスクマネージャで見れると思う。

2) ネットワークトラフィック
 Snortなどのネットツールで見れるような気がしますが、使ったことがないので、詳しくかけません。
 昔やったのはproxyみたいに記録するだけ中継サーバ(0.3kstepくらい)を作って、
そこで中継して記録してました。

3) 時間の計測
 ストップウォッチ使うくらいならプログラムの先頭と最後で
System.currentTimeMillis()を呼んで、差(ms)を表示/ログしたほうが健全です。

しんにぃ
会議室デビュー日: 2006/09/05
投稿数: 17
投稿日時: 2006-12-07 02:02
>だっちょさん

返答ありがとうございます。
sっそくだっちょさんに教えていただいたjava.lang.RuntimeのメソッドとSystem.currentTimeMillis()について調べて実際に使ってみました。なんとなく使い方もわかってきて実験が進みそうです。ありがとうございます。
しかしここで少しわからないのですが、Runtimeの書くメソッドが返す値というのはPC全体の総メモリ量ではなくJVMが確保しているメモリ量という認識で正しいでしょうか?また各値の単位はByteで合っていますか?
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-12-07 02:31
JavaSE5からはjava.lang.instrumentが追加されたので、探してみれば
プロファイリング系ツールがいろいろと作られていそうな気がします。

引用:

しんにぃさんの書き込み (2006-12-07 02:02) より:
しかしここで少しわからないのですが、Runtimeの書くメソッドが返す値というのはPC全体の総メモリ量ではなくJVMが確保しているメモリ量という認識で正しいでしょうか?また各値の単位はByteで合っていますか?



JVMのバイト単位のヒープ容量です。

空き容量はGCの影響が大きいので計測方法を工夫する必要があります。
オブジェクトの初期化に使っただけのオブジェクトでも、GCが走るまでは
残り続けますし、世代別GCの影響ですぐに回収されないこともあります。

オブジェクト単位のメモリ使用量ならば、
java.lang.instrument.Instrumentationにそのものなメソッドがあります。

引用:

だっちょさんの書き込み (2006-12-06 18:56) より:
JavaSE6なら
 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxx -Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
で起動してjconsoleで見るという手もあるかもしれない。
jconsoleを使うとCPU使用状況も見れるようだ。



JMXはJavaSE5から使えますよ。
jconsoleはヒープの状況も見れますし、
ざっくりな計測には便利かもしれませんね。
しんにぃ
会議室デビュー日: 2006/09/05
投稿数: 17
投稿日時: 2006-12-07 20:02
>あしゅさん
返答ありがとうございます。
instrunmentというのは初めて聞きました。さっそく調べてみたいと思います。

やはりバイト単位なのですね。GCについてはあまり意識したことがなかったので注意したいと思います。

jconsoleというのは調べてみるとなかなか便利そうですね。使いこなせるか怪しいですがww

ここでJavaとは直接関係ない質問なのですが、複数台のPCで構成されたアドホックネットワーク環境において、それぞれのPCをつなぐ網目状のネットワークの中から、一筆書きのような感じで一本のルートでつながった一列のネットワークとみなし、その両端に位置するPCのIPやホストなどを自動的に取得する、なんてことは可能なのでしょうか?

オブジェクトのレプリケーションについて研究していまして、従来の研究ではクライアント側のPCにサーバオブジェクトのレプリカを置く手法をとっているのですが、これだとクライアントが増えるにしたがってレプリカの配置及び更新にかかるオーバヘッドが高くなってしまうと考え、単純なのですが、ネットワークの両端にとりあえずレプリカを置いておけば高々一つまでの切断には対応可能であるというアプローチを取っているのです。
わかりにくい質問で申し訳ないのですが、よろしかったらアドバイスなどお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)