Klien dapat mengalami timeout saat mengakses Tablestore akibat kegagalan jaringan, jitter jaringan, beban server yang tinggi, atau event Full Garbage Collection (GC) di sisi klien. Jika terjadi timeout, lakukan pemecahan masalah dengan memeriksa konektivitas jaringan, latensi server, dan potensi masalah Full GC di sisi klien.
Symptoms
Saat menggunakan Java SDK untuk mengakses Tablestore, Anda mungkin menerima pesan Unexpected error: java.net.SocketTimeoutException. Berikut contoh pesan error tersebut:
content: 11:56:48.072 WARN com.alicloud.openservices.tablestore.core.utils.LogUtil - TraceId:4bc30ca1-f112-2d52-d8b1-61a95072eda5 Failed RetriedCount:1 com.alicloud.openservices.tablestore.ClientException: Unexpected error: java.net.SocketTimeoutException
Possible causes
Error ini terjadi ketika durasi antara permintaan dan respons melebihi nilai socketTimeoutInMillisecond. Nilai default parameter ini adalah 30.000 milidetik.
Dalam kondisi normal, hindari menetapkan nilai socketTimeoutInMillisecond terlalu rendah. Anda dapat mengonfigurasi nilai ini melalui ClientConfiguration.
Kemungkinan penyebabnya meliputi hal-hal berikut:
-
Klien mengalami event Full GC.
-
Masalah jaringan, seperti kegagalan jaringan atau jitter.
-
Latensi tinggi di sisi server yang melebihi nilai
socketTimeoutInMillisecond.
Solution
-
Periksa adanya masalah Full GC di sisi klien.
Gunakan alat seperti jmap dan jcmd untuk memeriksa penggunaan memori JVM dan mendeteksi error out-of-memory (OOM).
Jika terjadi error OOM, thread I/O latar belakang HttpClient mungkin keluar secara tidak terduga. Untuk mengatasinya:
Jika penggunaan memori tidak normal atau terdapat memory leak, optimalkan kode.
Jika penggunaan memori wajar tetapi sumber daya mesin tidak mencukupi, tambahkan memori yang tersedia.
Jika mesin dalam keadaan idle dan penggunaan memori rendah, tingkatkan heap memory JVM untuk mengurangi kemungkinan terjadinya event Full GC.
Selain itu,
SocketTimeoutExceptionjuga dapat terjadi saat beban mesin tinggi, laju error jaringan tinggi, atau pemanfaatan CPU tinggi. Dalam kasus ini, permintaan mungkin mengalami timeout sebelum sempat dikirim. -
Periksa konektivitas jaringan antara klien dan server.
Jika semua permintaan gagal dengan
SocketTimeoutException, kemungkinan besar disebabkan oleh kegagalan jaringan. Gunakan perintahpingataucurluntuk menguji adanya masalah jaringan.Contoh berikut menunjukkan cara menjalankan pengujian tersebut. Ganti
myinstancedengan nama instans Tablestore Anda.ping myinstance.cn-hangzhou.ots.aliyuncs.com curl myinstance.cn-hangzhou.ots.aliyuncs.com-
Jika Anda menemukan kegagalan jaringan, kemungkinan Anda menggunakan titik akhir internal di lingkungan non-ECS. Pastikan Anda menggunakan titik akhir yang sesuai. Untuk informasi lebih lanjut tentang titik akhir, lihat Endpoints.
Jika klien Anda mengakses Tablestore dari Instance ECS, lakukan koneksi melalui VPC atau jaringan klasik.
-
Jika konektivitas jaringan tersedia tetapi timeout tetap terjadi, jitter jaringan mungkin menyebabkan latensi tinggi. Periksa adanya trafik tinggi, bandwidth tidak mencukupi, atau laju pengiriman ulang paket yang tinggi. Jika Anda mendeteksi jitter jaringan yang signifikan, hubungi dukungan jaringan.
-
-
Untuk memeriksa latensi sisi server pada Konsol Tablestore, ikuti langkah-langkah berikut:
-
Masuk ke Konsol Tablestore.
-
Pada bilah navigasi atas, pilih kelompok sumber daya dan wilayah.
-
Pada halaman Overview, klik nama instans Anda dalam daftar instans.
-
Pada tab Instance Details, klik nama tabel data di area Tables.
-
Pada halaman Manage Table, klik tab Monitoring Indicators. Kemudian, pilih tabel atau indeks, tentukan rentang waktu, dan atur Metric Group menjadi Average Latency untuk melihat latensi rata-rata berbagai jenis operasi.
Jika latensi sisi server melebihi nilai
socketTimeoutInMillisecond, submit a ticket ke dukungan teknis Tablestore.
-