千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  线上服务器CPU占用过高,简单7步给你搞定

线上服务器CPU占用过高,简单7步给你搞定

来源:千锋教育
发布人:lxl
时间: 2023-02-20 15:10:11

  一. 前言

  在Java开发岗位的面试中,时不时会出现一些运维类的题目,其实这也反映了后端面试的一种趋势。现在企业对后端开发的要求越来越全面,不仅要求我们会写代码,还要我们能够进行部署和运维。

  今天九哥就结合一个真实的项目案例,来给大家讲解一道关于运维类的真实面试题。题目如下:有一个SpringBoot项目上线后,发现其部署所在的Linux服务器CPU占用过高,该如何排查解决?

  这是一道比较常见的线上排错问题,接下来就让我们我们来分析一下这个问题的解决过程吧。

  二. 解决过程

  问题要点

  该问题包含如下两个要点:

  •   如何观察Linux服务器CPU占比;
  •   如何定位到产生问题的Java代码所在线程,判断出当前问题线程到底在执行什么方法。

  排查过程

  2.1 通过top命令找到CPU消耗过高的进程id

1280X1280

  如上图,我们发现CPU占用高的进程pid为71288。

  2.2 通过jps输出,配合上面的pid定位到出现问题的具体应用

1280X1280 (1)

  2.3 执行top -p pid 单独监控该进程

1280X1280 (2)

  2.4 监控界面输入H,获取当前进程下所有的线程信息,找到CPU消耗特别高的线程编号

1280X1280 (3)

  由于Java是多线程程序,如果我们只知道进程id还不足以找到出现问题的线程。因此这里需要借助top命令的H交互模式,找到真正CPU占用过高的线程。本案例中的pid是71289,那么接下来距离找出出问题 的方法已经不远了。

  2.5 jstack输出线程信息

1280X1280 (4)

  这一步也是定位问题的关键。jstack命令能够打印出当前所有java栈中的线程信息,其中必然包括出问题的线程。剩下我们要做的就是根据线程的id,找到这个线程正在执行的方法即可。这里71289是十进制整数,而jstack日志中的线程id是十六进制,因此需要做以下转换。

1280X1280 (5)

  2.6 打开刚刚生成的jstack日志文件,查找关键字 11679

3eb39cb1-a46d-4a38-a46b-097fb2dcc776

  2.7 根据日志,发现出问题的代码在 FmmallApp类的 第14行。

  至此,我们就把问题定位完成了,接下来就可以去源代码中进行核对了。

c1ee14d8-5074-4a2f-a8b2-81c5d8dede19

  三. 相关命令总结

  本文中,我们所使用的Linux服务器端操作命令如下:

CM}%[PBFYQSNDR9[K8S{{RH

  以后如果你再遇到线上服务器出现故障,知道该怎么解决了吗?如果你还有其他问题,可以在评论区留言哦。

  欢迎咨询千锋教育在线老师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>