# 生产问题定位

1. 排除应用之外的影响因素： `top`(cpu)、`free`(内存)、`df`(磁盘)、`dstat`(网络流量)、`pstack`、`vmstat`、`st1race`(底层系统调用)
2. `top` 定位CPU 最高的进程
3. `top -Hp pid` 定位使用 CPU 最高的线程（或者 `ps -mp pid -o THREAD,tid,time`）
4. `printf '0x%x' tid` 线程 id 转化 16 进制
5. `jstack pid | grep tid` 找到线程堆栈

   5.1 gc线程（如下是查看gc情况的几种方式）
6. 查看gc 日志
7. `jstat -gcutil 进程号 统计间隔毫秒 统计次数（缺省代表一致统计`
8. 如果所在公司有对应用进行监控的组件当然更方便（比如Prometheus + Grafana）

   5.2 业务线程
9. 关注线程堆栈的`lock`字段
10. `jstack -l pid | grep BLOCKED` 查看阻塞态线程堆栈
