Java デバッグツール Jconsole 使い JVM の統計情報を見る Azure Cosmos DB No.17

自己投資としてチャレンジしている内容を Blog で公開しています。今回は Jcosole を使って JVM のメモリ消費量、スレッド数、ロードされたクラスの数、CPU 使用率を見てみます。

————————————
▼1. JVM とは
————————————
 Java は Windows、Mac、Linux など OS や PC に依存せず実行することができます。一方で Java を実行するためには、コンパイラやインタプリタによりコードをマシン語に変換する必要があります。この Java の実行には JVM (Java Virtual Machine) が必要です。JVM を利用することでプラットフォームに依存せず Java のコードを実行することができます。

————————————
▼2. 事前準備
————————————
2-1. 以下のサイトから無料で利用できる Azure Cosmos DB を用意します。Azure を利用するために必要な Subscription を用意する必要もありません。
https://azure.microsoft.com/ja-jp/try/cosmosdb/

2-2. Maven auto-import を IntelliJ IDEA で有効にします(ubuntu で IntelliJ IDEA をインストールしています)https://www.kumoman.net/site/2020/07/12/intellij-enabling-auto-import-no13-2020-07/ もしくは IntelliJ のメニューにある View -> Tool Windows -> Maven を選択後、Reload All Maven Projects をクリックします

————————————
▼3. Jconsole を利用し JVM のメモリ消費量を確認
————————————
3-1. Jconsole とは
Jconsole は Java application のデバッグツール JDK utility で JVM の統計情報 CPU 使用率、メモリ使用量、スレッド数などを確認するために利用します。

3-2. Jconsole の利用
3-2-1. 最初に以下の blog で紹介したコードを利用して Cosmos DB にデータを insert する Java コードを実行します。

Java Azure Cosmos DB (SQL API) HTTP Status コード (エラーコード)の見方 No.16 https://www.kumoman.net/site/2020/07/29/cosmosdbhttpstatuscode-no16-2020-07/

(例)

import com.azure.cosmos.*;
import com.azure.cosmos.models.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
import java.lang.Thread;

public class CosmosDBJconsole {
    protected static final Logger log = LoggerFactory.getLogger(CosmosDBJconsole.class);

    public static class Family{
        public String id;
        // change uppercase letter like Id from id to occur http status 400 code
        //public String Id;
        public String lastName;
        public boolean isRegistered;
        public String getLastName(){
            return lastName;
        }
    	
        public Family(String idv,String lastnamev,boolean isv){
            id=idv;
            //Id=idv;
            lastName=lastnamev;
            isRegistered=isv;
        }
    }

    public static void main(String... args) {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        String databaseName = "testcosmosdb";
        String end_point = "https://xxx.documents.azure.com:443";
        String master_key = "xxxx";
        String containerName = "colltest";
        log.info("Prepare for data");
        Family family = new Family("11","Alex",false);
        try (CosmosClient cosmosClient = new CosmosClientBuilder().endpoint(end_point).key(master_key).gatewayMode(GatewayConnectionConfig.getDefaultConfig()).consistencyLevel(ConsistencyLevel.SESSION).connectionSharingAcrossClientsEnabled(true).contentResponseOnWriteEnabled(true).userAgentSuffix("My-Application-clienttest").preferredRegions(Collections.singletonList("West US")).buildClient()){
            log.info("The connection to Cosmos DB succeeded.");
            log.info("Create DB");
            CosmosDatabaseResponse databaseResponse = cosmosClient.createDatabaseIfNotExists(databaseName);
            CosmosDatabase database = cosmosClient.getDatabase(databaseName);
            log.info("Create container with 400 RU/s");
            CosmosContainerProperties containerProperties = new CosmosContainerProperties(containerName, "/lastName");
            CosmosContainerResponse cosmosContainerResponse = database.createContainerIfNotExists(containerProperties, ThroughputProperties.createManualThroughput(400));
            log.info("Set Container");
            CosmosContainer container = database.getContainer(containerName);
            log.info("Create item using container. Use lastName as partitionKey for the item");
            CosmosItemRequestOptions cosmosItemRequestOptions = new CosmosItemRequestOptions();
            log.info("insert data into items");
            CosmosItemResponse<Family> item = container.createItem(family, new PartitionKey(family.getLastName()),cosmosItemRequestOptions);
        }catch(CosmosException e){
            e.printStackTrace();
        }
    }
}

Pom.xml (一部)

        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-cosmos</artifactId>
            <version>4.6.0</version>
        </dependency>

3-2-2. ターミナルから Jconsole を起動し JVM の統計情報を確認したいプロセスID (PID) を選択します。

$Jconsole

3-2-3. ウィザードに従うとグラフが表示され JVM の統計情報を確認することができます。
以下は Overview のタブを選択した状態。

————————————
▼4. 参考情報
————————————
(1) Azure Cosmos DB を無料で試す https://docs.microsoft.com/ja-jp/azure/cosmos-db/optimize-dev-test#try-azure-cosmos-db-for-free
(2) Quickstart: Build a Java app to manage Azure Cosmos DB SQL API data https://docs.microsoft.com/en-us/azure/cosmos-db/create-sql-api-java?tabs=sync
(3) Using Jconsole https://docs.oracle.com/javase/7/docs/technotes/guides/management/jconsole.html

以上です。参考になりましたら幸いです。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です