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:
Tingkatkan dependensi yang diperlukan jika dependensi Java dari aplikasi tidak kompatibel dengan platform Advanced RISC Machine (ARM).
Bangun ulang proyek Java untuk menyelesaikan masalah pada pustaka asli aplikasi.
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.
PeringatanUntuk 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 strippedDependensi 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.