Java Usage TrackerはJava Runtime Environments (JRE)のシステムでの使用状況をトラッキングします。Java Usage Trackerの出力は、カンマで区切られたプレーン・テキストのレコードで、JREバージョン、実行中のアプリケーションおよびその他の詳細が含まれます。このレコードは、ファイルに追加されるか、User Datagram Protocol (UDP)パケットで、ネットワーク経由で送信されます。

Java Usage Trackerのシステム要件

Java Usage Trackerは、Oracle Java SEサブスクリプションおよびその他のレガシー製品(Oracle Java SE Advanced、Oracle Java SE Suiteなど)の一部として使用できます。

Java Usage Trackerは、JDKのすべての現行バージョンでサポートされています。

ノート:

JDK 7、JDK 6u25以降、JDK 5u38以降およびJDK 1.4.2_35以降には、Java Usage Trackerが含まれていました。これらのバージョンのJDKはサポートされなくなりました。

Java Usage Trackerの出力

次は、Java Usage Trackerからの出力の例で、Javaアプリケーションの呼出し1件のレコードです。わかりやすくするために改行を追加しましたが、各レコードは次のように1つのテキスト行として表示されます。

"javaws application",
"Mon Sep 26 13:10:14 EDT 2022",
"MY-COMPUTER/192.0.2.0",
"https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TreeDemoProject/:
  sourceURL=https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TreeDemoProject/TreeDemo.jnlp
  app_model=<Base64 encoded data>",
"C:\Java\jre1.8.0_351",
"1.8.0_351",
"25.351-b10",
"Oracle Corporation",
"Oracle Corporation",
"Windows 10",
"amd64",
"10.0",
"-Xbootclasspath/a:C:\Java\jre1.8.0_351\lib\deploy.jar;C:\Java\jre1.8.0_351\lib\javaws.jar;
  C:\Java\jre1.8.0_351\lib\plugin.jar -Xverify:remote -Djava.security.manager
  -Djava.security.policy=file:C:\Java\jre1.8.0_351\lib\security\javaws.policy
  -DtrustProxy=true -Djnlpx.home=C:\Java\jre1.8.0_351\bin
  -Djnlpx.origFilenameArg=TreeDemo.jnlp -Djnlpx.remove=false -Djnlpx.splashport=60867
  -Djnlpx.jvm=C:\Java\jre1.8.0_351\bin\javaw.exe ",
"C:\Java\jre1.8.0_351\lib\deploy.jar",
"user.home=C:\Users\MYUSER my.custom.property=null "

次の表では、このカンマで区切られた行の各々の値について説明します。

説明

javaws application

起動のタイプ。次のいずれかの値です。

  • VM start : JVMスタートアップ(JavaアプリケーションまたはJNI呼出し)

  • plugin2: アプレット

  • javaws applicationまたはjavaws applet: Java Web Start

アプリケーションによるアプリの実行またはブロックを許可するデプロイメント・ルール・セット(DRS)がある場合は、起動の種類を示す値の後に、次のいずれかの値を指定します。

  • permitted

  • denied

  • denied [required version ruleVersion not available]: ruleVersionは、デプロイメント・ルール・セット仕様の必要な最小バージョン

DRSの実行ルールまたはブロック・ルールがない場合は、起動の種類を示す値の後に、次のいずれかの値を指定します。

  • denied [by user]

  • denied [by security settings]

  • 値なし(空の文字列): アプリケーションの実行が許可されます

Mon Sep 26 13:10:14 EDT 2022

日付と時刻

MY-COMPUTER/192.0.2.0

<hostname>/<literalIPaddress>という形式のホスト名とIPアドレス

https://docs.oracle.com/javase/tutorialJWS/
  samples/uiswing/TreeDemoProject/:
  sourceURL=https://docs.oracle.com/javase/
    tutorialJWS/samples/uiswing/
    TreeDemoProject/TreeDemo.jnlp
  app_model=<Base64 encoded data>

Javaコマンド(mainクラスまたはjarファイルの名前)と、存在する場合は引数のリスト(スペース区切りのリスト)

Java Web Startアプリケーションは、次の形式を持ちます。

<Document base>:
  <main class> <arguments>
  app_model=<serialized classes for use by AMC>
  app_customer=<contents of the <customer> block in a rule>

