ラベル JDK の投稿を表示しています。 すべての投稿を表示
ラベル JDK の投稿を表示しています。 すべての投稿を表示

2014年9月6日土曜日

[Java] JDKコマンドを使う時は対象のVMとバージョンを合わせる

でないと VMVersionMismatchException という非常に明確なExceptionが飛ぶ。

$ jstack -F 5268
Attaching to process ID 5268, please wait...
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at sun.tools.jstack.JStack.runJStackTool(JStack.java:136)
        at sun.tools.jstack.JStack.main(JStack.java:102)
Caused by: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 23.5-b02. Target VM is 23.1-b03
        at sun.jvm.hotspot.runtime.VM.checkVMVersion(VM.java:234)
        at sun.jvm.hotspot.runtime.VM.(VM.java:297)
        at sun.jvm.hotspot.runtime.VM.initialize(VM.java:367)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:598)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:493)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:331)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:163)
        at sun.jvm.hotspot.tools.JStack.main(JStack.java:86)
        ... 6 more


表示されるバージョンはJVM(上の例だとHotSpot)のバージョン。
JavaSEとかに比べるとあまり馴染みが無い。
Supported versions are 23.5-b02. Target VM is 23.1-b03

【参考】

7杯目のおかわりコーヒーはイルカの夢を見るか? - Programming Studio -

2014年9月4日木曜日

[Java] jpsコマンドでTomcatのプロセスが表示されない


jps ツールは、ターゲットシステム上で計測された HotSpot Java 仮想マシン (JVM) を一覧表示します。このツールで表示できるレポート情報は、アクセス権を持った JVM に関するものに限定されます。(jps - Java 仮想マシンプロセスステータスツール -)
というから、
起動中のTomcatのPIDを知りたくてjpsコマンドを実行したら。
$ jps
8960 Jps
jpsコマンドのプロセスしか結果に表示されない。 ググったところ、jpsコマンドでTomcatのプロセスが表示されない場合の対処方法がすぐ見つかった。

jpsコマンドはjavaアプリケーションが出力するtempファイルからプロセス情報を拾っているとのこと。

Windowsだと下記ディレクトリにPIDがファイル名のファイルが生成されていた。

C:\Users\[ログオンユーザ名]\AppData\Local\Temp\hsperfdata_[ログオンユーザ名]


で、Tomcatはと言うと、システムプロパティ:java.io.tmpdirで指定したディレクトリにPIDファイルを出力する。デフォルトだと $CATALINA_HOME\temp になる気がする…、未確認。

JVMの起動オプションで出力先をjpsの確認先にしてやり、Tomcatを再起動すると…
-Djava.io.tmpdir=C:\Users\[ログオンユーザ名]\AppData\Local\Temp\hsperfdata_[ログオンユーザ名]

jpsコマンドでTomcatのPIDが表示されることを確認。

$ jps
13212 Bootstrap
8960 Jps

Tomcat以外にも独自のファイルを作成するjavaアプリケーションはありそう。

【環境】

JDK 6.0.45
Tomcat 6.0系(マイナーバージョン未確認)