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

Elastic Compute Service:Java アプリケーションの YiTian ECS インスタンスへの移行

最終更新日:May 16, 2026

x86 から ARM ベースの YiTian ECS インスタンスに移行する際の Java の依存関係およびネイティブライブラリの互換性の問題を解決します。

背景情報

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

JDK の選択

ARM はサーバー環境で広く採用されています。適切な Java Development Kit (JDK) は、互換性の問題を低減し、パフォーマンスを向上させます。YiTian ECS インスタンスには、以下の OpenJDK ディストリビューションを推奨します。

  • Alibaba Dragonwell:Alibaba が提供するオープンソースの OpenJDK ディストリビューションで、データセンターにおける大規模な Java アプリケーションの安定性とパフォーマンスのために最適化されています。詳細については、「Alibaba Dragonwell」をご参照ください。

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

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

一部の Java 依存関係には、x86 専用のネイティブライブラリが含まれています。アプリケーションの実行時に以下のようなエラーが報告された場合は、依存関係をアップグレードして問題を解決してください。

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 ファイルのみが見つかった場合、その依存関係は ARM をサポートしていない可能性があります。

    次のスクリプトを、コンパイルされたアプリケーションのディレクトリに保存して実行し、SO ファイルをスキャンします。

    警告

    本番環境ではこのスクリプトを使用しないでください。

    #!/bin/bash
    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
    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 =========="
    find . -name "*.so" -exec file {} \;

    次の出力例は、lz4-1.3.0 に ARM をサポートしていない 3 つの x86 SO ファイルが含まれていることを示しています。この問題を解決するには、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 などの一般的なビルドツールはアーキテクチャに依存しないため、変更は不要です。再構築の前に JDK を設定してください。詳細については、「JDK の選択」をご参照ください。