アプレット呼出しは、次の形式を持ちます。

<Document base>:
  <parameters>
  app_model=<serialized classes for use by AMC>
  app_customer=<contents of the <customer> block>  

app_modelapp_customerの値はBase64でエンコーディングされます。

app_modelの値には、場所、コードベース、メイン・クラスなど、アプリケーションの基本情報が含まれます。アプリケーションの実行の許可または拒否にかかわらず、値は同じです。

パラメータapp_customerが表示されるのは、<customer>ブロックを含む特定のDRSルールによってアプリケーションが管理される場合のみです。

C:\Java\jre1.8.0_351

JREを含んでいるディレクトリ(java.homeシステム・プロパティ値)

1.8.0_351

Javaバージョン(java.versionシステム・プロパティ値)

25.351-b10

JVMバージョン(java.vm.versionシステム・プロパティ値)

Oracle Corporation

Javaベンダー(java.vendorシステム・プロパティ値)

Oracle Corporation

JVMベンダー(java.vm.vendorシステム・プロパティ値)

Windows 10

オペレーティング・システム名(os.nameシステム・プロパティ値)

amd64

オペレーティング・システム・アーキテクチャ(os.archシステム・プロパティ値)

10.0

オペレーティング・システム・バージョン(os.versionシステム・プロパティ値)

-Xbootclasspath/a:C:\Java\jre1.8.0_351\lib\deploy.jar;
  C:\Java\jre1.8.0_351\lib\javaws.jar;
  C:\Java\jre1.8.0_351\lib\plugin.jar -Xverify:remote -Djava.security.manager
    -Djava.security.policy=file:C:\Java\jre1.8.0_351\lib\security\javaws.policy
    -DtrustProxy=true -Djnlpx.home=C:\Java\jre1.8.0_351\bin
    -Djnlpx.origFilenameArg=TreeDemo.jnlp -Djnlpx.remove=false
    -Djnlpx.splashport=60867
    -Djnlpx.jvm=C:\Java\jre1.8.0_351\bin\javaw.exe

JVM引数(スペース区切りリスト)。JVM引数がない場合は空になります。この情報が利用できない場合はn/aです(たとえば、Java SE 1.4.2では、この情報は利用できません)。

C:\Java\jre1.8.0_351\lib\deploy.jar

クラス・パス(java.class.pathシステム・プロパティ値)

user.home=C:\Users\CURRENT-USER my.custom.property=null

Java Usage Trackerプロパティ・ファイルで指定されているすべての追加システム・プロパティのName=valueペア。複数のペアはスペースで区切られます。追加のプロパティ名が指定されない場合は空です(デフォルト)。

Java Usage Tracker出力内のスペースを含む項目

