JVM 工具

JVM调试与优化指南
本文介绍了JVM的调试工具,如使用jstat查看GC时间、jmap检查内存占用及对象分布,以及如何通过jstack查找CPU占用高的线程。同时,针对不同场景提供了响应时间和吞吐量优先的JVM配置建议。
  • jvm 调试工具
    • gc时间查看 jstat -gcutil pid 
    • jvm  堆内存使用情况 
    • jvm线程调试
  • jvm线上部署
    • 响应时间优先:
    • 吞吐量优先
    • 参数配置
  • 参考资料

 

 

jvm 调试工具

  1. gc时间查看 jstat -gcutil pid 

     

     S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    0.00  85.38  39.77  27.86  59.94     83    0.444     4    0.657    1.101

    S0:Heap上的Survivor space 0段 已使用空间的百分比

    S1:Heap上的Survivor space 1段已使用的空间百分比

    E:Heap上Eden space已使用的空间百分比

    O:Heap上的Old space段已使用的空间百分比

    P:Perm space已使用的空间百分比

     

  2. jvm  堆内存使用情况 

    • jmap -live:histo pid  查看jvm中生存的类对象,按照实例数和占用空间大小排序
    • jmap -heap pid 查看jvm 内存占用情况

       

  3. jvm线程调试

 

ps -mp pid -o THREAD,tid,time

nid 转16进制  printf "%x\n" tid

显示jvm每个线程cpu使用率,如果jvm占用cpu过高,据此查看 查出对应的线程ID号。然后根据jstack -F pid 或 jstack pid查看jvm运行的线程,根据thread id找到对应的线程,可以找到占用cpu的代码。

 

jvm线上部署

响应时间优先:

年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考以下数据获得:

  1. 并发垃圾收集信息

  2. 持久代并发收集次数

  3. 传统GC信息

  4. 花在年轻代和年老代回收上的时间比例

减少年轻代和年老代花费的时间,一般会提高应用的效率

吞吐量优先

一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象。

      参考资料:jvm调优案例及参数详解  

参数配置

  • args="-J-server -Xms10000M -Xmx10000M -Xmn4800M -Xss256k -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseParNewGC -XX:ParallelGCThreads=8 -XX:SurvivorRatio=2 -XX:TargetS
    urvivorRatio=50 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 -XX:CMSMaxAbortablePrecleanT
    ime=5000 -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djmagick.systemclassloader=false -DXCE_USE_DBCP -DPASSPORT_CREATE_CLUSTER"
    args="-J-server -Xms10000M -Xmx10000M -Xmn4800M -Xss256k -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseParNewGC -XX:ParallelGCThreads=8 -XX:SurvivorRatio=2 -XX:TargetS
    urvivorRatio=50 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 -XX:CMSMaxAbortablePrecleanT
    ime=5000 -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djmagick.systemclassloader=false -DXCE_USE_DBCP -DPASSPORT_CREATE_CLUSTER"

【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值