**
一 线上常见问题定位
**
常见问题 1:CPU 利用率高
CPU 使用率是衡量系统繁忙程度的重要指标,一般情况下单纯的 CPU 高并没有问题,它代表系统正在不断的处理我们的任务,但是如果 CPU 过高,导致任务处理不过来,从而引起 load 高,这个是非常危险需要关注的。 CPU 使用率的安全值没有一个标准值,取决于你的系统是计算密集型还是 IO 密集型,一般计算密集型应用 CPU 使用率偏高 load 偏低,IO 密集型相反。
问题原因及定位:
1 频繁 FullGC/YongGC
- 查看 gc 日志
- jstat -gcutil pid 查看内存使用和 gc 情况
2 代码消耗,如死循环,md5 等内存态操作
jstack 查找
- ps -ef | grep java 找到 Java 进程 id
- top -Hp pid 找到使用 CPU 最高的线程
- printf ‘0x%x’ tid 线程 id 转化 16 进制
- jstack pid | grep tid 找到线程堆栈
ps:输入“1”可查看每个 CPU 的情况
常见问题 2:load 高
load 指单位时间内活跃进程数,包含运行态(runnable 和 running)和不可中断态( IO、内核态锁)。关键字是运行态和不可中断态,运行态可以联想到 Java 线程的 6 种状态,如下,