搜索
写经验 领红包
 > 健康

如何排查cpu占用过高的内存(怎么检查电脑cpu占用率)

导语:如何排查CPU占用过高?

每次面试都会面试几个线上环境问题?第一个问题线上CPU飙高,如何排查?第二个问题是内存溢出,进程死亡如何排查?

今天先说下CPU飙高,如何排查?

第一步:先用top命令,找到cpu占用最高的进程 PID

第二步:再用ps -mp pid -o THREAD,tid,time 查询pid进程中,哪个线程的cpu占用率高 记住TID

第三步:jstack 29099 >> xxx.log 打印出29099该进程下线程日志

第四步:排查日志文件

一套流程下来基本可以解决cpu飙高的问题,那么出现cpu飙高的原因有哪些?

1.代码中写死循环时,一直占用cpu,

2.在循环中不停的创建对象,也会导致GC频繁 —通过下图,不让死循环,频繁创建对象

3.System.currentTimeMillis() 采用这种方式去做计时,大概占用了10-20%cpu,因为不停地调用

除了CPU飙高的问题还有一种问题是由第二个原因,引起的。那就是内存溢出,如果内存溢出怎么排查。注意,内存溢出之后系统可能会宕机哦,如果宕机了改怎么排查那?

本文内容由小舻整理编辑!