一、问题现象
今天A系统上线时,B系统报了可用率问题。经查看日志,发现是B系统调用的A系统接口线程池被打满,而且报警确实是刚刚上线完成所在的机器。
二、分析原因
通过分析A系统的ump发现该接口在这个时间点,性能出现了波动。见下图:
该接口操作比较简单,只操作了缓存,一个hgetall操作,所以,怀疑是资源或者gc导致的。
1、检查该服务器GC情况。发现在这个时间点,发生了fullgc
但是发生fgc的时候,该服务器jvm内存使用率很低。
发生fullgc,常见原因无外乎内存不够用,或者程序调用System.gc导致。后者之前也检查过,程序并没有调用system.gc。
2、检查该机器的jvm参数,发现XX:MaxPermSize=1024m,但是大家应该都知道jdk1.8已经使用metaspace替代了perm区[1],所以该参数是不会生效的。
-Xms4096m -Xmx4096m -XX:MaxPermSize=1024m
这台服务器使用的是默认的配置,Xmx[2]设置是4096m,但是metaspace没有配置。打印默认参数的值