全部产品
Search
文档中心

Elastic Compute Service:Migrasikan aplikasi Java dari platform x86 ke instance ECS YiTian

更新时间:Jun 26, 2025

Topik ini menjelaskan cara memigrasikan aplikasi Java dari platform x86 ke instance Elastic Compute Service (ECS) YiTian.

Informasi latar belakang

Aplikasi Java menggunakan dependensi Java dan Java Native Interface (JNI) untuk memanggil pustaka asli yang dikompilasi dalam bahasa C. Jika Anda langsung memigrasikan aplikasi Java, masalah kompatibilitas mungkin terjadi. Untuk menyelesaikan masalah tersebut, gunakan metode berikut:

Pilih JDK

Arm adalah arsitektur baru di sisi server yang banyak digunakan di berbagai bidang. Menggunakan Java Development Kit (JDK) yang sesuai dapat membantu mengurangi kemungkinan masalah dan meningkatkan kinerja. Kami merekomendasikan penggunaan jenis OpenJDK berikut pada instance ECS YiTian:

  • Alibaba Dragonwell: versi open source dari OpenJDK yang dikembangkan oleh Alibaba. Alibaba Dragonwell meningkatkan stabilitas, efisiensi, dan kinerja aplikasi Java berskala besar yang diterapkan di pusat data. Untuk informasi lebih lanjut, lihat Alibaba Dragonwell.

  • Eclipse Temurin: build Java SE open source berbasis OpenJDK. Eclipse Temurin kompatibel dengan berbagai platform dan versi Java SE. Untuk informasi lebih lanjut, lihat Eclipse Temurin.

Tingkatkan dependensi yang diperlukan

Beberapa dependensi Java tidak kompatibel dengan Arm. Jika kesalahan serupa dengan yang berikut dilaporkan saat menjalankan aplikasi, masalah kompatibilitas terjadi karena penggunaan pustaka asli x86. Anda dapat meningkatkan dependensi untuk menyelesaikan masalah tersebut.

Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx.so: xxx.so: 
tidak dapat membuka file objek bersama: Tidak ada file atau direktori seperti itu (Kemungkinan penyebab: tidak dapat memuat .so 64-bit AMD pada platform AARCH64-bit)
  • Pemindaian untuk Dependensi yang Tidak Kompatibel

    Anda dapat memindai file SO untuk dependensi yang tidak kompatibel. Jika hanya file SO untuk arsitektur x86 yang termasuk dalam hasil pemindaian, file SO tersebut mungkin tidak mendukung Arm.

    Kode sampel berikut memberikan contoh skrip yang digunakan untuk memindai file SO. Simpan skrip pemindaian ke direktori aplikasi yang dikompilasi dan jalankan untuk memindai file SO.

    Peringatan

    Untuk mencegah masalah, jangan gunakan skrip 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 "========= mulai Analisis =========="
    find . -name "*.so" -exec file {} \;

    Setelah pemindaian selesai, keluaran serupa dengan yang berikut akan ditampilkan. lz4-1.3.0 berisi tiga file SO arsitektur x86 yang tidak mendukung arsitektur Arm. Tingkatkan lz4-1.3.0 ke 1.4.0 untuk menyelesaikan masalah ini.

    lz4 diubah namanya menjadi lz4-java mulai versi 1.4.0.

    ========= mulai Analisis ==========
    ./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 Memiliki Masalah Kompatibilitas

    Tabel berikut mencantumkan dependensi umum yang mungkin memiliki masalah kompatibilitas. Kami merekomendasikan peningkatan dependensi 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 pembuatan umum untuk proyek Java, seperti Maven, tidak terkait dengan arsitektur. Anda tidak perlu memodifikasi alat pembuatan. Cukup konfigurasikan JDK sebelum membangun ulang proyek Java. Untuk informasi tentang cara memilih JDK, lihat bagian Pilih JDK dari topik ini.