• 締切済み

Java visualVM 何を監視すれば・・・

こんにちわ visualVMについて質問がございます。 わかる方いらっしゃれば、ぜひご教授お願い致します。 現在、JavaのJNIを使用し、C++のプログラム(他社製dll)を呼び出すシステムを開発しております。 その中で、プログラムを実行し、VMが落ちることもなく順調に走らせ、 問題なく終了すると、プログラムと同じフォルダに hs_err_pid5368.logというものが生成されます。 終了するたび1つずつ増えていきます。 調べたところ、JavaのVMが異常終了したときにVMから生成されるものでした。 さらに調べたところ、メモリ管理の問題や、コーディングの問題、クラスデータ共有の問題であることだとインターネットにありました。 ですので、これらの問題を解決しようと、 プログラムを見直して書き換えたり ヒープを増やして実行したり dllに問題がないか問い合わせたり クラスデータ共有を無効にして実行したりしても、改善されません。 そこで、visualVMでVMを監視することにしましたが CPUのどこを見ればいいのか メモリの何がいけないのか スレッドの・・・ヒープの・・・(以下略) 何がどうなったらVMに悪影響が出るのか わかりかねております。 わかる方いらっしゃれば、どうかご教授宜しくお願い致します。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.1

なぜjavavmの出力する hs_err_pid5368.log を問題解決するのに活用しないんでしょうか? javavmが異常終了する際の各種情報が出力されてるのですけど。 また以前質問されていた http://okwave.jp/qa/q7517687.html の続きだと思うのですが、他社製DLLの使い方を間違っていないか確認した方がよいと思いますよ。 BSTRのポインタを要求してるのに戻ってくるのがマルチバイト文字列ということ自体おかしかったですし。

pokeman-v
質問者

お礼

