百木园-与人分享,
就是让自己快乐。

JVM_线程cpu占用过高或长时间无法得出结果及OMM

1、线程cpu占用过高

1. top命令发现java程序长时间占用过高的cpu
2. ps H pid,tid,%cpu | grep 进程号PID
3. 使用java工具jstack     jstack PID  发现具体线程情况
4. 将tid线程转换为十六进制去查找具体的线程
5. echo \'obase=16;ibase=10;23425\' | bc

2、发现长时间没有结果

1. 使用java工具jstack     jstack PID  发现具体线程情况
2. 查看时否有死锁deadlock

3、OMM情况

1、栈帧过多导致  
查看递归方法是否有正确的出口
查看相互引用调用 使用 @JsonIgnore
2、栈帧过大
3、Java heap space
jps查看具体的进程id
jmap -heap 进程id  查看堆内存情况
jconsole  可视化界面查看具体的堆内存使用情况
jvisualvm  可视化界面查看

设置栈大小 -Xss 1M
设置堆大小 -Xmx 4G

问题:是否栈设置的越大越好
不是,物理内存固定的情况下,栈设置的越大意味着能够并行的线程越少,同样影响程序运行的时间


来源:https://www.cnblogs.com/yisk/p/16276268.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » JVM_线程cpu占用过高或长时间无法得出结果及OMM

相关推荐

  • 暂无文章