问题现象:第三方对接,客户端端使用SASL认证模式,服务端使用SSL模式认证,触发客户端业务后,客户端微服务内存溢出,进程core掉
问题必现,这种场景比较特殊,属于测试场景遗漏
1、观察客户端,首先用MAT工具,分析查看客户端core掉的 .hprof 堆内存文件,占用内存较大对象的调用栈如下:
2、观察服务端,修改kafka服务端日志级别为INFO级别,服务端报错握手失败,每次触发客户端业务,服务端报错一致,问题现象稳定
3、触发业务,进行远程调试,kafka服务端设置断点 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=30809,修改kafka自带脚本文件kafka-run-class.sh,修改完重启kafka服务端
4、根据调试过程,发现客户端接收到服务端返回,尝试分配“352518912”字节,客户端JVM分配内存接近400M,这个超大对象分配,导致客户端直接OOM,所以问题必现。
5、搜索社区,发现有同样问题的issue。
https://issues.apache.org/jira/browse/KAFKA-4493
6、问题原因:kafka 客户端采用SASL模式认证,服务端采用SSL模式认证
客户端错误配置为不使用 ssl 并连接到具有 SSL 侦听器的代理,则代理会以 TLS 警报响应进行响应。
客户端将前 4 个 TLS 警报响应字节解释为响应的大小,导致它尝试分配“352518912”字节,导致客户端OOM,进程ocredump
7、问题解决:可以依据社区提供修改思路进行修改,提供补丁包
版权声明:本文为wht_0217原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。