スペース区切りリストのフィールドでは、スペースを含む項目を引用する場合に異なる引用符が使用されます(デフォルトでは一重引用符「'」)。既存の引用符は二回出力されます。

たとえば、次のコマンドを考えます:

/jdk1.8.0_20/bin/java
  -Dfoo1="a b"
  -Dfoo=\"
  -jar c:\\Program\ Files\\Java/jdk1.6.0_25/demo/jfc/Java2D/Java2Demo.jar

Java Usage Trackerは、これらのシステム・プロパティを次のように出力します(わかりやすくするために改行を追加しました)。

"'-Dfoo1=a b' -Dfoo="" ",
"-jar c:\Program Files\Java/jdk1.6.0_25/demo/jfc/Java2D/Java2Demo.jar",
""

8u20より前のバージョンのJREでは、Java Usage Trackerは、フィールドを引用符で囲みません。

Java Usage Trackerの有効化と構成

Java Usage Trackerは、デフォルトで無効です。有効化して構成するには、usagetracker.propertiesという名前のプロパティ・ファイルを作成します。「サンプルのJava Usage Trackerプロパティ・ファイル」を参照してください。

JRE 8u152以降の場合、Java Usage Trackerを使用してシステム上のすべてのJREを追跡するには、usagetracker.propertiesファイルをファイル・システム内の中央の場所に配置します。次に示すように場所はオペレーティング・システムによって異なります。

  • Windows: %ProgramFiles%\Java\conf\ (Windows x64)または%ProgramFiles(x86)%\java\conf\ (Windows x86)

  • LinuxおよびSolaris: /etc/oracle/java/

  • macOS: /Library/Application Support/Oracle/Java/

Java Usage Trackerを使用して特定のJREを追跡する場合は、usagetracker.propertiesファイルをファイル・システム内の中央の場所に置かないでください。usagetracker.propertiesファイルはディレクトリ<JRE directory>/conf/management/ (9よりも前のJREリリースでは<JRE directory>/lib/management/)に配置します。Java Usage TrackerをJDK用とJRE用のどちらで構成するかにより、パス名が異なる点に注意してください。

異なるプロパティ・ファイルを使用する場合、コマンド行でそれをシステム・プロパティ-Dcom.oracle.usagetracker.config.fileに指定して、柔軟性をさらに高めることができます。次の例では、Java Usage Trackerはプロパティ・ファイル/path/usagetracker.propertiesを使用します。

java -Dcom.oracle.usagetracker.config.file=/path/usagetracker.properties MyApplication

JVMは、次の場所で順番にusagetracker.propertiesファイルを検索します。見つかった最初のファイルを使用し、Java Usage Trackerを有効化して構成します。

  1. システム・プロパティ-Dcom.oracle.usagetracker.config.fileによって指定されたパス

  2. ファイル・システム内の中央の場所(JRE 8u152以降)

  3. <JRE directory>/conf/management/ (9よりも前のJREリリースでは<JRE directory>/lib/management/)

ノート:

Java Usage Trackerを有効化するには、作成するusagetracker.propertiesファイルが、少なくとも次のいずれかのプロパティの有効な値を含む必要があります。
  • com.oracle.usagetracker.logToFile

  • com.oracle.usagetracker.logToUDP

Java Usage Trackerのプロパティ

この項では、Java Usage Trackerプロパティ・ファイルで指定できるプロパティを説明します。

これらのプロパティは、Java Usage Trackerプロパティ・ファイルでのみ設定されます。コマンド行で設定されません。これは、Java Usage TrackerがJREユーザーまたは既存のアプリケーションに影響を与えたり相互作用したりしないためです。

ノート:

バックスラッシュ(\)が、プロパティ・ファイルのエスケープ文字です。従って、ディレクトリまたはドライブ文字を含むファイル・パスを指定する場合、ディレクトリの区切り記号として、スラッシュ(/)またはエスケープしたバックスラッシュ(\\)を使用します。

プロパティ 説明

com.oracle.usagetracker.additionalProperties

このプロパティは、追加のJavaプロパティと、その値を記録するために使用します。

このプロパティの値は、プロパティのカンマ区切りリストです。たとえば (改行は無視してください):

com.oracle.usagetracker.additionalProperties =
user.home,my.custom.property

com.oracle.usagetracker.innerQuote

JVM引数フィールドと追加のプロパティ・フィールドにスペースが含まれる項目を引用するために使用される文字または文字列。デフォルト値は、一重引用符(')です。

このプロパティは、JRE 8u20以降で使用できます。

com.oracle.usagetracker.logFileMaxSize

ログ・ファイル・サイズの上限(単位はバイト)。ロギング試行時にファイル・サイズが所定の値以上の場合、その試行はキャンセルされます。

このプロパティが設定されない場合、ログ・ファイルに上限はありません。

com.oracle.usagetracker.logToFile

このプロパティが指定された場合、Usage Trackerがレコードを書き込むファイルの完全修飾パス名。

パス名では、${user.home}を指定できます。プロパティは、ユーザーのホーム・ディレクトリまで展開されます。たとえば (改行は無視してください):

com.oracle.usagetracker.logToFile = ${user.home}/.java_usagetracker

com.oracle.usagetracker.logToUDP

このプロパティが指定された場合、Java Usage TrackerはUDPパケットで指定されたリモート・ホストにログインします。たとえば (改行は無視してください):

com.oracle.usagetracker.logToUDP =
loggingmachine.domainname:32139

IPアドレスを指定すると高速になることがあります。ただし、この解決方法によりJVMまたはアプリケーションの起動が遅延することはありません。

UDPパケットを受信できるサンプル・アプリケーションの詳細は、「Java Usage Trackerのサンプル: UDPパケットの受信側」を参照してください。

com.oracle.usagetracker.maxFieldSize

すべての単一フィールドの制限(バイト単位)。デフォルトは制限なしです。com.oracle.usagetracker.sendTruncatedRecordsプロパティがtrueの場合、Java Usage Trackerによって、フィールドがこの制限まで切り捨てられますが、レコード形式は維持されます。

このプロパティは、JRE 8u152以降で使用できます。

com.oracle.usagetracker.maxSize

レコード全体の制限(バイト単位)。デフォルトは制限なしです。com.oracle.usagetracker.sendTruncatedRecordsプロパティがtrueの場合、Java Usage Trackerによって、レコードがこの制限まで切り捨てられます。

このプロパティは、JRE 8u152以降で使用できます。

com.oracle.usagetracker.quote

フィールドを引用するために使用される文字または文字列。デフォルト値は、二重引用符(")です。

このプロパティは、JRE 8u20以降で使用できます。

com.oracle.usagetracker.sendTruncatedRecords

com.oracle.usagetracker.maxSizeプロパティとcom.oracle.usagetracker.maxFieldSizeプロパティそれぞれで指定されるサイズを超えたときに、レコードと各フィールドを切り捨てます。デフォルト値はtrueです。

このプロパティは、JRE 8u152以降で使用できます。

com.oracle.usagetracker.separator

ログ・ファイルのエントリを区切る文字または文字列。デフォルトはカンマ(,)です。

com.oracle.usagetracker.verbose

このプロパティをtrueに設定すると、エラー情報を標準エラー・ストリームに報告することができます。これは診断の目的でのみ推奨されます。

サンプルのJava Usage Trackerプロパティ・ファイル

Java Usage Trackerプロパティ・ファイルを作成するには、次の例をテンプレートに使用できます。シャープ記号(#)から始まる行はコメントです。

# UsageTracker template properties file.
# Copy to <JRE directory>/conf/management/usagetracker.properties
# (or <JRE directory>/lib/management/usagetracker.properties for
# JRE releases prior to 9) and edit, uncommenting required settings, to enable.
 
# Settings for logging to a file:
# Use forward slashes (/) because backslash is an escape character in a
# properties file.
# com.oracle.usagetracker.logToFile = ${user.home}/.java_usagetracker

# Settings for logging to a UDP socket:
# com.oracle.usagetracker.logToUDP = hostname.domain:32139
  
# (Optional) Specify a file size limit in bytes:
# com.oracle.usagetracker.logFileMaxSize = 10000000
 
# If the record should include additional Java properties,
# this can be a comma-separated list:
# com.oracle.usagetracker.additionalProperties = 
 
# Additional options:
# com.oracle.usagetracker.verbose = true
com.oracle.usagetracker.separator = ,
com.oracle.usagetracker.quote = "
com.oracle.usagetracker.innerquote = '

Java Usage Trackerのサンプル: UDPパケットの受信側

次のサンプルUsageServerTracker.javaは、Java Usage Trackerデータをリスニングする単純なアプリケーションです。

/*
 * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * -Redistribution of source code must retain the above copyright notice, this
 *  list of conditions and the following disclaimer.
 *
 * -Redistribution in binary form must reproduce the above copyright notice,
 *  this list of conditions and the following disclaimer in the documentation
 *  and/or other materials provided with the distribution.
 *
 * Neither the name of Oracle or the names of contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * You acknowledge that this software is not designed, licensed or intended
 * for use in the design, construction, operation or maintenance of any
 * nuclear facility.
 */
 
import java.net.InetAddress;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.io.IOException;
import java.net.SocketException;
 
import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
 
/**
  * A daemon that listens for and logs UsageTracker information.
  */
public class UsageTrackerServer {
 
    static boolean verbose = false;
    boolean initialized = false;
    String logFileName = null;
    File logFile;
    OutputStreamWriter writer;
    int port = 32139;
    InetAddress address = null;
    DatagramSocket socket;
    private static final int BUFFERSIZE = 65536;
    long received = 0;
    boolean running = true;
 
    /**
      * Main entry point for starting this daemon.
      */
    public static void main(String [] args) {
        try {
            UsageTrackerServer uts = new UsageTrackerServer(args);
            uts.run();
        } catch (Exception e) {
            System.out.println("UsageTrackerServer: " + e.getMessage());
            if (verbose) {
                e.printStackTrace();
            }
            System.exit(1);
        }
    }
 
    public static void usage() {
        System.out.println("UsageTrackerServer [-v] [-o filename] [host]:port\n" +
            "e.g. UsageTrackerServer -o usagetracker.out :32139\n");
    }
 
    /**
      * Initialize a UsageTrackerServer given some arguments.
      */
    UsageTrackerServer(String [] args) throws Exception {
 
        boolean usage = false;
        for (int i=0; i<args.length; i++) {
 
            if (args[i].equals("-?") || args[i].equals("--h")) {
                usage = true;
                break;
            } else if (args[i].equals("-v")) {
               verbose = true;
            } else if (args[i].equals("-o")) {
                logFileName = args[i+1];
                i++;
            } else if (args[i].contains(":")) {
                // parse [address]:port
                int colon = args[i].indexOf(':');
                if (colon > 0) {
                    try {
                        address = InetAddress.getByName(
                            args[i].substring(0, colon));
                    } catch (Exception ae) {
                        System.out.println("UsageTrackerServer: " +
                            "problem setting listen address: " + ae);
                        usage = true;
                    }
                }
                try {
                    port = Integer.parseInt(args[i].substring(colon+1));
                } catch (NumberFormatException nfe) {
                    System.out.println("UsageTrackerServer: cannot set port: " +
                        args[i].substring(colon+1));
                    usage = true;
                }
            } else {
                usage = true;
            }
        }
        // Argument failure or request for usage gets the usage message only:
        if (usage) {
            usage();
            return;
        }
        // Otherwise, continue to proper initialization:
        socket = null;
        try {
        if (address != null) {
            socket = new DatagramSocket(port, address);
        } else {
            socket = new DatagramSocket(port);
        }
        } catch (SocketException se) {
            throw new Exception("problem creating socket: " + se);
        }
        if (logFileName != null) {
            try {
                File logFile = new File(logFileName);
                if (verbose) {
                    System.out.println("Using logfile: " + logFileName);
                    if (logFile.exists()) {
                        System.out.println("File exists, will append.");
                    }
                }
                FileOutputStream fos = new FileOutputStream(logFile, true);
                writer = new OutputStreamWriter(fos, "UTF-8");
            } catch (IOException ioe) {
                throw new Exception("problem using file " + logFileName + ": " +
                    ioe);
            }
        }
        initialized = true;
    }
 
   public void run() throws Exception {
        if (!initialized) {
            return;
        }
        Runnable r = null;
        if (writer == null) {
            r = new UsageTrackerServerRunnable(socket);
        } else {
            r = new UsageTrackerServerRunnable(socket, writer);
        }
        Thread t = new Thread(r, "UsageTrackerServerRunnable");
        t.start();
        t.join();
    }
 
    /**
      * Runnable that listens and logs.
      */
    private class UsageTrackerServerRunnable implements Runnable {
        DatagramSocket listenSocket;
        OutputStreamWriter writer = null;
 
        UsageTrackerServerRunnable(DatagramSocket socket) {
            listenSocket = socket;
        }
        UsageTrackerServerRunnable(DatagramSocket socket,
            OutputStreamWriter writer) {
            this(socket);
            this.writer = writer;
        }
 
        public void run() {
            byte [] buf = new byte[BUFFERSIZE];
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
 
            // Ready to receive data
            if (verbose) {
                String addr = listenSocket.getLocalAddress().getHostAddress();
                if (addr.equals("0.0.0.0")) {
                    addr = "localhost";
                }
                System.out.println("UsageTrackerServer: ready to receive on " +
                    addr + ":" + listenSocket.getLocalPort());
            }
            while (running) {
                try {
                    listenSocket.receive(packet);
                    String dataReceived = new String(packet.getData(), 0,
                        packet.getLength());
 
                    // The format of a UsageTracker record contains a newline at
                    // the end; if that is missing, we have a truncated/corrupt
                    // packet.
                    if (!dataReceived.endsWith("\n")) {
                        System.out.println("Incomplete message received: " +
                          "size = " + packet.getLength() + ", data =  " +
                          dataReceived);
                        dataReceived = dataReceived + "\n";
                    }
                    received++;
                    if (verbose) {
                        System.out.println("Received message size: " +
                            dataReceived.length());
                    }
                    if (writer != null) {
                        writer.write(dataReceived, 0, dataReceived.length());
                        writer.flush();
                    } else {
                        System.out.print(dataReceived);
                    }
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        }
    }
}

次に示すのはこのサンプルの実行例です。

java UsageTrackerServer -v -o usagetracker.out :32139
  • -vオプションはverboseです。このオプションを指定すると、サンプルは追加情報を表示します。

  • -oオプションは、ログ・ファイルの名前を指定できるようにします;このオプションを指定しない場合、サンプルは標準出力にメッセージを出力します。

  • この例では、UDP受信者は、ポート32139上のローカルホスト・アドレスでリスニングします。JRE (Java Usage Trackerが有効化され構成されている)がデータを送信すると、受信側はデータをファイルusagetracker.outに送信します。ポート番号は任意ですが、使用することができ、JREで構成されているポートと一致する必要があります。複数のインタフェースが存在する場合、形式hostname:portまたはipaddress:portを使用してポートを指定する必要がある場合があります。

Java Usage Trackerのエラーと例外

レコードのロギング時にJava Usage Trackerがエラーまたは例外に遭遇しても、現在動作しているアプリケーションを中断しません。

プロパティ・ファイルでプロパティoracle.usagetracker.verboseが指定されていないかぎり、Java Usage Trackerはエラーを報告しません。

Java Usage Trackerログ・ファイルで使用されるディスク領域の管理

Java Usage Trackerログ・ファイルのサイズは小さいものですが、ログ・ファイルを定期的に切捨て、圧縮、アーカイブ、または削除することをお薦めします。Java Usage Trackerがログ・ファイルにレコードを逐次追加する場合、利用可能なディスク・スペース領域について確認したり、ログ・ファイルの切捨て、削除、圧縮などの管理タスクを実行して影響を最小限にしようとしたりすることはありません。

さらに、プロパティ・ファイルのoracle.usagetracker.logFileMaxSizeプロパティで、ログ・ファイルの最大サイズをバイト単位で指定できます。

Java Usage Trackerの制限事項

Java Usage Trackerは、JVMが起動する前にJavaランチャによって処理されるJavaコマンド行オプションを記録できません。たとえば、Java Usage Trackerは、Java HotSpotクライアントとサーバーVMをそれぞれ選択するコマンド行オプション-client-serverを記録しません。また、アプリケーションが即座に終了する場合、プロセスが終了するのを停止しないため、Java Usage Trackerが記録しない場合があります。

Java Usage Trackerのよくある質問

いくいつかのよくある質問に対する回答は、次の場所にあります。

Java Usage TrackerはJDKの範囲内で非公開のJREに影響を及ぼしますか。それとも影響を及ぼすのはスタンドアロンのJREだけですか。

コンピュータにJDKがインストールされている場合、1つのJREがjreサブディレクトリにあります。これが質問で指している非公開のJREです。Java Usage Trackerは、非公開のJREとスタンドアロンのJREの両方の使用状況を記録しますが、それぞれ独自のconf/management/usagetracker.propertiesファイルを介して別々に構成されることに注意してください。

Java Usage Trackerは、JDKツールの使用状況を記録できますか。

Java Usage Trackerが有効の場合、jmapやjstackなど、JDKに付属するツールの使用状況が記録されます。

Java Usage Trackerは、ネイティブのJavaアプリケーションによって作成されたJVMの使用状況を記録しますか。

はい。ネイティブのアプリケーションがJava Native Interface (JNI)を使用してJVMを作成する場合、Java Usage Trackerはこの呼出しを空白のJavaコマンドとともに記録します。

java -jar file.jarに類似した呼出しは、Java Usage Trackerによって追跡されますか。

はい。

Oracleは、Java Usage Trackerによって記録されるデータを少しでも捕捉しますか。

いいえ。JREインストールの管理者として、Java Usage Trackerから取得された使用状況データは、選択したファイルに格納されるか、指定したUDPホストおよびポートに送信されます。このデータを独自ネットワークから離れさせるファシリティはありません。(理論的には、ファイアウォールで可能な場合、UDPホストがリスニングするポートはリモートとして構成できますが、それは期待または推奨される使用法ではありません。)

ネイティブ・アプリケーション、アプレット、および拒否されたアプリケーションに関して、ログ・レコードはどのように表示されますか。

次に示すのは、ネイティブ・アプリケーションのログ・レコードの例です(わかりやすくするために改行を追加しました)。

"VM start",
"Mon Sep 26 13:08:33 EDT 2022",
"MY-COMPUTER/192.0.2.0",
"Main",
"C:\Java\jre1.8.0_351",
"1.8.0_351",
"25.351-b10",
"Oracle Corporation",
"Oracle Corporation",
"Windows 10",
"amd64",
"10.0",
"-Dmy.custom.property=myvalue ",
".",
"user.home=C:\Users\RGALLARD my.custom.property=myvalue "

次に示すのは、アプレットのログ・レコードの例です。

"plugin2",
"Mon Sep 26 14:00:48 EDT 2022",
"MY-COMPUTER/192.0.2.0",
"https://docs.oracle.com/javase/tutorial/deployment/applet/deployingApplet.html:
  jnlp_href=examples/dist/applet_ComponentArch_DynamicTreeDemo/dynamictree_applet.jnlp
  launchjnlp= codebase_lookup=false code=appletComponentArch.DynamicTreeApplet.class
  codebase=https://docs.oracle.com/javase/tutorial/deployment/applet/ width=375
  archive=examples/dist/applet_ComponentArch_DynamicTreeDemo/DynamicTreeDemo.jar height=375
  app_model=<Base 64 encoded data>",
"C:\Java\jre1.8.0_341",
"1.8.0_341",
"25.341-b10",
"Oracle Corporation",
"Oracle Corporation",
"Windows 10",
"x86",
"10.0",
"-Xbootclasspath/a:C:\Java\jre1.8.0_341\lib\deploy.jar;C:\Java\jre1.8.0_341\lib\javaws.jar;
  C:\Java\jre1.8.0_341\lib\plugin.jar -Djava.security.manager -D__jvm_launched=16873846471
  -D__applet_launched=16873824704 ",
"C:\Java\jre1.8.0_341\lib\deploy.jar",
"user.home=C:\Users\CURRENT-USER my.custom.property=null "

次に示すのは、セキュリティ設定によって拒否されたJava Web Startアプリケーションのログ・レコードの例です。

"javaws application denied [by user]",
"Mon Sep 26 13:42:49 EDT 2022",
"MY-COMPUTER/192.0.2.0",
"https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TreeDemoProject/:
  sourceURL=https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TreeDemoProject/TreeDemo.jnlp
  app_model=<Base 64 encoded data>",
"C:\Java\jre1.8.0_351","1.8.0_351",
"25.351-b10",
"Oracle Corporation",
"Oracle Corporation",
"Windows 10",
"amd64",
"10.0",
"-Xbootclasspath/a:C:\Java\jre1.8.0_351\lib\deploy.jar;C:\Java\jre1.8.0_351\lib\javaws.jar;
  C:\Java\jre1.8.0_351\lib\plugin.jar -Xverify:remote -Djava.security.manager
    -Djava.security.policy=file:C:\Java\jre1.8.0_351\lib\security\javaws.policy
    -DtrustProxy=true -Djnlpx.home=C:\Java\jre1.8.0_351\bin
    -Djnlpx.origFilenameArg=TreeDemo.jnlp -Djnlpx.remove=false -Djnlpx.splashport=61230
    -Djnlpx.jvm=C:\Java\jre1.8.0_351\bin\javaw.exe ",
"C:\Java\jre1.8.0_351\lib\deploy.jar",
"user.home=C:\Users\CURRENT-USER my.custom.property=null "

以前の形式のレコードに対する、JRE 8u20以降の引用動作を無効にする方法。

Java Usage Trackerプロパティ・ファイルで、次の2行を使用して空白の引用符を設定します。

com.oracle.usagetracker.quote=
com.oracle.usagetracker.innerQuote=

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。