**
一 线上常见问题定位
**
常见问题 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 种状态,如下,线程 new 之后处于 NEW 状态,执行 start 进入 runnable 等待 CPU 调度,因此如果 CPU 很忙会导致 runnable 进程数增加;不可中断态主要包含网络 IO、磁盘 IO 以及内核态的锁,如 synchronized 等
问题原因及定位:

本文汇总了线上系统常见的问题及其定位方法,包括CPU利用率高、load高、FullGC频繁、线程池满和NoSuchMethodException等。通过jstat、jstack、vmstat等命令进行问题排查,同时介绍了线程池原理和常用命令如tail、grep等,为线上问题的快速解决提供了参考。

5654

被折叠的 条评论
为什么被折叠?



