tdt 的 sftp 算子导致的 inceptor 连接数量过多

  性能相关, 其他常见问题
内容纲要

概要描述


inceptor server 运行一段时间会自动重启,gc 情况都是正常的;Inceptor Server 日志中报错为 java.lang.OutOfMemoryError: unable to create new native thread

详细说明


正常情况下,看到 java.lang.OutOfMemoryError 应该首先怀疑是内存占用问题;但是这个报错里面具体的 call stack 是 unable to create new native thread,所以应该首先排查相关的连接数问题;重点关注数量是否异常多,以及数量是否一直在增长。

排查思路

  1. 检查报错服务所在节点的连接数

    # netstat -n | grep ^tcp | awk '{print $NF}' | sort -nr | uniq -c
  2. 检查 inceptor server 的所有连接数

    # cat /proc/$(ps -ef|grep -v grep |grep io.transwarp.inceptor.InceptorServer2 |awk '{print $2}')/status |grep Threads
  3. 是否有本机(Local Address)异常连接端

    # netstat -nalp|grep ^tcp|awk '{print $4}'|uniq -c |sort -nr |head
  4. 是否有远端(Foreign Address)异常连接

    # netstat -nalp|grep ^tcp|awk '{print $5}'|uniq -c |sort -nr |head
  5. 是否有异常状态的端口连接

    # netstat -nt | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'

问题原因

最终发现是某个 ip 的 22 端口连接数很多,并且不停增长。经过排查业务发现,是 tdt 的 sftp 算子与 inceptor 的连接不会释放,导致 inceptor server 运行一段时间后,stack 里面保留了很多的与 22 端口的连接;

可以通过 inceptor server 的 jstack 信息里面过滤这个 ip 确认,如果数量超过了实际正在使用的连接数;

解决方案

联系星环科技全球技术支持中心 获取新的 inceptor server jar包做替换,可以解决这个问题;

附录

已知的可能造成这种线程泄露的问题记录如下:

  1. tdt 的 sftp/ftp 算子;22/21 端口
  2. hyperbase 表的 drop 、truncate 操作;2181 端口

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。