线上服务器CPU占用过高?7步带你搞定

news2024/11/25 10:57:15

一. 前言

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

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

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

二. 解决过程

    • 问题要点

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

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

2. 排查过程

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

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

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

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

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

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

2.5 jstack输出线程信息

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

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

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

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

三. 相关命令总结

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

# 1.先通过top命令找到消耗cpu很高的进程id
top

# 通过jps的输出配合上面的pid可以定位到出问题的应用是哪个
jps -lv

# 这一步可以得到出问题的进程pid 71288

# 2.执行top -p pid单独监控该进程
top -p pid

# 3.监控界面输入H,获取当前进程下的所有线程信息,找到消耗cpu特别高的线程编号
#  这一步可以得到出问题的线程的pid 71289 

# 4.jstack 输出线程信息
jstack pid >> stack.txt

#注意,这里要使用的是java进程的pid

# 5.查找高占用线程,这里需要把线程id转16进制
printf "%x\n" pid 

# 6.在stack.txt 中查找线程信息,定位到问题线程的问题方法

# 7.查找出问题的方法的源代码,解决问题。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】Linux权限

权限的概念 限制人的,访问的对象天然可能没有这种“属性”权限:一件事情是否允许被谁“做”。 权限 人 事物属性 Linux上的用户分类 root,超级管理员,几乎可以干任何事情(1个)普通用户(多个&a…

雷电飞机大战游戏|基于Java开发实现雷电飞机大战游戏

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

【前端】Vue项目:旅游App-(8)city:标签页Tabs动态数据:网络请求axios与request、数据管理store与pinia、各种封装

文章目录目标过程与代码安装相关库封装网络请求相关代码网络请求数据网络请求数据操作封装pinia管理数据并封装tab栏改为动态数据效果本篇总结总代码修改或新建的文件serviceindexmodules的cityrequest的configrequest的indexstoremodules的citymodules的loadingcity.vue参考目…

录屏没有声音怎么办?录屏怎么录声音

相信部分朋友在录制视频时,有出现录制视频没有声音,导致该段视频没有声音而无法播放。录屏怎么录声音?可以使用支持录制声音的专业的电脑录屏软件。今天小编就在这给大家分享在录制视频同时,将声音也录制进去的操作步骤。一、录屏…

【Linux】主函数的三个形参

主函数的形参有三个:argc参数个数,argv参数内容,envp环境变量。其中argc是整型,argv和envp是指针数组(存的字符串) argv源于我们自己在使用执行命令时传的内容,envp源于程序的父进程&#xff08…

力扣sql入门篇(十)

力扣sql入门篇(十) 1 查找重复的电子邮箱 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT Email FROM Person GROUP BY Email HAVING count(id)>21.3 运行截图 2 合作过至少三次的演员和导演 2.1 题目内容 2.1.1 基本题目信息 2.1.2 示例…

Java并发编程(六)ExecutorService

ExecutorService invokeAny() he invokeAll() 具有阻塞特性 invokeAny invokeAny 的作用是取得第一个完成任务的结果的值。 如果线程中增加 if (!Thread.currentThread().isInterrupted()) 判断,则会中断这些线程。 其他线程如果抛出 InterruptedException() 异常&a…

从徘徊迷茫到行业精英,社科院与杜兰大学金融管理硕士改变你的人生轨迹

在以“内卷”为主基调的职场环境里,似乎不停地进阶已经成为了职场人的唯一出路。但是,如何在进阶路上冲破职业瓶颈,到达心之所往的理想位置,则没有一个标准的答案。有的职场人士通过考取不同的技能证书来增加自身优势,…

Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题

作者:卜比 本文是《容器中的 Java》系列文章之 2/n,欢迎关注后续连载 😃 。 从 Java Agent 报错开始,到 JVM 原理,到 glibc 线程安全,再到 pthread tls,逐步探究 Java Agent 诡异报错。 背景 …

数据分析,你还在单纯地看数据?

企业的数字化意识越来越强,工作中也开始使用各种业务系统来管理业务,管理数据。很多人以为上了业务系统,对数据进行统计了,就是数据分析,这是大错特错的观点,数据分析是通过数据来剖析企业经营管理和业务发…

Using chatbots to scaffold EFL students argumentative writing (论文翻译)

使用聊天机器人来指导学生的议论文写作摘要研究表明,英语作为外语的学生的议论文写作受益于与同龄人的互动。然而,在实践中找到一个理想的对象很困难,聊天机器人被认为是这个问题的潜在解决方案。聊天机器人是人工智能的一种形式,…

Studio One6最新更新教程及安装包下载

Studio One6拥有多达50款原生效果插件,例如Analog Delay延迟插件,除能制作延迟效果外,还提供了制作复古的镶边与和声效果。Rotor插件制作的经典旋转扬声器效果也是非常不错的。这些插件,无论是在用户界面,还是使用体验…

http-serve开启一个服务器

前言在写前端页面中,经常会在浏览器运行HTML页面,从本地文件夹中直接打开的一般都是file协议,当代码中存在http或https的链接时,HTML页面就无法正常打开,为了解决这种情况,需要在在本地开启一个本地的服务器…

70. 爬楼梯

70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示例 2&am…

如何将python脚本打包成可执行exe文件

如何将python脚本打包成可执行exe文件 前提条件 1. 新建一个python项目,并且配置虚拟环境 2. 安装pyinstaller 打包EXE文件 写一个支持入参的python脚本,打包成exe文件 找一张图片作为exe文件的图标 百度搜索” 在线jpg转cio”,将图片转换成cio格式 …

MySQL基础篇第11章(数据处理之增删改)

1.插入数据 1.1 实际问题 1.2 方式1:VALUES的方式添加 使用这种语法一次只能向表中插入一条数据。 情况1:为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....);值列表中需要为表的每一个字段指定值,并且值的…

MTIC工业大脑,海量接入网关!

MTIC3.0工业大脑是高性能,高可靠性的低代码开发数据核心平台,支持上万级别的网关设备同时在线,提供标准版本业务系统,可实现多业主工程项目并行管理,吸取大型物联网数据监测工程专家建议,实现项目精细化管理…

什么是DPU

什么是DPU 什么是 DPU? 在数据中心、DPU 或数据处理单元中移动数据的专家是一种新型的可编程处理器,将与 CPU 和 GPU 一起成为计算的三大支柱之一。 当然,您可能已经熟悉中央处理器。 多年来,CPU 是大多数计算机中唯一的可编程元…

如何避免成为背锅侠?

你被同事甩过锅吗? 打工人在职场中犯错都是不可避免的。 但明明不是自己的问题,还要背个黑锅,就非常闹心了! 大家好,我是大D。 前几天,大D开发完了一个项目,在交付验收中发现业务逻辑存在漏洞&a…

java swing人机对战五子棋(含背景音乐)

一、项目简介 本项目是一套基于java swing的人机对战五子棋系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xf…