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

  • 代码:捕获内存快照,去排查代码,有可能是递归调用的层次太多了

    线程堆栈总结_线程堆栈总结