1. jstack命令
查看某个Java进程内的线程堆栈信息。
jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。
2. 热点CPU问题:
cpu占用率持续的比较高
定位步骤:
jps -m -l 列出正在运行的进程----这里是否用top命令更好一些?top才能看出谁占用cpu最高
top -H -p pid 找出该进程内最耗费cpu的线程
printf "%x\n" tid 线程id转化为16进制
jstack pid | grep 转化为16进制的tid -A 50
备注1:展示的信息中,重点关注自己编写的代码,截图给开发
备注2:有可能一次jstack不能捕捉到需要的信息,那么需要多次执行,因为抓的是那一瞬间的状态
3. java.lang.stackoverflowerror,fatal:stack size too small
参数:-Xss:每个线程的栈大小,用于保存函数调用、返回地址等,默认1M,如果报错,改为2M
代码:捕获内存快照,去排查代码,有可能是递归调用的层次太多了