本文来说下JVM性能优化之CPU负载过高的问题

文章目录

  • 概述
  • 程序测试
  • 问题定位
  • 本文小结

概述

一般性结论:一般来说,CPU占用高不高的问题,不是给定一个数值,例如90%以上就算高,以下就算正常,正常来说,随着程序的运行,CPU不断变化,百分之几,百分之几十,百分之百,都有可能,而CPU持续的高位,例如一直300%或者更多800%(多核),才可以认定为CPU占用过高问题。

对于java来说,频繁的IO读写,创建过多的线程,CPU都会较高,而线程死锁或者死循环基本是导致cpu高的罪魁祸首


程序测试

本人在Windows上编写了一个测试程序

package cn.wideth.buz.utils;public class MyThread implements Runnable{@Overridepublic void run() {long i = 0;//死循环会导致不断的IO操作,造成CPU偏高while(true){i++;if(i % 1000000 == 0){System.out.println(Thread.currentThread().getName() + " -->" + i);}}}public static void main(String[] args) {for(int i = 0; i < 3; i++){MyThread myThread = new MyThread();Thread thread = new Thread(myThread);thread.start();}}
}

问题定位

由于程序是在window上编写的测试程序,所以先到任务管理器中找到CPU占用比较高的进程的PID,如果是LINUX环境下,直接使用top命令得到进程占用比较多PID即可。

使用jstack -l PID命令得到定位线程信息

将线程信息保存在一个临时文件中,使用命令jstack -l 74680 > tempfile.txt即可

从当前进程的堆栈信息中定位到CPU占用比较高的代码


本文小结

如果线上出现了CPU过高的情况,一般是代码中出现了无限循环等情况。可以先找到CPU占用比较多的进程id,Linux中使用top命令,Windows中可以到任务管理器中查看,然后使用jstack -1 PID命令打印进内的堆栈信息,结合代码即可找到占用CPU的问题。

JVM性能优化之CPU负载过高相关推荐

  1. 【JVM】十、CPU负载过高分析

    原生分析方式 1.使用 top 命令查看线程占用 cup 比率 [tomcat@localhost ~]$ top Tasks: 189 total, 1 running, 188 sleeping, ...

  2. 【linux性能优化】CPU使用率过高分析

    最常用什么指标来描述系统的 CPU 性能呢? 可能不是平均负载,也不是 CPU上下文切换,而是另一个更直观的指标CPU使用率 CPU使用率是单位时间内CPU使用情况的统计,以百分比的方式展示 那么,作 ...

  3. 性能优化之CPU占用率高(一)

    文章部分摘于,点击查看原文​​​​​​​ 当我们cpu使用率高的情况下会出现什么情况? 我们访问程序的速度比较慢,运行时间长. 系统崩溃,无法访问程序. 什么情况会导致Java应用程序的CPU使用率飙 ...

  4. JVM性能优化, Part 2 ―― 编译器

    2019独角兽企业重金招聘Python工程师标准>>> ImportNew注:本文是JVM性能优化 – 第2篇 <JVM性能优化, Part 2 ―― 编译器>第一篇 & ...

  5. 【Java架构师】JVM性能优化(一)JVM技术入门下

    JVM性能和"一次编译,到处运行"的挑战 我有新的消息告诉那些固执的认为Java平台本质上是缓慢的人.当Java刚刚做为企业级应用的时候,JVM被诟病的Java性能问题已经是十几年 ...

  6. linux 排查cpu负载过高原因

    CPU负载查看方法: 使用vmstat查看系统维度的CPU负载 使用top查看进程维度的CPU负载 一.测试工具 1.使用 vmstat 查看系统纬度的 CPU 负载: 可以通过 vmstat 从系统 ...

  7. 性能优化专题 - JVM 性能优化 - 04 - GC算法与调优

    目录导航 前言 Garbage Collect(垃圾回收) 如何确定一个对象是垃圾? 引用计数法 可达性分析 垃圾收集算法 标记-清除(Mark-Sweep) 复制(Copying) 标记-整理(Ma ...

  8. JVM性能优化(一)

    作者 Eva Andreasson Java应用程序是运行在JVM上的,但是你对JVM技术了解吗?这篇文章(这个系列的第一部分)讲述了经典Java虚拟机是怎么样工作的,例如:Java一次编写的利弊,跨 ...

  9. JVM性能优化, Part 1 - JVM简介

    原文出自:http://www.importnew.com/1774.html 众所周知,Java应用程序是运行在JVM上的,但是你对JVM有所了解么?作为这个系列文章的第一篇,本文将对经典Java虚 ...

最新文章

  1. React 组件绑定点击事件,并且传参完整Demo
  2. 用户稿件 | 好家伙,到底谁在用TBtools?
  3. 未来医疗AI发展的八大趋势
  4. 张亚勤院士谈“智能计算新趋势”
  5. python requests下载文件很慢-python requests 下载大文件不完整
  6. 关于python的全局变量和局部变量、以下描述错误的是_Python:全局变量与局部变量的问题...
  7. 域控制器显示无法使用解决办法
  8. 前端学习(3180):ant-design介绍3
  9. Spark面试题梳理
  10. ASP.NET 实践:锁定 ASP.NET 配置设定
  11. Jenkins自动化UI测试Tomcat报错“The web application [/jenkins] appears to have started a thread named”解决办法...
  12. python编程从入门到实践
  13. 简述 Erasure Code,EC 纠删码原理
  14. 通达OA2017版连接sqlserver2008数据库
  15. 理想国pandas练习题3
  16. 使用软碟通(UltraISO)刻录Linux系统
  17. html5 运动轨迹绘画,html5 canvas行星运动轨迹动画特效
  18. 程序员的思维修炼读书笔记(二)
  19. 通达OA二次开发手册
  20. 手游开发商Plarium游戏玩家超3.8亿!揭秘新作《突袭: 暗影传说》制作流程

热门文章

  1. 按键精灵saystring无法使用的几种解决方案
  2. 如何通过使用fiddler对安卓系统设备抓包总结
  3. 黑马程序员——GUI篇
  4. RSync服务器配置
  5. Swift 3到5.1新特性整理
  6. vue调试工具 -- vue-devtools 安装方法
  7. 关键时刻不可或缺的5款高科技紧急应用
  8. 借攻防演习提升企业安全能力
  9. USB和USB2.0万能驱动
  10. CPU高负载排查小技巧(2分钟速读版),细心的优化可能为公司节省一个亿!