项目场景:
这几天发现测试场非常不稳定,查找后发现是javaagent 的问题
简单记录一下查找步骤。
问题描述:
通过top 命令,查询当前占用资源最高的进程,毫无疑问是我们的java 程序,获取到它的pid 348
top -H -p 348 获取该进程下的所有线程,可以获取到占用资源最多的线程(PID)
这里忘记截图了。省略。。。。。。
将其pid 转化为16进制 (439 -> 1b7)
再通过 jstack 348 | grep 1b7 -A 100 命令,获取到当前栈该进程的相关信息。
其实这一块代码莫名其妙,seeker.agent 是什么东西,
再执行jinfo -flags 186. 终于发现启动参数里面指定了javaagent使用seeker-agent的包来帮我们检查jar.
果断disable javaagent,重启服务,再使用jmeter进行压测,一切都是那么美好,至于seeker-agent为什么会占用如此多的资源,后续我们再找时间分析。
原因分析:
一般来说,问题都是出现在我们的业务代码,例如一次加载过多的数据,或者哪个地方死锁了。但这次问题比较奇怪,居然是出现在javaagent的头上,一开始也是一头雾水,所以在对jvm问题分析的时候得先知道他的启动参数。jinfo -flags pid 至关重要。
解决方案:
查到是javaagent 的问题。暂时先disable这个参数,后续再分析原因。