接口性能优化建议

1. 影响性能的因素

        影响性能的因素可能包括数据库操作、应用程序、中间件(tomcat,nginx)、网络和操作系统等,不管是哪些方面,先想好程序是cpu密集型还是IO密集型。

  • cpu密集型:大量计算、排序、过滤等场景 ,可通过升级服务器,增加cpu,增加机器数量来解决。
  • io密集型:大量的读写操作。可通过缓存技术、加固态硬盘来解决
            

2. Jmeter压测接口性能

  • 1.下载并使用压力测试工具 apache-jmeter-5.3
    点击查看Jmeter使用教程!
    建立线程组,模拟高并发请求访问接口,根据汇总报告和聚合报告推测接口性能
    如果Jmeter出现响应乱码,可以在Http请求上添加 BeanShell 后置处理程序,并输入脚本:prev.setDataEncoding("utf-8");即可正常显示!
    在这里插入图片描述
  • 2.配合用jdk自带的工具jvisualvm查看某个服务的堆栈情况
    在cmd窗口输入jvisualvm即可打开应用,并下载插件Visual GC 查看
    GC情况。
    在这里插入图片描述
    通过此图可查看堆内存中的GC情况。及时调高堆内存。
            

3. 接口性能优化方案

  • 提高日志的打印等级
  • 数据库字段建立索引
  • 优化业务逻辑
  • 优化访问db时的操作(可以一次性查询某张表的全部数据,在用代码对数据分割重组,避免多次访问数据库)
  • 动静分离(静态资源全部交给nginx,动态数据通过访问接口获得)
  • 使用缓存,把热点数据放入redis
  • 频繁GC也会增加请求时间,根据压测结果,适当调整分配足够的内存
    在这里插入图片描述
    Xmx:最小内存 Xms:最大内存 Xmn:新生代内存

        

4. jvm调优

        
①:JVM出现连续的FullGC该怎么办?

        FullGC有很多个步骤,有些步骤需要暂停所有的应用线程,在这个过程中JVM是无法处理用户的请求的。JVM会使用所有的CPU来做垃圾回收,因此CPU的利用率会非常高。所以一般是非常不希望应用中出现FullGC,更别说是连续的FullGC了。连续的FullGC会导致以下问题:

  • 1.CPU利用率飙升
  • 2.由于应用暂停导致应用的响应时间变长,这会影响服务的可用性和用户体验。

②:什么原因导致了连续的FullGC?

        导致连续的FullGC主要只有一个原因:JVM的堆内存不够用或者是Perm、Metaspace内存不够用,说明应用需要比你分配的内存更多的内存。通俗地说就是小马拉大车。所以JVM必须要努力的去清理垃圾来给存活的对象分配空间。

你可能会想,我的应用已经好好的跑了很长时间了,为什么忽然就发生连续的FullGC了?这是个好问题,可能是因为以下原因:

  • 可能是自从上次调优JVM的内存以后,应用的流量忽然变大了!可能是业务量增加了,用户数量变多了。
  • 在业务峰值期间应用创建了比平时更多的对象,可能你并没有对峰值时候的应用内存做调优,或者是说应用峰值时候的流量变大了。

③:如何来解决连续的FullGC?

主要有以下几个方法:

  • 1.增加JVM的堆内存。
    • 因为连续的FullGC主要是由于内存不足引起的,增加JVM的堆内存可以解决这个问题。比如之前给应用分配的是2.5G的堆内存,现在增加到3G看能否解决问题,通过给JVM传递-Xmx参数可以设置JVM的最大堆内存。-Xmx3G就设置了JVM的最大堆内存是3G。如果还是没解决问题,一点点的继续增加JVM的堆内存。不要给JVM分配过多的堆内存,因为这会增加GC的停顿时间。
  • 2.增加Perm或者Metaspace内存
    • 如果Perm区或者是Metaspace太小也会导致连续的FullGC,这种情况下就需要增大Perm或者是Metaspace的内存。
  • 3.增加更多的JVM实例
    • 另一个解决此问题的办法就是增加更多的JVM实例。当有更多的JVM实例以后,应用流量就会分摊到这些实例上,单个JVM承担的流量就降低了,那么它上面需要创建的对象随之也变少了,此时可能就不会有连续的FullGC了。
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值