JVM性能调优实践总结

How to Properly Plan JVM Performance Tuning

调优:使用尽可能少的资源(内存,多核cpu等等)完成需求的目标(程序稳定运行),【调优目的】,找出系统不能稳定运行的瓶颈(bottleneck),优化【调优过程】

jvm调优需要的知识:

  • 了解jvm运行时的内存管理过程,gc过程
  • 熟悉jvm监控工具(jvisualvm图像监控,jstack打印线程调用栈(找到死锁,cpu占用高的代码行),jmap触发full gc日志),日志等等,找出系统瓶颈
  • 熟悉jvm 参数,(一般就是设置堆大小(Xms,Xmx,Xmn),gc回收器选择(+Use***),打印gc日志(-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:<filename>))

调优过程:

  • 先在jvm默认参数运行程序,使用压测工具,运行一段时间,使程序趋于稳定
  • 使用监控工具,查看系统稳定性,内存占用,gc日志【建立基准,对比后面的加参数后的效果】
  • 加jvm参数,重复上述过程,对比建立的基准,不断修改参数,重复这个过程

调优过程主要看的一些参数:

  • 默认jvm参数下,程序稳定后需要占用的内存,heap内存大小
  • Minor GC的频率与时长(增加Xmn),full gc的频率与时长(尤其是系统压力最大时的时长)

参数记法:

  • Xms,【startup】,程序启动堆内存初始大小
  • Xmx,【max】,最大堆内存
  • Xmn,【new】,堆内新生代的大小,【老生代的大小计算】:-Xmx减去-Xmn
  • Xss ,【stack】,每个java线程的栈大小,太大,内存一定,生成的最大线程数就小,太小,容易栈溢出
发布了259 篇原创文章 · 获赞 118 · 访问量 187万+

猜你喜欢

转载自blog.csdn.net/c5113620/article/details/103363723
今日推荐