laziobird
目录
第一篇: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亲和性绑定、编译器优化 …
大家有什么想了解和疑问,欢迎下面给我留言。谢谢!