开发者社区> 问答> 正文

使用表格存储的JavaSDK遇到SocketTimeoutException怎么查

已解决

如题,使用表格存储的JavaSDK遇到SocketTimeoutException

展开
收起
亦征 2017-05-05 20:13:22 3753 0
1 条回答
写回答
取消 提交回答
  • 阿里云数据库表格存储(TableStore) 高级开发工程师
    采纳回答

    JavaSDK抛出SocketTimeoutException的条件:

    当“SDK接收到数据的时间”减去“SDK发送数据的时间”超过SocketTimeout时,SDK会抛出SocketTimeoutException,这段时间内包含了“应用发送请求(包含网络传输)”、“服务端处理”、“应用接收响应(包含网络传输)”。SocketTimeout可以在创建OTSClient的时候自定义,如果没有设置,目前默认是15s。

    SocketTimeoutException可能的几种原因:

    _

    1. 网络不通

    如果全部请求都是SocketTimeoutException,那么首先可能是网络不通,可以通过ping或者curl命令测试是否为网络问题:

    ping aaaa.cn-hangzhou.ots.aliyuncs.com
    
    curl aaaa.cn-hangzhou.ots.aliyuncs.com
    
    正常情况下,curl会返回类似下面的结果:
    <?xml version="1.0" encoding="UTF-8"?>
    <Error><Code>OTSUnsupportOperation</Code><Message>Unsupported operation: ''.</Message><RequestID>00054ec5-822c-8964-adaf-990a07a4d0c9</RequestID><HostID>MTAuMTUzLjE3NS4xNzM=</HostID></Error>
    

    如果发现是网络不通,可能的原因比如是在非ECS环境使用了内网的endpoint。

    2. 服务端处理慢,超过了SDK设置的SocketTimeout值

    一个请求在表格存储服务端的处理时间几乎是不会超过15秒的,因为服务端也会有一个超时时间,大概是10秒,超过这个时间会给客户端返回OTSTimeout错误。

    但是假设在SDK端自定义了SocketTimeout,比如2秒,那么当服务端执行时间超过2秒时,SDK就会抛出SocketTimeoutException错误。

    3. 网络传输慢

    如果服务端处理时间并不长,但是网络传输慢,导致整体延迟长,也会导致SocketTimeoutException,这种情况要看下是否流量过高,带宽吃紧,网络重传率高等。

    4. Java进程的GC频繁,经常FullGC,导致SocketTimeoutException

    这种情况也会经常遇到,程序负载高,GC频繁时出现SocketTimeoutException。

    原因是当发生FullGC的时候,请求发不出去,或者收不到响应,超过了SDK端设置的SocketTimeout,就会抛出SocketTimeoutException。

    这种情况下需要用工具分析进程的GC情况,解决进程频繁GC的问题。

    2019-07-17 21:08:25
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
TableStore在社交类场景下的应用 立即下载
表格存储实时数据流Steam的技术揭秘和应用场景 立即下载
表格存储(TableStore) 立即下载