性能文章>CPU性能优化基本篇:一定要了解Linux CPU哪些基本概念>

CPU性能优化基本篇:一定要了解Linux CPU哪些基本概念原创

1月前
383302

目录

第一篇:CPU性能优化基础篇:一定要了解Linux CPU哪些基本概念 
第二篇:CPU 优化高级篇:Linux系统中CPU占用率较高问题排查思路与解决方法
第三篇:CPU 优化高级篇:Java  CPU 高的原因和排查方法  :如何定位Java  消耗CPU最多的线程
第四篇:CPU 优化高级篇:Java  CPU 高的原因和排查方法  :学会Java死锁和CPU 100% 问题的排查技巧
第五篇:CPU 优化线上实战篇:Java 生产环境 CPU 跑满 & 大量长耗时的问题排查 & 解决
第六篇:CPU 优化线上实战篇:Java   JVM  频繁 GC的原因和排查方法

导语

实际项目中,我们常常遇到一些CPU高的问题,本次专题由浅入深,从基本概念到线上实践,带着大家重新系统学习一些Linux CPU,Java CPU调优 基本知识和方法。本文适合对象

  • 中高级Java工程师:重温Linux CPU常见的基本概念,比如Load。学习线上CPU优化和排查思路
  • 架构师:线上CPU优化和排查案例分享

 

正文

进入正题:

典型的救火场景
 
Java进程CPU使用率很高
Jstack、Btrace、Arthas分析堆栈
 
Mysqld进程CPU使用率很高
show full processlist 分析慢查询,看连接数和QPS等
 
面向底层基础软件系统的开发者
直接定位函数代码,perf(文本) + flamegraph(火焰图)
 

常见的疑问

load值多少算高呢?
load值超过CPU核数都代表CPU繁忙负载比较重了,也要看趋势
 
上下文切换多少算高? 这个取决于CPU自身的性能。几百到几千都正常,暴增那种就需要警惕
什么会导致过多的上下文切换?运行队列多少算正常?
 
过多的进程/线程、中断、系统调用等。每个CPU core不超过3个线程 Java应用CPU使用率很高通常是什么原因?
死循环、数据结构与算法(复杂度高)、复杂的正则匹配、 频繁GC(us高)、锁竞争激烈(sy高)、线程主动切换频繁等
 

小结

平均负载高,可能是CPU密集型应用进程导致 平均负载高并不代表CPU使用率高,也有可能I/O繁忙 通常,I/O密集型应用可能导致平均负载高但是CPU使用率不高 iowait高可能导致load高 ,可能存在频繁写入或I/O瓶颈,结合iostat分析 内核态CPU高,应该优先排查内核线程和系统调用情况(strace) 计算密集型场景CPU us/sy比至少90/10,I/O密集型约70/30(仅供参考) CPU缓存命中率也很重要,可以通过perf stat -e 看到 USE方法:使用率(繁忙情况)、饱和度(可运行队列等待CPU)、错误 调优:静态/动态优先级、调度器、进程CPU亲和性绑定、编译器优化 …

 

大家有什么想了解和疑问,欢迎下面给我留言。谢谢!

请先登录,感受更多精彩内容
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步

为你推荐

不起眼,但是足以让你有收获的JVM内存分析案例
分析 这个问题说白了,就是说有些int[]对象不知道是哪里来的,于是我拿他的例子跑了跑,好像还真有这么回事。点该 dump 文件详情,查看相关的 int[] 数组,点该对象的“被引用对象”,发现所
从一起GC血案谈到反射原理
前言 首先回答一下提问者的问题。这主要是由于存在大量反射而产生的临时类加载器和 ASM 临时生成的类,这些类会被保留在 Metaspace,一旦 Metaspace 即将满的时候,就会触发 Fu
关于内存溢出,咱再聊点有意思的?
概述 上篇文章讲了JVM在GC上的一个设计缺陷,揪出一个导致GC慢慢变长的JVM设计缺陷,可能有不少人还是没怎么看明白的,今天准备讲的大家应该都很容易看明白 本文其实很犹豫写不写,因为感觉没有
协助美团kafka团队定位到的一个JVM Crash问题
概述 有挺长一段时间没写技术文章了,正好这两天美团kafka团队有位小伙伴加了我微信,然后咨询了一个JVM crash的问题,大家对crash的问题都比较无奈,因为没有现场,信息量不多,碰到这类问题我
又发现一个导致JVM物理内存消耗大的Bug(已提交Patch)
概述 最近我们公司在帮一个客户查一个JVM的问题(JDK1.8.0_191-b12),发现一个系统老是被OS Kill掉,是内存泄露导致的。在查的过程中,阴差阳错地发现了JVM另外的一个Bug。这个B
JVM实战:优化我的IDEA GC
IDEA是个好东西,可以说是地球上最好的Java开发工具,但是偶尔也会卡顿,仔细想想IDEA也是Java开发的,会不会和GC有关,于是就有了接下来对IDEA的GC进行调优 IDEA默认JVM参数: -
不起眼,但是足以让你收获的JVM内存案例
今天的这个案例我觉得应该会让你涨姿势吧,不管你对JVM有多熟悉,看到这篇文章,应该还是会有点小惊讶的,不过我觉得这个案例我分享出来,是想表达不管多么奇怪的现象请一定要追究下去,会让你慢慢变得强大起来,
如何通过反射获得方法的真实参数名(以及扩展研究)
前段时间,在做一个小的工程时,遇到了需要通过反射获得方法真实参数名的场景,在这里我遇到了一些小小的问题,后来在部门老大的指导下,我解决了这个问题。通过解决这个问题,附带着我了解到了很多新的知识,我觉得