博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试连环炮系列(八):服务器CPU飙升100%怎么排查
阅读量:4448 次
发布时间:2019-06-07

本文共 935 字,大约阅读时间需要 3 分钟。

  1. 服务器CPU飙升100%怎么排查

    执行“top”命令,查看当前进程CPU占用的实时情况,PID列是进程号,确定是哪个应用程序的问题。

  2. 如果是Java应用导致的,怎么定位故障原因
    1. 执行“top -Hp 进程号”命令:查看java进程下的所有线程占CPU的情况。
    2. 执行“printf "%x\n 10"命令 :后续查看线程堆栈信息展示的都是十六进制,为了找到咱们的线程堆栈信息,把线程号转成16进制。例如,printf "%x\n 10-》打印:a,那么在jstack中线程号就是0xa。
    3. 执行 “jstack 进程号 | grep 线程ID” 查找某进程下-》线程ID(jstack堆栈信息中的nid)=0xa的线程堆栈信息。如果“"VM Thread" os_prio=0 。tid=0x00007f871806e000 nid=0xa runnable”,第一个双引号圈起来的就是线程名,如果是“VM Thread”这就是虚拟机GC回收线程了。
    4. 执行“jstat -gcutil 进程号 统计间隔毫秒 统计次数(缺省代表一致统计)”,查看某进程GC持续变化情况,如果发现返回中FGC很大且一直增大-》确认Full GC! 也可以使用“jmap -heap 进程ID”查看一下进程的堆内从是不是要溢出了,特别是老年代内从使用情况一般是达到阈值(具体看垃圾回收器和启动时配置的阈值)就会进程Full GC。
    5. 执行“jmap -dump:format=b,file=filename 进程ID”,导出某进程下内存heap输出到文件中。可以通过eclipse的mat工具查看内存中有哪些对象数量比较多。
  3. 频繁Full GC有几种原因
    1. 创建大量对象而无法回收。
    2. 频繁显示调用System.gc()。
  4. 如果是死锁,怎么检查呢

    执行 “jstack 进程号 | grep 线程ID” 查找对应的线程堆栈信息,出现deadlock关键字就表示发生了死锁,通过堆栈信息能看到两个线程的具体阻塞点。

参考(部分摘抄的文字版权属于原作者):

鸡汤:别减肥了,你丑并不只是因为胖。

转载于:https://www.cnblogs.com/xiaoyangjia/p/11582670.html

你可能感兴趣的文章
javase基础10
查看>>
Qt Font
查看>>
UILabel设置富文本格式显示
查看>>
[洛谷P3379]【模板】最近公共祖先(LCA)
查看>>
java程序——随机数求和
查看>>
HTML5的浏览器支持方案
查看>>
在Asp.Net MVC中使用Repeater控件
查看>>
应用程序已被安全设置阻止
查看>>
找球号(一)
查看>>
开发小计(3)
查看>>
[Codevs] 1001 舒适的路线
查看>>
Deep Learning相关
查看>>
MySQL 树形结构 根据指定节点 获取其所有父节点序列
查看>>
hdu_5773_The All-purpose Zero(LIS)
查看>>
流程控制之while循环
查看>>
JSONObject和JSONArray区别及基本用法
查看>>
java多线程例子
查看>>
目标检测网络之 YOLOv3
查看>>
python 使用pyinstaller,pywin32打包.py成.exe应用程序
查看>>
AFNetworking封装思路简析
查看>>