Cpu100%怎么排查?[面试8.0]

查询出CPU消耗最高的进程PID(top -c)
根据进程PID查出消耗CPU消耗最高的线程PID(top -Hp 3033),其中-H指显示线程信息,-p指显示pid
根据线程PID查出对应的java线程(jstack -l 3033 > ./3033.stack),线程PID转化为16进制,然后用cat|grep命令在3033.stack中找该16进制数,再分析并处理

若要线上排查一个问题,除了用日志,打印堆栈还有什么方法?[面试8.0]

远程调试: 利用JVM自带的远程调试功能,但一般在预发环境调试
代理远程调试: 如用Charles将对线上的请求代理到本地接口上
用诊断工具: 如用Arthas这种诊断工具,它基于字节码动态注入,不需要重启,可以获得堆栈,线程,以及方法返回值等信息