随记

看森哥排错java问题,遂有此文

1 问题描述

一个java应用使用CPU占比长时间为 200%左右

2 排查思路

(1)GC 垃圾回收

top命令查看该应用占用的内存大小,占用内存大小和-Xmx大致相同,可能是Full GC 导致CPU占用较高,但GC不会导致CPU长时间高。由于GC导致CPU使用高的表现:

1   进程占用内存和-Xmx大致相同
2  CPU使用率间歇性高,尤其在业务量多的时候
3  Jstat   gc  pid  10000   5   查看进程号为pid的进程情况,每10s一次,执行5次。
 查看YGC  FGC 次数,如果FGC次数增长较快,很有可能是GC导致CPU占用高
(2)查看线程

top -Hp pid 查询进程下所有线程的运行情况(shift+p 按cpu排序,shift+m 按内存排序)

1 可以使用jstack 单独查看某个线程的详细信息
2 也可以导出jfr,使用可视化工具, 查看全局信息,IO,socket,锁等等信息都可以查看到
jfr可视化分析还可以看到各个过程使用了多少时间。
(3) 分析思路
垃圾回收GC、数据库连接池配置错误、JVM底层问题、网络问题等等都有可能导致CPU占用高
     定位进程、定位线程、缩小范围   我还没学会怎么排查,学无止境,读完书工作还是要学习
最近的鸡汤

1、 做难事必有收获

2 、做事要认真,一样的事情,花费一样的时间和精力,如果马马虎虎敷衍了事,那时间和力气就白费了

3 、计算机行业的知识是倒金字塔,底层的知识学会了,上层的知识会更容易融会贯通。打好基础知识,操作系统,数据库,计算机网络,数据结构,计算机组成原理,而不是追逐学习变来变去的上层应用,什么火就学什么。工具只是工具,要了解工具的原理。
4、 学一样技术,先学这个技术是解决什么问题的,有什么优点,什么缺点,适用于什么样的场景,再学如何使用。
5 、如何知道自己适不适合去做一件事(工作,专业),尽最大努力坚持一段时间(比如2年),还是不喜欢,没有进步,那就换
6、看一个人是否有潜力,要看他把业余时间花在哪些事情上
7、持续学习 问君哪得清如许?唯有源头活水来
8、计划 每个月打算看哪本书,学什么内容

举例:
地球的半径是6378千米
A 记住 地球的半径是6378千米
B 地球的半径为什么是6378千米,是如何计算出来的
C 我知道 地球的半径是6378千米,可以做什么,有哪些应用