All Products
Search
Document Center

Elastic Compute Service:Migrasi aplikasi Java ke Instance ECS YiTian

Last Updated:May 16, 2026

Atasi masalah kompatibilitas dependensi Java dan pustaka native saat melakukan migrasi dari x86 ke Instance ECS YiTian berbasis ARM.

Latar Belakang

Aplikasi Java dapat memanggil pustaka C native melalui dependensi atau Java Native Interface (JNI). Migrasi langsung ke arsitektur ARM dapat menyebabkan masalah kompatibilitas. Gunakan metode berikut untuk mengatasinya:

Pilih JDK

ARM banyak digunakan di lingkungan server. Pemilihan Java Development Kit (JDK) yang sesuai dapat mengurangi masalah kompatibilitas dan meningkatkan performa. Distribusi OpenJDK berikut direkomendasikan untuk Instance ECS YiTian:

  • Alibaba Dragonwell: distribusi OpenJDK open source dari Alibaba, dioptimalkan untuk stabilitas dan performa aplikasi Java skala besar di Pusat data. Lihat Alibaba Dragonwell.

  • Eclipse Temurin: build Java SE open source berbasis OpenJDK, kompatibel dengan berbagai platform dan versi Java SE. Lihat Eclipse Temurin.

Upgrade dependensi yang diperlukan

Beberapa dependensi Java mencakup pustaka native khusus x86. Jika muncul error seperti berikut saat menjalankan aplikasi, upgrade dependensi tersebut untuk mengatasi masalah ini.

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)
  • Pemindaian dependensi yang tidak kompatibel

    Lakukan pemindaian file SO untuk mengidentifikasi dependensi yang tidak kompatibel. Jika hanya ditemukan file SO x86, kemungkinan dependensi tersebut tidak mendukung ARM.

    Simpan skrip berikut ke direktori aplikasi yang telah dikompilasi dan jalankan untuk memindai file SO.

    Peringatan

    Jangan gunakan skrip ini di lingkungan produksi.

    #!/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 {} \;

    Contoh output berikut menunjukkan bahwa lz4-1.3.0 berisi tiga file SO x86 yang tidak mendukung ARM. Upgrade lz4-1.3.0 ke versi 1.4.0 untuk mengatasi masalah ini.

    lz4 diubah namanya menjadi lz4-java mulai versi 1.4.0 dan seterusnya.

    ========= 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
  • Dependensi umum yang mungkin mengalami masalah kompatibilitas

    Tabel berikut mencantumkan dependensi umum dengan masalah kompatibilitas yang diketahui. Upgrade ke versi yang direkomendasikan.

    Nama dependensi

    Versi yang direkomendasikan

    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

Bangun ulang Proyek Java

Alat build umum seperti Maven bersifat independen terhadap arsitektur dan tidak memerlukan perubahan. Konfigurasikan JDK terlebih dahulu sebelum membangun ulang. Lihat Pilih JDK.