1、内存溢出
jps先查看需要监控的进程号
jmap导出dump文件:jmap -dump:format=b,file=20201111-01.dump 7380(最后)
可以使用jdk自带的jvisualvm装入来查看占用较大的对象
这里我死循环不停的new对象Test1
附一段能内存溢出的代码
import java.util.HashMap;
import java.util.Map;
public class TestApp {
static class Key {
Integer id;
Key(Integer id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
}
public static void main(String[] args) {
Map m = new HashMap();
while (true)
for (int i = 0; i < 10000; i++)
if (!m.containsKey(i))
m.put(new Key(i), "Number:" + i);
}
}
2、执行耗时
jdk自带的jvisualvm,本地监控,选中需要监控的进程->抽样器->CPU->等一段时间,然后停止->快照 保存
这里我跑了一个死循环
图像化界面只能监控本地环境,远程环境需要额外配置,如果需要监控远程环境(无图像化界面,无远程配置,只能启动定时任务定时抓取线程dump)
3、javamelody
springboot下配置:链接
top上的图表中的红线,并不是实际的系统可用最大值的95%,是一个比最大值小的一个值的95%
主要的监控内容就是SQL、内存、CPU、线程堆栈和硬盘。
4、druid
springboot下配置:链接
SQL监控这块druid会稍微强大一点