Kesalahan timeout dapat terjadi saat menggunakan klien untuk mengakses Tablestore karena pemutusan jaringan, jitter jaringan, beban kerja server yang tinggi, atau pengumpulan sampah penuh (GCs) pada klien. Solusi harus diterapkan berdasarkan penyebab spesifiknya.
Deskripsi masalah
Saat menggunakan Tablestore SDK for Java untuk mengakses Tablestore, muncul kesalahan "Unexpected error: java.net.SocketTimeoutException". Contoh kesalahan:
content: 11:56:48.072 WARN com.alicloud.openservices.tablestore.core.utils.LogUtil - TraceId:4bc30ca1-f112-2d52-d8b1-61a95072eda5 Gagal RetriedCount:1 com.alicloud.openservices.tablestore.ClientException: Unexpected error: java.net.SocketTimeoutExceptionPenyebab potensial
Durasi dari pengiriman permintaan hingga penerimaan respons melebihi batas atas. Batas atas ditentukan oleh parameter socketTimeoutInMillisecond, dengan nilai default 30.000 milidetik.
Umumnya, disarankan untuk tidak menetapkan nilai terlalu kecil untuk parameter socketTimeoutInMillisecond. Nilai ini dapat diatur dalam ClientConfiguration.
Penyebab potensial meliputi:
Pengumpulan sampah penuh (full GC) dilakukan pada klien.
Masalah jaringan seperti jitter jaringan atau jaringan berbeda.
Latensi server lebih tinggi daripada nilai parameter socketTimeoutInMillisecond.
Solusi
Periksa apakah full GC dilakukan pada klien.
Gunakan alat seperti jmap atau jcmd untuk menganalisis Java virtual machine (JVM). Misalnya, periksa penggunaan memori JVM dan apakah out of memory (OOM) terjadi.
Jika OOM terjadi, thread I/O di latar belakang HttpClient akan keluar. Selesaikan masalah dengan metode berikut:
Optimalkan kode jika terjadi penggunaan memori yang tidak tepat atau kebocoran memori.
Tingkatkan alokasi memori jika penggunaan memori sudah benar tetapi sumber daya JVM tidak mencukupi.
Jika JVM idle dan hanya sejumlah kecil memori yang digunakan, tingkatkan heap JVM untuk mengurangi kemungkinan kesalahan.
Kesalahan "SocketTimeoutException" dapat terjadi jika beban kerja server, laju kesalahan jaringan, atau penggunaan CPU tinggi. Dalam skenario ini, permintaan timeout sebelum dikirim.
Periksa konektivitas jaringan antara klien dan server.
Jika kesalahan "SocketTimeoutException" terjadi pada semua permintaan, kemungkinan jaringan terputus. Jalankan perintah ping atau curl untuk menguji konektivitas jaringan.
Contoh kode berikut menunjukkan cara menguji konektivitas jaringan. Dalam contoh ini, instance bernama myinstance digunakan.
ping myinstance.cn-hangzhou.ots.aliyuncs.com curl myinstance.cn-hangzhou.ots.aliyuncs.comJika terjadi kegagalan jaringan, Anda mungkin menggunakan titik akhir internal di lingkungan non-Elastic Compute Service (ECS). Gunakan titik akhir yang sesuai. Untuk informasi lebih lanjut, lihat Titik Akhir.
Jika Anda mengakses Tablestore dari lingkungan ECS, disarankan untuk menggunakan virtual private cloud (VPC) atau jaringan klasik.
Jika jaringan terhubung tetapi latensi keseluruhan tinggi karena jitter jaringan, periksa apakah Penggunaan bandwidth, lalu lintas, atau laju pengiriman ulang paket tinggi. Jika jitter jaringan tinggi, hubungi insinyur jaringan untuk analisis lebih lanjut.
Lakukan langkah-langkah berikut untuk memeriksa apakah latensi server tinggi:
Masuk ke Konsol Tablestore.
Di bilah navigasi atas, pilih grup sumber daya dan wilayah.
Di halaman Overview, klik nama instance.
Di bagian Tables tab Instance Details, klik nama tabel data.
Di tab Monitoring Indicators halaman Manage Table, pilih tabel atau indeks, tentukan rentang waktu, dan atur Metric Group ke Average Latency untuk melihat latensi rata-rata dari berbagai jenis operasi.
Jika latensi server lebih besar daripada nilai parameter socketTimeoutInMillisecond, submit a ticket untuk menghubungi dukungan teknis Tablestore.
