服务器优化小记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sqm1995/article/details/89706626

服务器优化小记

博主的网站在经理各种备案折腾后,终于算是初步上线了,但是由于访问量变大,还有TV模块我换了UI,改成了图片列表展示,所以内存还是会持续增长,并且中间挂掉过两次,这一下,我就开始觉得我上一篇文章中使用的方法不能根治,于是在后面又开始查各种资料,开始折腾服务器的优化,写下这篇文章用来记录一下

GC

  • UseConcMarkSweepGC

找到了一篇博文,这里附上链接:https://blog.csdn.net/wd2014610/article/details/82182617
其中有一个指定使用的垃圾收集器-XX:+UseConcMarkSweepGC的参数很引人瞩目,于是网上搜了一些有关资料
https://www.cnblogs.com/woshimrf/p/jvm-garbage.html
发现修改这个参数好像可以弥补jvm自身GC的不足,于是博主测试了一下
之前api的内存运行大概三天的时间,会飙升到22%左右,在加了这个参数后,发现貌似只有微量的改善,大概在降低了2%-3%左右,所以我觉得这个是否能改善还有待研究

  • spring-boot2.0
    因为博主使用的是比较老的boot版本(1.4),所以有想过是不是boot也会影响内存飙升,于是百度搜索关键字“spring-boot内存运行增长”,结果没想到还真有遇到同样情况的人,附上一个文章:https://blog.csdn.net/ace_1949/article/details/88016234
    其中有说道boot1.0的版本是有这方面的不足,在2.0版本中得到了改善,毕竟要亲测后才可以得知是否正确,正好项目的boot版 本也实在太老了,就开始着手升级boot

spring-boot 1.X升级到2.X

博主是从1.4.0升级到2.0.5,其中也有不少地方的配置需要改变,以下记录一下改动地方:

  • spring cloud
    首先cloud的版本要对应上boot 的版本
Spring Boot Spring Cloud
1.2.x Angel
1.3.x Brixton
1.4.x Camden
1.5.x Dalston、Edgware
2.0.x Finchley

所以博主这里是Finchley.RELEASE的版本,下面贴出几个不同配置的地方
旧版:

       <!--旧版eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
       <!--旧版本ribbon-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <!--旧版本feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>




新版:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
``<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>`
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

然后在application里面修改一下相关标签的包路径

  • redis

2.0版本中redis的配置变了,具体可参考这边文章,照着修改一下就行了
https://blog.csdn.net/weixin_39723544/article/details/80743074

  • 配置文件的读取方式
    @ConfigurationProperties标签中去除了locations选项
    所以要替换成PropertySource+ConfigurationProperties标签去处理

因为写这篇文章已经隔了几天了,还有些细节可能忘了,后期想到再补上

升级后体验

在升级了boot之后,运行了一天,总体来说好像是比之前要好多了,下面附上虚拟机内存监测图

在这里插入图片描述
以13:30为时间节点,因为我是13:30的样子更新的项目,可看出之前内存虽然会有下降,但是总体还是增长趋势,升级后的内存变动比较明显,所以我觉得boot2.0确实在这方面有明显的改善

其他优化

其实内存占用高还有两个方面原因
第一:代码中BufferedInputStream使用后没有关闭导致了内存泄漏,这个也是我后面审查代码中发现的,漏掉了close这一步
第二:静态资源的缓存我之前给关了,因为考虑到网页更新后有浏览器缓存的问题,但是这其实是因小失大,浏览器缓存问题完全可以通过其他方法解决,比如最简单的link的静态文件后面加上随机版本号,但是关闭浏览器缓存会对服务器造成不小的负担,毕竟每次都要去服务器加载最新

小结

本篇也主要起一个记录作用,以后回顾怕忘了,当然这些优化是否真的起到了作用,也要看一段时间的运行来发现,也得亏低配服务器,才会让自己长期去关心这方面的知识

happy

展开阅读全文

没有更多推荐了,返回首页