服务器优化小记
博主的网站在经理各种备案折腾后,终于算是初步上线了,但是由于访问量变大,还有TV模块我换了UI,改成了图片列表展示,所以内存还是会持续增长,并且中间挂掉过两次,这一下,我就开始觉得我上一篇文章中使用的方法不能根治,于是在后面又开始查各种资料,开始折腾服务器的优化,写下这篇文章用来记录一下
GC
- UseConcMarkSweepGC
找到了一篇博文,这里附上链接:https://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/weixin_39723544/article/details/80743074
- 配置文件的读取方式
@ConfigurationProperties标签中去除了locations选项
所以要替换成PropertySource+ConfigurationProperties标签去处理
因为写这篇文章已经隔了几天了,还有些细节可能忘了,后期想到再补上
升级后体验
在升级了boot之后,运行了一天,总体来说好像是比之前要好多了,下面附上虚拟机内存监测图
以13:30为时间节点,因为我是13:30的样子更新的项目,可看出之前内存虽然会有下降,但是总体还是增长趋势,升级后的内存变动比较明显,所以我觉得boot2.0确实在这方面有明显的改善
其他优化
其实内存占用高还有两个方面原因
第一:代码中BufferedInputStream使用后没有关闭导致了内存泄漏,这个也是我后面审查代码中发现的,漏掉了close这一步
第二:静态资源的缓存我之前给关了,因为考虑到网页更新后有浏览器缓存的问题,但是这其实是因小失大,浏览器缓存问题完全可以通过其他方法解决,比如最简单的link的静态文件后面加上随机版本号,但是关闭浏览器缓存会对服务器造成不小的负担,毕竟每次都要去服务器加载最新
小结
本篇也主要起一个记录作用,以后回顾怕忘了,当然这些优化是否真的起到了作用,也要看一段时间的运行来发现,也得亏低配服务器,才会让自己长期去关心这方面的知识
happy