C 環境変数とシステム・プロパティ

この付録では、Java HotSpot VMの問題をトラブルシューティングする際に役立つ可能性のある環境変数とシステム・プロパティについて説明します。

「バグ・レポートの提出」「環境変数」に、環境変数の収集に関する情報が含まれています。

この付録の内容は次のとおりです。

JAVA_TOOL_OPTIONS環境変数

多くの環境では、必要なコマンド行オプションを使用してアプリケーションを起動するコマンド行には容易にアクセスできません。

これは、埋込みVMを使用するアプリケーション(VMの起動にJava Native Interface (JNI)呼出しAPIを使用することを意味する)や、起動がスクリプト内で深く入れ子になっている場合に頻繁に起こります。このような環境では、JAVA_TOOL_OPTIONS環境変数がコマンド行の拡張に役立つ可能性があります。

ノート:

セキュリティ上の理由により、このオプションが無効になる場合があります。たとえば、Oracle Solarisオペレーティング・システムでは、有効なユーザーまたはグループのIDが実際のIDと異なる場合に、このオプションが無効になります。

この環境変数では、ツールの初期化(具体的には-agentlibまたは-javaagentオプションを使用したネイティブまたはJavaプログラミング言語エージェントの起動)を指定できます。

この変数は、診断の目的でコマンド行をほかのオプションを使って拡張するためにも使用できます。たとえば、-XX:OnErrorオプションを使用すると、致命的エラーが発生した場合に実行されるスクリプトまたはコマンドを指定できます。

この環境変数はJNI_CreateJavaVM関数の呼出し時に検査されるため、通常はランチャによって処理されるオプションを使用したコマンド行の拡張(-clientまたは-serverオプションを使ったVM選択など)には使用できません。

java.security.debugシステム・プロパティ

このシステム・プロパティは、Java Runtime Environment (JRE)のセキュリティ・システムが、実行中にトレース・メッセージを出力するかどうかを制御します。

このオプションは、SecurityExceptionがスローされたときにセキュリティ・マネージャに関連する問題を診断する場合に役立つ可能性があります。

java.security.debugプロパティには、次の値を指定できます。

  • access

    checkPermissionの結果をすべて出力します。

    次の追加のオプションをaccessオプションとともに指定できます。

    • stack

      スタック・トレースを含めます。

    • domain

      コンテキスト内のすべてのドメインをダンプします。

    • failure

      例外をスローする前に、アクセス権を保持しなかったスタックおよびドメインをダンプします。

  • jar

    JARの検証情報を出力します。

  • policy

    SecureClassLoaderによって割り当てられるアクセス権を出力します。

  • scl

    たとえば、checkPermissionのすべての結果を出力し、コンテキスト内のすべてのドメインをトレースするには、java.security.debugプロパティをaccess,stackに設定します。アクセス障害をトレースするには、このプロパティをaccess,failureに設定します。

    次の例は、checkPermission障害の出力を示しています。

    $ java -Djava.security.debug="access,failure" MyApp
    access denied (java.net.SocketPermission server.foobar.com resolve
    )
    java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1158)
        at java.security.AccessControlContext.checkPermission
                              (AccessControlContext.java:253)
        at java.security.AccessController.checkPermission(AccessController.java:427)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkConnect(SecurityManager.java:1031)
        at java.net.InetAddress.getAllByName0(InetAddress.java:1117)
        at java.net.InetAddress.getAllByName0(InetAddress.java:1098)
        at java.net.InetAddress.getAllByName(InetAddress.java:1061)
        at java.net.InetAddress.getByName(InetAddress.java:958)
        at java.net.InetSocketAddress.<init>(InetSocketAddress.java:124)
        at java.net.Socket.<init>(Socket.java:178)
        at MyApp.main(MyApp.java:7)
    

    java.security.debugシステム・プロパティの詳細は、Java Platform, Standard Editionセキュリティ開発者ガイドセキュリティのトラブルシューティングに関する項を参照してください。