ご回答ありがとうございます 諦めかけておりましたので、大変助かります。 すぐに調査致したいと思います。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • dll ⇒ 自作dl ⇒ Java

    お世話になっております。 何度も質問して申し訳ないですが、わかる方いらっしゃれば ご回答よろしくお願いいたします。 現在JavaでJNIを使用し、呼び出したC++からハードウェアへ 接続するというプログラムを開発しております。 その際、C++をdll形式にして、そのdllをJavaで呼び出すような形なのですが 私が使用しているコンピュータ(Windows 7)では、ハードウェアへの接続ができています。 コマンドを送信し、レスポンスを取得し、Javaのプログラムで表示ができます。 しかし、別のコンピュータ(Windows XP)で、開発したプログラムを実行すると dllを読み込む時点で下記のエラーが出てしまいます。 java.lang.UnsatisfiedLinkError: no JNI001 in java.library.path JNI001がC++で作成したdllです。 JNI001.dllは、実行したプログラムと同じフォルダにありますので、おかしいなと思いまして C:\Windows へ入れてみても結果は変わりません。 私が使っていたコンピュータのeclipseをまるまるコピーして実行しても効果なし。 環境変数も私のコンピュータとほとんど変わりません。 XPのJavaをインストールし直しても変わりません。 フォルダ階層やフォルダ名などチェックしましたが、7とXPで変わった点もないように思います。 そこで、少し気になったのですが、 現在開発中のプログラムは Java → JNI001.dll → ○○.dll → ハードウェア ○○.dllはハードウェアを動かすためのdllです。 上記の仕様に問題があるのでしょうか。 それでは私のコンピュータで接続できている理由がわからなくなりますが ・・・もう、なにもわかりません どうか、ご教授宜しくお願い致します。

  • Java JNI C++リンク dll読み込まない

    お世話になっております 何度も質問して申し訳ないですが、わかる方いらっしゃれば ご回答よろしくお願いいたします。 現在JavaでJNIを使用し、呼び出したC++からハードウェアへ 接続するというプログラムを開発しております。 その際、C++をdll形式にして、そのdllをJavaで呼び出すような形なのですが 私が使用しているコンピュータ(Windows 7)では、ハードウェアへの接続ができています。 コマンドを送信し、レスポンスを取得し、Javaのプログラムで表示ができます。 しかし、別のコンピュータ(Windows XP)で、開発したプログラムを実行すると dllを読み込む時点で下記のエラーが出てしまいます。 java.lang.UnsatisfiedLinkError: no JNI001 in java.library.path JNI001がC++で作成したdllです。 JNI001.dllは、実行したプログラムと同じフォルダにありますので、おかしいなと思いまして C:\Windows へ入れてみても結果は変わりません。 私が使っていたコンピュータのeclipseをまるまるコピーして実行しても効果なし。 環境変数も私のコンピュータとほとんど変わりません。 XPのJavaをインストールし直しても変わりません。 フォルダ階層やフォルダ名などチェックしましたが、7とXPで変わった点もないように思います。 そこで、少し気になったのですが、 現在開発中のプログラムは Java → JNI001.dll → ○○.dll → ハードウェア ○○.dllはハードウェアを動かすためのdllです。 上記の仕様に問題があるのでしょうか。 それでは私のコンピュータで接続できている理由がわからなくなりますが ・・・もう、なにもわかりません どうか、ご教授宜しくお願い致します。

  • JavaからCプログラムを結合

    JavaからCプログラム・またCプログラムからJavaを実行する方法を模索しております。JNIというのが見つかったのですが、これは、C→Javaでも可能なのでしょうか? また、各異言語にて他言語の処理を実行した場合、戻り値やOUTパラメータなどの引継ぎは可能なのでしょうか? JNI以外の方法含め、ご存知の方いらっしゃいましたらご教授宜しくお願い致します。

  • Java hs_err_pid0000.log解析

    こんにちわ おわかりになる方、ご回答宜しくお願い致します。 現在、JavaでJNIを使用し、C++でdllを作成、C++のdllから他社製dll、他社製dllからハードウェア というようなプログラムを開発しております。 その際、Javaを実行し、ハードウェアとリンクして、終了すると hs_err_pid0000.logというログファイルが生成され、困っております。 このログファイルを解析しようと思い、解析方法を調べましたが 答えが見つからず、自力で翻訳してやってみましたがほとんど意味不明で、困っております 大変初歩的な質問だとは思いますが、 解析する際は、何を見たら良いんでしょうか。 また、何がどうなってたら異常な状態なんでしょうか。 お恥ずかしい限りですが、宜しくお願い致します

  • JAVAコンパイルと実行

    はじめまして。質問があります。 eclipseで開発したjavaのソースを実行するとき、メニューからメインクラスを指定し実行するだけでプログラム実行されますが、そのプログラムをコマンドプロンプトで実行する場合、できるプログラムとできないプログラム(例外:NoClassDefFoundError)があります。 コンパイルはeclipceのほうで勝手に.classファイルが生成されるので、そのclassファイルをjava [ファイル名]と打つだけだと思います。 実行できるプログラムとできないプログラムの違いは以下の通りです。 ・実行できるプログラム eclipseで新規でプロジェクトを作成。その直下にソースが存在し、クラスファイルも同じディレクトリに生成されます。 ・実行できないプログラム eclipseで新規でプロジェクトを作成。ソースフォルダ(src)を作成し、その下からパッケージ、クラスを作成しました。そうすると、エクスプローラでそのプロジェクトを見ると、binフォルダが生成されていました。その中にクラスファイルが生成されます。 違いはこのような感じです。実行できないプログラムをコマンドプロンプトで実行させるためにはどうしたらよいでしょうか?eclipseの使い方はだいぶわかってきたのですが、どのように動作しているか(java自体も)がわかりません。ご教授宜しくお願い致します。 OS:windows2000 開発環境:eclipse 3.0(J2SE 1.4.2_03)

    • ベストアンサー
    • Java
  • JavaからJNIを使わず既存DLLを呼び出す

    現在、GeneXusというジェネレータで出力されたJavaコードを、GeneXusが使用しているフレームワークに依存しない形で解体する作業を行っております。 作業を進めていくうちに、こちらのシステムの内部にwin32DLLを呼び出している箇所があることに気づきました。 DLLの内部の処理がかなり重要な処理なのですが、現状どうにも手を出せない状態です。 JNIを使用してソースからDLLをコンパイルしなおせばUnsatisfiedLinkErrorを回避できることが分かったのですが、DLLのソースがないのでJNIでヘッダ情報などを生成することができない状況です。 ちなみに、DLLはとあるpackageからコールされており、そのpackageからなら問題なくコールできるようです。しかし私が新たに作成したコードから呼び出すと、やはりUnsatisfiedLinkErrorで「nativeメソッドが見つかりません」と言われます。 どうにか、既存のDLLをJavaから呼び出す方法はないでしょうか? もしくは、DLLの内部の処理を解析する方法はないでしょうか。 完全に行き詰っておりますので、何か案があればよろしくお願いいたします。

  • java 競合

    こんばんわ. javaのプログラミングについて質問があります. それぞれ独立のプログラムAとプログラムB(~~.java ~.java)があるとします. プログラムAが実行している間にプログラムBが実行されたら任意のエラーメッセージを送出するようなプログラムが書きたいのですが,どうしてもプログラムAの実行が終了するまでプログラムBを実行できません. 実行方法はソケット通信を用いて行っているものです. このようなプログラムはどうすればかけるのでしょうか. ご存知の方ご教授お願いいたします.

    • ベストアンサー
    • Java
  • Javaでのメモリの使い方についてです。

    Javaでのメモリの使い方についてです。 以下のサイトにクラスを継承したときの話が記載されていますが、 これは、メモリのどの領域についてでしょうか。 私の認識では、ヒープ領域ではなく、静的領域の話という認識です。 http://www.atmarkit.co.jp/fjava/rensai2/javaent04/javaent04.html#ap02

  • javaのJavaのガベージ・コレクション

    javaのJavaのガベージ・コレクションに付いて質問です。 動作環境は、Windows7で、javaですからVMで動作していると思います。 開発環境はEclipseのPleiades44です。 もともと、VC++6.0で出来上がったプログラムをjavaで別途、作成しています。 私のはAppは約1.6秒で測定が完結するもので、この1.6秒のサイクルを繰返します。 具体的な処理内容は、48000サンプリングの4chのusbデーターを取り込み、データー 処理し、画面に略リアルタイム表示するものです。 問題点 1)他の画像表示のプログラムと同時に走らせますと、双方のプログラムの動作   が、一時停止し、ギコチナイ動きとなります。 2)私のはAppを単体で(Windoes7のVM)で走らせていますが、データー   処理の結果に微妙な差が現れることがあります。 注)VC++の場合は、上記の様な不具合は全くありません。 Q1)javaのコードを一括メモリーにロードし、実行する方法はありますか?  (つまり、ガベージ・コレクションの機能は使用しないようにする) 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • java string 配列の使用メモリ

    String[][][] arg = = new String[x][x][x]; でxが638の時にjava.lang.OutOfMemoryErrorになってしまいます。 VM起動時のヒープ最大値は1GBまで試しましたがダメでした。 このときargオブジェクトはどれだけのメモリを必要とするのでしょうか?

    • ベストアンサー
    • Java