JVM常见问题!
JVM常见问题!
月伴飞鱼问题排查工具
服务器上查看堆栈信息工具
登陆上具体机器,执行命令:
wget https://raw.github.com/oldratlee/useful-scripts/release-2.x/bin/show-busy-java-threads
下载脚本:
- sh 脚本,即可得到最忙线程信息
内存泄漏
对象不会再被程序用到了,但是GC又不能回收他们的情况,叫内存泄漏。
内存泄漏举例:
单例模式:
- 单例的生命周期和应用程序一样长,如果持有对外部对象的引用的话,那么这个外部对象是不能被回收的,则会导致内存泄漏。
资源未关闭 :
- 如:数据库连接,网络连接和IO连接必须手动Close,否则是不能被回收的。
内存溢出
元空间溢出
如果元空间发生内存溢出,会造成操作系统的内存溢出。
元空间溢出主要是由于加载的类太多,或者动态生成的类太多。
堆外内存溢出
这里的堆外内存指的是 Java 应用程序通过直接方式从操作系统中申请的内存。
在 Java 中可以通过相应的 API 去申请直接内存,通过监控工具,能够看到内存占用的明显增长。
为了限制这些危险的内存申请,可以通过设置相应的参数进行调整。
栈溢出
线程请求的栈深度大于虚拟机允许的最大深度。
虚拟机在扩展栈深度时,无法申请到足够的内存空间:OutOfMemoryError