在第一次测试中,20000个请求的响应结果:
一、第一种优化方案,让product服务占更多的内存。
二、考虑影响性能的原因有哪些?
??数据库、应用程序(代码)、中间件(nginx、网关、tomcat)、网络IO、和操作系统方面。
??首先考虑自己的应用程序是CPU密集型还是IO密集型。
????CPU密集型: 可以增加多台服务器来并行处理请求。
????IO密集型: 换固态硬盘、加内存条、使用各种缓存技术。
三、调优出发点:JVM
??fullGC要比YoungGC慢100倍因此要避免进行fullGC。
?? 因此在调优时,需要观察JVM中堆的新生代和老年代的变化。
四、使用jvisualvm监控应用堆内存和CPU的使用情况
1、
也可以通过安装visualGC这个插件来监控垃圾回收的过程
2、不能忽略中间件对性能的影响:中间件越多性能损失越大
??对于用户发出的请求,是通过nginx转到gateway再负载均衡后分配到对应的微服务模块 (里边包含着tomcat) 上。
可以通过增加中间件的吞吐量,以及购买更好的网线进行中间传输。
3、业务方面:
DB:? MySQL优化,通过给指定的查询键添加索引。
模板的渲染速度:? 开启thymeleaf 的缓存。
静态资源: ?通过采用nginx来保存静态资源,使得浏览器发出的静态资源的请求,让nginx直接处理,减轻tomcat的压力。
业务逻辑: ?业务逻辑对于性能的影响较大,例如在查询三级分类时,可以首先查出所有的分类信息,减少对数据库的访问,进而提升性能。
jvm调优方面: ?通过调节堆内存的大小 -Xmx1024m表示最大内存为1024m,-Xms1024m表示初始内存为1024m,-Xmn512m表示新生代的大小为512m。 尽量降低fullGC,因为fullGC的耗时是youngGC的100倍。