一、使用top命令找出CPU占比最高的进程

  • top命令定位异常进程

  • 如果确定是Java进程则进行下一步详细定位

eg:可以看出CPU占比最高的为Java进程22364

二、ps -ef或者jps进一步定位

  • 使用 ps -ef | grep java 命令查看全部Java进程

  • 使用 jps -l 命令列出Java进程

三、定位到具体的异常线程

  • 方法一:使用 top -H -p 进程号 查看异常线程

  • 方法二:使用 ps -mp 进程 -o THREAD,tid,time 列出进程中的线程占用CPU情况
    -m 显示所有的线程
    -p 指定进程id
    -o 该参数后是用户自定义格式

eg:可以看出线程ID为22369的占用最高

四、将需要的线程ID转换为16进制格式(英文小写格式)

转换方式:printf “%x\n” 线程ID

注:一定要用英文小写字母,否则监控不到线程代码!!!

五、jstack定位问题代码

定位方式: jstack 进程ID | grep tid(16进制线程ID小写英文) -A60

-A 显示多少行

eg:下述代码可看出该线程状态处于RUNNABLE,即程序正在运行态

总结:

对于Java应用而言,一下常见的几个性能问题都可以从线程堆栈入手定位:

  • 系统挂起无响应

  • 系统CPU较高

  • 系统运行的响应时间长

  • 线程死锁等

常见的线程状态:RUNNABLE,BLOCKED,WAITING,TIMED_WAITING

RUNNABLE
从虚拟机的角度看,RUNNABLE状态代表线程正处于运行状态。一般情况下处于运行状态线程是会消耗CPU的,但不是所有的RUNNABLE都会消耗CPU,比如线程进行网络IO时,这时线程状态是挂起的,但由于挂起发生在本地代码,虚拟机并不感知,所以不会像显示调用Java的sleep()或者wait()等方法进入WAITING状态,只有等数据到来时才消耗一点CPU.

TIMED_WAITING/WATING
这两种状态表示线程被挂起,等待被唤醒,当设置超时时间时状态为TIMED_WAITING,如果是未设置超时时间,这时的状态为WATING,必须等待lock.notify()或lock.notifyAll()或接收到interrupt信号才能退出等待状态,TIMED_WAITING/WATING下还需要关注下面几个线程状态:
waiting on condition:说明线程等待另一个条件的发生,来把自己唤醒;
on object monitor: 说明该线程正在执行obj.wait()方法,放弃了 Monitor,进入 “Wait Set”队列;

BLOCKED
此时的线程处于阻塞状态,一般是在等待进入一个临界区“waiting for monitor entry”,这种状态是需要重点关注的

哪些线程状态占用CPU

处于TIMED_WAITING、WATING、BLOCKED状态的线程是不消耗CPU的,而处于RUNNABLE状态的线程要结合当前线程代码的性质判断是否消耗CPU:

服务器CPU占用过高处理方案相关推荐

  1. 高频面试题:服务器CPU占用过高怎么办?搞定只需简单7步

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

  2. 服务器CPU占用过高和哪些因素有关呢

    服务器CPU占用过高和哪些因素有关呢 硬件因素 以下分别从CPU温度,CPU超线程,硬件配置,硬件驱动和待机方面分析. 1.CPU温度过高 如果CPU风扇散热不好,会导致CPU温度太高,使CPU自动降 ...

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

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

  4. win10服务器cpu占用过高,完美解决:Win10资源管理器占用CPU过高

    Windows10资源管理器占用CPU过高该怎么办?因为Windows7系统结束了支持,所以现在很多朋友都升级更新了Windows10系统.在使用Win10系统的过程中,发现Windows资源管理器占 ...

  5. 【linux】oracle数据库cpu占用过高排查方案

    将[%cpu]占用率最高的那条的[PID]复制取出,去数据库执行下面语句,即可查询出是哪条sql语句占导致cpu占用很高 SELECT sql_text FROM v$sqltext a WHERE ...

  6. win10服务器cpu占用过高,Win10 CPU占用率100%怎么办 Win10 CPU占用率过高解决方法

    Win10 CPU占用率100%怎么办 ?Win10系统CPU占用率过高的问题比较常见,下面为大家带来 Win10 CPU占用率过高解决方法 ,一起来看看. 方法1: 导致CPU占用的另一个原因可能是 ...

  7. Java项目服务器cpu占用过高怎么办?

    借用汤师爷的一句话:"麻匪一定要缴---没有麻匪的日子才是好日子". 作为程序员,bug一定是要处理的,没有bug的日子才是好日子!你想想,你正吃着火锅唱着歌,突然收到生产环境异常 ...

  8. Linux中JAVA服务器CPU占用过高(分析解决方法)

    当发现生产环境CPU使用非常高,并且居高不下,导致服务器报警,需要快速定位,分析是什么地方占用CPU过高,推荐步骤如下: 1. 首先服务器查看占用cpu高的进程是哪一个,查出进程号 top 2.查询该 ...

  9. mc服务器cpu占用过高怎么办,我的世界崩服无报错 传送导致CPU爆满

    我的世界崩服无报错 传送导致CPU爆满.服务器如果崩服报错了,这其实并不是很可怕的,最可怕的是崩服了米有任何报错数据产生,这是服主们应该时刻注意的.据统计,不少的服主会发现地图中有玩家传送就会导致CP ...

最新文章

  1. OpenCV的cvLoadImage函数
  2. kong 使用jwt RSA256证书
  3. 中间滑动 头部底部固定_固定抗震弹性支座报价技术参数
  4. 关于Zookeeper的几个问题
  5. 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
  6. 目标检测——下采样的学习笔记
  7. SVM 超平面方程
  8. 通信协议(二)——SPI协议
  9. 2021-2022-1 线性代数知识点总结
  10. 基于SSH框架的电影订票系统网站的设计与实现
  11. java纸牌_Java纸牌拖拉机简单模拟
  12. 技术人如何自我成长?
  13. 2019年中科院信工所夏令营考核内容
  14. python报错Ran out of input
  15. win10打开蓝牙设备方法
  16. python分析链家二手房信息----数据分析实战(一)
  17. PHP的环境安装基本的配置
  18. python计算差商_用Python求函数的差商
  19. 【机器学习应用】机器学习之无监督学习
  20. 蝉知CMS 7.X XSS漏洞复现

热门文章

  1. 软件测试之python高级软件测试开发第13期柠檬班,重写unittest
  2. STM32实现俄罗斯方块
  3. 基于Opencv和STM32物理鼠标的目标跟踪器
  4. 微信公众号文章如何排版?
  5. SharePoint重置密码功能Demo
  6. Baxer双臂机器人Ubuntu20.04+ROS noetic开发环境配置
  7. 微信开通检测平台应如何选择?
  8. 计算机社团活动效果取得成绩,电脑社团工作总结
  9. 西门子官网下载Eplan部件库
  10. 在电脑上显示未知发布者怎么办_Win7无法验证发行者、未知发布者的解决方法...