すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:x86 プラットフォームから YiTian ECS インスタンスへの Java アプリケーションの移行

最終更新日:Apr 30, 2025

このトピックでは、x86 プラットフォームから YiTian Elastic Compute Service (ECS) インスタンスに Java アプリケーションを移行する方法について説明します。

背景情報

Java アプリケーションは、Java の依存関係と Java Native Interface (JNI) を使用して、C 言語でコンパイルされたネイティブライブラリを呼び出します。 Java アプリケーションを直接移行すると、互換性の問題が発生する可能性があります。 この場合、次の方法を使用して互換性の問題を解決できます。

JDK の選択

Arm はサーバーサイドの新しいアーキテクチャであり、複数の分野で広く使用されています。 適切な Java Development Kit (JDK) は、問題の発生確率を減らし、パフォーマンスを向上させるのに役立ちます。 YiTian ECS インスタンスでは、次のタイプの OpenJDK を使用することをお勧めします。

  • Alibaba Dragonwell: Alibaba によって開発された OpenJDK のオープンソースバージョンです。 Alibaba Dragonwell は、データセンターにデプロイされている大規模な Java アプリケーションの安定性、効率性、およびパフォーマンスの向上に役立ちます。 詳細については、「Alibaba Dragonwell」をご参照ください。

  • Eclipse Temurin: OpenJDK に基づくオープンソースの Java SE ビルドです。 Eclipse Temurin は、複数のプラットフォームおよび Java SE バージョンと互換性があります。 詳細については、「Eclipse Temurin」をご参照ください。

必要な依存関係のアップグレード

一部の Java の依存関係は Arm と互換性がありません。 アプリケーションの実行時に次のエラーのようなエラーが報告された場合、x86 ネイティブライブラリが使用されているため、Arm プラットフォームで互換性の問題が発生しています。 依存関係をアップグレードすることで、問題を解決できます。

Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx.so: xxx.so: 
cannot open shared object file: No such file or directory (Possible cause: can't load AMD 64-bit .so on a AARCH64-bit platform)
  • 互換性のない依存関係のスキャン

    SO ファイルをスキャンして、互換性のない依存関係を調べることができます。 スキャン結果に x86 アーキテクチャ用の SO ファイルのみが含まれている場合、SO ファイルは Arm をサポートしていない可能性があります。

    次のサンプルコードは、SO ファイルのスキャンに使用されるスクリプトの例を示しています。 スキャンスクリプトをコンパイル済みアプリケーションディレクトリに保存し、スクリプトを実行して SO ファイルをスキャンできます。

    警告

    問題を防ぐため、本番環境ではスクリプトを使用しないでください。

    #!/bin/bash
    // 一時ディレクトリを作成し、すべてのJARファイルをコピーします
    rm -rf tmp
    mkdir tmp
    for jar in `find . -name *.jar`
    do
    if [ -f $jar ]
    then
    echo $jar
    cp -r $jar tmp/
    fi
    done
    cd tmp
    // JARファイルを解凍します
    for test in `ls`
    do
    name=`echo $test | sed "s/.jar//g"`
    echo $name
    mkdir $name
    cp -r $test $name
    cd $name
    unzip -o $test
    cd ..
    done
    echo "========= starting Analysis =========="
    // すべてのSOファイルをスキャンします
    find . -name "*.so" -exec file {} \;

    スキャンが完了すると、次のような出力が返されます。 lz4-1.3.0 には、Arm アーキテクチャをサポートしていない x86 アーキテクチャの SO ファイルが 3 つ含まれています。 lz4-1.3.0 を 1.4.0 にアップグレードすることで、この問題を解決できます。

    lz4 は、1.4.0 以降のバージョンでは lz4-java に名前が変更されています。

    ========= starting Analysis ==========
    ./lz4-1.3.0/win32/amd64/liblz4-java.so: PE32+ executable (DLL) (console) x86-64, for MS Windows
    ./lz4-1.3.0/linux/amd64/liblz4-java.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=2eafd0d4e86904e188b47565639318325108fffa, not stripped
    ./lz4-1.3.0/linux/i386/liblz4-java.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=41041674439aea5d1fd6c62b6d88f63da7600c9f, not stripped
  • 互換性の問題が発生する可能性のある一般的な依存関係

    次の表は、互換性の問題が発生する可能性のある一般的な依存関係を示しています。 依存関係を推奨バージョンにアップグレードすることをお勧めします。

    依存関係名

    推奨バージョン

    lz4-java

    1.4.0

    jna

    5.2.2

    snappy-java

    1.1.3

    icu4j

    68.1

    sqlite-jdbc

    3.20.0

    forest-sqlite-jdbc

    3.32.3.3

    netty-tcnative

    2.0.31

    netty-transport-native-epoll

    4.1.50

Java プロジェクトの再ビルド

Maven などの Java プロジェクトの一般的なビルドツールは、アーキテクチャとは無関係です。 ビルドツールを変更する必要はありません。 Java プロジェクトを再ビルドする前に、JDK を構成するだけで済みます。 JDK の選択方法については、このトピックのJDK の選択セクションをご参照ください。