Un client peut expirer lors de l'accès à Tablestore en raison de pannes réseau, d'instabilité du réseau, d'une charge serveur élevée ou d'événements de Full Garbage Collection (GC) côté client. En cas d'expiration du délai d'attente, résolvez le problème en vérifiant la connectivité réseau, la latence du serveur et les problèmes de Full GC côté client.
Symptômes
Lorsque vous utilisez le SDK Java pour accéder à Tablestore, vous pouvez recevoir l'erreur Unexpected error: java.net.SocketTimeoutException. Voici un exemple de message d'erreur :
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
Causes possibles
Cette erreur se produit lorsque le temps écoulé entre la requête et la réponse dépasse la valeur socketTimeoutInMillisecond. La valeur par défaut de ce paramètre est de 30 000 millisecondes.
Dans des conditions normales, évitez de définir une valeur trop faible pour socketTimeoutInMillisecond. Vous pouvez configurer cette valeur dans ClientConfiguration.
Les causes possibles sont les suivantes :
Le client rencontre un événement de Full GC.
Des problèmes réseau, tels que des pannes ou une instabilité du réseau.
Une latence élevée côté serveur qui dépasse la valeur
socketTimeoutInMillisecond.
Solution
-
Vérifiez la présence de problèmes de Full GC côté client.
Utilisez des outils tels que jmap et jcmd pour inspecter l'utilisation de la mémoire JVM et vérifier la présence d'erreurs de type out-of-memory (OOM).
Si une erreur OOM se produit, le thread d'E/S en arrière-plan de HttpClient peut se terminer de manière inattendue. Pour résoudre ce problème :
Si l'utilisation de la mémoire est anormale ou s'il existe une fuite de mémoire, optimisez le code.
Si l'utilisation de la mémoire est raisonnable mais que les ressources de la machine sont insuffisantes, augmentez la mémoire disponible.
Si la machine est inactive et que l'utilisation de la mémoire est faible, augmentez la mémoire heap JVM pour réduire la probabilité d'événements de Full GC.
De plus, une
SocketTimeoutExceptionpeut également se produire en cas de charge machine élevée, de taux d'erreur réseau élevé ou d'utilisation élevée du CPU. Dans ces cas, la requête peut expirer avant même d'être envoyée. -
Vérifiez la connectivité réseau entre le client et le serveur.
Si toutes les requêtes échouent avec une
SocketTimeoutException, une panne réseau en est probablement la cause. Utilisez la commandepingoucurlpour tester les problèmes réseau.Les exemples suivants montrent comment exécuter le test. Remplacez
myinstancepar le nom de votre instance Tablestore.ping myinstance.cn-hangzhou.ots.aliyuncs.com curl myinstance.cn-hangzhou.ots.aliyuncs.com-
Si vous constatez une panne réseau, il se peut que vous utilisiez un endpoint interne dans un environnement non-ECS. Assurez-vous d'utiliser le bon endpoint. Pour plus d'informations sur les endpoints, consultez Endpoints.
Si votre client accède à Tablestore depuis une instance ECS, connectez-vous via un VPC ou le réseau classique.
S'il existe une connectivité réseau mais que les expirations persistent, une instabilité du réseau peut être à l'origine d'une latence élevée. Vérifiez la présence d'un trafic élevé, d'une bande passante insuffisante ou d'un taux de retransmission de paquets élevé. Si vous détectez une instabilité réseau importante, contactez le support réseau.
-
-
Pour vérifier la latence côté serveur sur la console Tablestore, suivez les étapes ci-dessous :
Connectez-vous à la console Tablestore.
Dans la barre de navigation supérieure, sélectionnez un groupe de ressources et une région.
Sur la page Overview, cliquez sur le nom de votre instance dans la liste des instances.
Dans l'onglet Instance Details, cliquez sur le nom de la table de données dans la zone Tables.
-
Sur la page Manage Table, cliquez sur l'onglet Monitoring Indicators. Ensuite, sélectionnez une table ou un index, spécifiez une plage horaire et définissez Metric Group sur Average Latency pour afficher la latence moyenne pour différents types d'opérations.
Si la latence côté serveur dépasse la valeur
socketTimeoutInMillisecond, soumettez un ticket au support technique de Tablestore.