开发者社区> 问答> 正文

socketTimeout 设置过小的话,会导致连接无法关闭吗

我们使用OSS用作我们的文件存储,文件都不大,不超过10MB。我们使用JAVA SDK。现在我们遇到了这个问题:


在一个集群上,我们的socketTimeout 以及connectTimeout设置为3秒,但是每隔一段时间,差不多一个月吧,就会出现TCP socket memory被耗尽的情况。 监控了一下 /proc/net/sockstat, 其中 inuse的数量(也就是已建立的连接)始终不大, orphan也很小,但alloc, mem均随着时间缓慢增长,最终mem达到了系统设置的最大值(/proc/sys/net/ipv4/tcp_mem)


但是在另一个更大访问量的集群上,同样的代码,socketTimeout  ,connectTimeout 设置的是20秒,就没有这问题,/proc/net/sockstat 的输出基本保持恒定。


所以我想知道,如果访问OSS超时的话,连接是怎么释放的,客户端会正常的释放send revc socket buffer 吗。 谢谢!

展开
收起
康师傅123 2017-06-21 11:03:03 3488 0
2 条回答
写回答
取消 提交回答
  • 回 楼主康师傅123的帖子
    应该是需要程序最终释放socket—— 是指我这边的代码来手工释放? 如何释放呢,谢谢!
    2017-06-22 10:55:18
    赞同 展开评论 打赏
  • 设置成20秒,应该是始终没有超时,所以就没内存耗尽问题。设置成3秒,,应该是需要程序最终释放socket

    -------------------------

    直接close socket.

    2017-06-22 05:59:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
探索连接的最后十秒”落时”的网关 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载