1、4c8G的机器,启动arthas并attach到该机器的主进程; 2、启动arthas时,cpu接近100%,后续降到50%左右; 3、连续访问某接口,cpu持续50%,访问几次后服务器崩溃,挂了(p.s. 不使用arthas时正常情况下访问接口未出现过问题)。
[alibaba/arthas]启动arthas并attach到机器主进程后,访问服务的接口,cpu猛增且持续较高,服务崩溃挂掉。
回答
attach之后,有没有执行过命令?
试下下载全量包,解压后,把arthas.properties
里的这个配置注释掉,再执行as.sh启动arthas。
#arthas.enhanceLoaders=java.lang.ClassLoader
刚用这个方法试了以下,attach之后,若不执行命令,服务不会挂;但是执行trace命令后,访问一次接口服务就挂了,这是什么原因呢?
arthas 3.5.0/3.2.0/3.1.8的版本我都试过了,执行一次trace命令,服务就挂一次。求大神指点,主要就是想用trace方法,这样没法用呀。
- 检查有没有其它的java agent
- jvm挂掉之后,会生成一个err log,分析下里面的内容
- 检查下jdk版本,试下新一点的版本,比如jdk8最新版本
- 没有其他java agent
- err log路径是在哪儿呀
- 我们的jdk是1.8.2
- 刚我又试了一下,可以trace几次,然后又挂了
可以用这个参数显式设置: -XX:ErrorFile=/path/hs_error%p.log
这是日志里的报错信息
可以提供一个可重新此问题的demo吗? hs_error log 最前面的一段有crash的信息,请发出来看一下
后面还有一段是标记出现错误的线程调用栈,这个很关键,大概知道是哪里发生的错误
这段吗 A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x00007f7279ff0f48, pid=143010, tid=140129658177280
JRE version: Java(TM) SE Runtime Environment (8.0_20-b26) (build 1.8.0_20-b26) Java VM: Java HotSpot(TM) 64-Bit Server VM (25.20-b23 mixed mode linux-amd64 compressed oops) Problematic frame: C 0x00007f7279ff0f48
Core dump written.
参考一下这个,找出崩溃时的线程调用栈: https://www.jianshu.com/p/bc98f1b4e221
栈的调用记录只有这一条 我查阅了前几次的报错记录,有的是这样
没看到明显的问题,看能不能提供一个重现问题的demo,可以用本地编译的Java进程跑一下,比较容易找到问题
这个报错呢?
已解决:服务器jdk版本是1.8.0_20;需更改成1.8.0_60
服务器jdk版本是1.8.0_20 为什么 需更改成1.8.0_60?1.8.0_20 为什么会崩溃呢?