JVM调优

目录

一、内存溢出

二、 内存泄漏

三、 如何排查解决


一、内存溢出

概念:就是说系统分配的内存空间不足以存放当前数据项。比如栈溢出。进栈时,栈已满,却依旧再进栈就会出现上溢,当数据项已经全部出栈,却依然在退栈,就会出现下溢。

  • 栈溢出:栈溢出就是由于递归或循环嵌套层次太多造成的

  • 局部数组过大    

  • 递归调用层次太多    

  • 指针或数组越界

  • 堆溢出:导致堆溢出的操作是不断的new 一个对象,一直创建新的对象,但是不销毁

二、 内存泄漏

概念:是指new出来的对象如果是强引用、软引用应当在数据项使用完成之后,即使释放,如果没有及时释放,就会在内存里,这就是内存的泄露,内存泄露久而久之会造成内存溢出。

   栈泄露:是缓冲区泄露的一种,比如布局嵌套过深会导致栈泄露等等。

  堆泄漏:程序在运行中malloc/new等分配一块内存,完成没有调用相对应的free/delete释放掉;

三、 如何排查解决

  • jps 查看JVM进程ps -ef | grep java

  • Jmap 内存占用情况查哪个对象占用比较多   jmap -histo pid查看各个代内存大小   jmap -heap pid打印堆栈信息   jmap -dump:format=b,file=canal.hprof pid

  • Jstat 监控进程的classloader,compiler,gc情况jstat -gcutil pid 1000

  • Jstack查看CPU高内存的堆栈信息步骤:  

  • (1) top 查看CPU最高的进程    

  • (2) top -Hp pid 查看哪个线程占用的CPU最高    

  • (3)printf "%x\n" tid  线程ID转为16进制格式    

  • (4)jstack -l tid  > ./filename.stack      

  • (5)jstack pid |grep tid -A 30   查看线程堆栈信息

  • Jinfojvm的全部参数和系统属性   jinfo pid输出某属性的参数   jinfo -flag name pid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值