09.JVM调优&tomcat调优

  • Java程序性能优化:

  • 性能优化总结

    • 性能优化是一个长期的过程,没有终止

    • 首先预生产环境的性能测试,主要测试并发数对系统的CPU,JVM内存,FullGC的次数执行时间,以及tomcat连接池参数设置,得到JVM选择最好的启动参数,以及tomcat当前并发下最好的连接池

      主要采用:Jmeter压力测试+JMX动态调整连接池参数查看JVM垃圾回收情况以及JVM内存的情况,然后不断的调整参数。以求压力测试的响应时间,失败率达到可接受的范围即可

    • 后期项目中的性能瓶颈期优化:

      • 主要问题,项目的FullGC次数增多,卡顿,用户体验差等

      • 此时多数因为系统的用户增多,并发数已经超出预期的范围

      • 根据80*20原则,估算并发数大约在系统访问用户数量的8%-12%,重新根据进行压力测试

        ,然后调整tomcat连接池相关参数,对于JVM不建议再去进行相关的参数,此时可以针对项目采用某些技术去解决,如 redis缓存,静态化技术,限流技术等待

  • tomcat优化
    • 主要可以减少不必要的配置,比如rest风格的服务,没有必要配置jsp和静态资源加载的相关信息
    • tomcat线程池的优化,此时需要根据并发不断压力测试的调整
  • 主要优化还是程序自身的算法优化
    • 在finally块中关闭stream
    • 使用'system.arraycopy()'来复制数组
    • 实例内变量的getter/setter方法变成”final
    • 不要在循环中调用synchronized()方法
    • 将try/catch块移出循环
    • 常量字符串用'String'代替'Stringbuffer',大量字符串拼接用StringBuffer
    • 不要在循环体中实例化变量
    • 尽可能的使用栈变量
    • 尽量减少对变量的重复计算;比如for(int i=0;i<list.size())
    • 尽量采用懒加载的策略,即在需要的时候才创建
    • 如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度
    • 乘法和除法使用移位操作
    • 尽量在合适的场合使用单例
    • 及时清除不再需要的会话
    • 使用同步代码块替代同步方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容