type
status
date
summary
slug
tags
category
password
URL
icon
在公司负责的一个项目涉及到了Java-Agent技术,近期遇到一个比较奇怪的问题:在某个服务上,在服务构建部署时加上我们的Agent参数后,会导致服务挂载不上其他的Agent。其他服务也有挂载我们的Agent工具和其他Agent工具的,但是都能挂载成功。
分析排查
首先复现问题,如果无法复现问题,那就难办了。
单独拉新的泳道部署后,先不开启我们的Agent开关,然后观测,发现其他Agent工具可以正常挂载;然后开启我们的Agent后,重新部署后发现其他Agent均挂载失败,且自己的Agent工具也没有挂载成功。
登录机器查构建部署日志,没有发现我们的Agent的启动日志,这点比较奇怪。看起来像是我们的Agent根本就没有启动。
然后排查服务构建时的JAVA_TOOL_OPTIONS参数,看下是否是构建参数没有传递成功。排查后,发现在Devops的平台上,我们这些Agent的构建参数是都传递了的。
那是哪的问题呢?
我又在测试机器上手动启动了服务,同时把我们的这几个Agent都带上,测试后发现能够成功部署,且都挂载成功。。。。
现在看来,可能是JAVA_TOOL_OPTIONS参数传递出了问题,开始怀疑是不是这个参数有长度限制?超过一定长度无法挂载?
然后一顿搜索,发现了这个问题https://stackoverflow.com/questions/41792132/java-tool-options-maximum-length,赶紧看下机器上正在使用的JDK版本,一看,果然是JDK7。
测试下精简其中一个Agent的参数,重新部署挂载,发现这次都能成功挂载了。😭😭😭
问题总结
用户机器上的JDK版本为7,在这个版本下JAVA_TOOL_OPTIONS的最大长度为1024,超过后会失效。当前用户服务上的JAVA_TOOL_OPTIONS参数长度已经快到临界值了,加上我们的Agent后直接超出了1024,导致JAVA_TOOL_OPTIONS这个参数失效了,因此所有Agent都挂载失败了。后续其中一个Agent会优化其参数量,优化后就能挂载当前的所有Agent了。
- 作者:luxinfeng
- 链接:https://www.luxinfeng.top/article/20231010
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。