[alibaba/arthas]启动arthas并attach到机器主进程后,访问服务的接口,cpu猛增且持续较高,服务崩溃挂掉。

2024-02-23 833 views
6

1、4c8G的机器,启动arthas并attach到该机器的主进程; image 2、启动arthas时,cpu接近100%,后续降到50%左右; 3、连续访问某接口,cpu持续50%,访问几次后服务器崩溃,挂了(p.s. 不使用arthas时正常情况下访问接口未出现过问题)。

回答

7

attach之后,有没有执行过命令?

试下下载全量包,解压后,把arthas.properties里的这个配置注释掉,再执行as.sh启动arthas。

#arthas.enhanceLoaders=java.lang.ClassLoader
0

刚用这个方法试了以下,attach之后,若不执行命令,服务不会挂;但是执行trace命令后,访问一次接口服务就挂了,这是什么原因呢?

3

arthas 3.5.0/3.2.0/3.1.8的版本我都试过了,执行一次trace命令,服务就挂一次。求大神指点,主要就是想用trace方法,这样没法用呀。

8
  1. 检查有没有其它的java agent
  2. jvm挂掉之后,会生成一个err log,分析下里面的内容
  3. 检查下jdk版本,试下新一点的版本,比如jdk8最新版本
4
  1. 没有其他java agent
  2. err log路径是在哪儿呀
  3. 我们的jdk是1.8.2
  4. 刚我又试了一下,可以trace几次,然后又挂了
0

可以用这个参数显式设置: -XX:ErrorFile=/path/hs_error%p.log

7

这是日志里的报错信息 image

8

可以提供一个可重新此问题的demo吗? hs_error log 最前面的一段有crash的信息,请发出来看一下

0

后面还有一段是标记出现错误的线程调用栈,这个很关键,大概知道是哪里发生的错误

1

这段吗 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.

7

image

image

9

栈的调用记录只有这一条 我查阅了前几次的报错记录,有的是这样 image

8

没看到明显的问题,看能不能提供一个重现问题的demo,可以用本地编译的Java进程跑一下,比较容易找到问题

4

这个报错呢? image

8

已解决:服务器jdk版本是1.8.0_20;需更改成1.8.0_60

7

服务器jdk版本是1.8.0_20 为什么 需更改成1.8.0_60?1.8.0_20 为什么会崩溃呢?