全部產品
Search
文件中心

Elastic Compute Service:將基於x86平台的Java應用程式遷移到倚天雲端服務器

更新時間:Apr 28, 2025

本文介紹如何將基於x86平台的Java應用程式遷移到倚天雲端服務器。

背景資訊

由於Java應用會存在依賴的Java包,並且經常通過JNI調用C編譯的本地庫,如果隨即轉移,可能會帶來相容性問題。遷移時可通過以下方法解決相容性問題:

選擇JDK

ARM架構在伺服器端和其他領域都有廣泛應用。合適的JDK可以大大減少遇到問題的機率,提高效能。在倚天雲端服務器上,建議您使用以下兩種OpenJDK:

  • Alibaba Dragonwell:阿里巴巴自研OpenJDK的開源版本,在資料中心大規模Java應用部署情況下,可以大幅度提高穩定性、效率以及效能。更多資訊,請參見Alibaba Dragonwell

  • Eclipse Temurin:基於OpenJDK的開源Java SE產生的構建版本,適用於多個平台及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檔案的參考指令碼,您可以將掃描指令碼放入編譯好的應用目錄中,執行指令碼進行掃描。

    警告

    禁止在生產環境使用此指令碼以免引起業務異常。

    #!/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中存在三個x86架構的so檔案,不支援ARM架構,您可以升級到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工程

Java工程常用的構建工具如Maven等均與架構無關,因此構建工具無需更改。僅需設定好JDK即可重新構建。關於如何選擇JDK,請參見選擇JDK