jvm调优

什么是调优?
1、根据需求进行jvm规划和预调优
2、优化运行jvm运行环境(慢、卡顿)(怎么才能定位一个系统的瓶颈?压测)
3、解决jvm运行过程中出现的各种问题(Memory Lack OOM)

-Xms:最小堆大小
-Xmx: 最大堆大小
-XX:+printGC:在运行之中把垃圾回收器的日志打印出来
注意:-Xms为什么设置-Xmx一样?   防止内存抖动(内存扩容)
分配失败->  54m->1m(回收了53m)(剩余199m)  回收时间

参数调优 :

 

 线程跟踪 

jinfo 进程:查看进程相关的属性
jstate 进程 500:java的跟踪信息(500ms更新一次)
jstack 进程:打印出该进程对应的线程 如果发现多个线程都是wating  on  codeine就是可能出
现死锁

面试题:jvm中的cpu爆了,如何定位问题?
top 进程: 查看cpu的占用内存的大小(多观察几次就会发现内存是忽高忽低)
top -Hp 进程:查看进程中对应的线程占用CPU的大小

解答: top 进程:查看哪个进程中占用的cup比较高
      top -Hp 进程:查看进程中哪个cup比较高
      jstatck 线程:1、如果wating on codeine :VM GC 问题(查看GC日志看是不是频繁GC)
                   2、如果是业务问题:对应哪个类哪个方法出现问题
      jmap  -histo 进程|head 20 : 1、查询堆内存不同类占用内存的比重(内存一直回收不掉就是
                                   占用比重比较多的对象引起的)
      jmap  -dump:format=b;file=xxx.hprof 进程
                                  2、产生堆转储文件
     
面试题:如何定位频繁GC?
    回收不了:说明内存里面都全被占用了,并且有引用指向,导致垃圾回收机制回收不了
    定位完问题后就开始查业务逻辑
   

 

频繁GC:每次只回收6k

 

jmap  -histo 进程|head 20:(只查看前20个)
编号   对象数     所占字节  class名称

 

面试题:实际开发中如何定位频繁GC? 
1、使用jmap进行堆转储文件,然后放到jvisuaivm.exe(jdk自带)中观察
注意:实际开发中可以远程连接linux去观察 
     但是实际开发中还是不能去调用jmap,只能通过参数去控制
java -Xms200M  -Xmx200M  -XX:+UserParallelGC --XX:+HeapDumpOnOutOfMemoryError
xxx
--XX:+HeapDumpOnOutOfMemoryError:产生oom的时候会自动生成堆转储文件

 

2、arthas:阿里的开源的工具--影响性能10%-15%
java -jar arthas-boot.jar 

headdump(jmap):  
thread -b:显示进程中所有的线程(查找哪个线程占用的cpu多)   -b(jstack 中wating on 
condition):查找死锁

jvm(jinfo): 显示参数的信息

面试题:如果在程序不宕机的情况下修改程序的class文件?
jad  xxx:反编译
defefind xxx:在线修改class文件 
    vim xxx.java:修改文件
    javac xxx.java:反编译文件
    defefind /root/xxx.class:在线上传class文件
集群:只能用脚本批量替换

面试题:如何定位系统的系统瓶颈? (链式调用是哪个出现问题)
trace xxx(类)  xx(方法)
找到对应的方法哪个有问题

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值