java项目增大之后的瓶颈和调优经验分享

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

传统企业和一般小公司平时工作可能更多地是一些增删改查的需求,业务要求对框架和技术并没有很高的要求。当项目用户开始增大,这个时候数据就会越来越大,请求量会越来越大,这个时候项目需要做什么改动来适配这些需求呢?根据最近自己生产环境的一些调优经验下面就来介绍一下当用户量增大时需要考虑的一些瓶颈和技术要求。

一、数据库瓶颈

数据库的瓶颈现在是应用面临的最大瓶颈,不管你服务器cpu多好,项目代码优化得多么好,交给数据库的请求如果返回得慢了,那么整个请求的时间还是减不下去,用户体验极差。下面说几点数据库方面的优化:

1.数据量太大:阿里规范手册里写的是500万数据的表就需要考虑分库分表了,分库分表的方案有多种,现阶段都是根据第三方组件来分,对操作数据库的操作方是无感知的还是当做一个表处理。核心就是按某些分库策略把之前一个大表的数据尽可能地均匀分布到不同的库,以达到把数据库请求的压力分散到各个服务器。具体的方案不细说,一些开源流行的包括shardingjdbc(就是一个第三方jar包),mycat,还有一些付费的。
读写分离也是一种很好的分散数据库压力的方式。
2.sql调优:不管项目大与小,sql调优是一个合格程序员该有的素养。一个效率低下的sql甚至会拖垮一个应用。mysql里是可以加慢sql记录的,一些项目里也可以通过日志记录sql的执行时间,可以把sql执行分级,找出执行慢的sql,接着分析是否有更好的替换方案。分析sql就要使用执行计划了,sql调优关键在于是否用好索引,索引也分多种,唯一索引、联合索引等,并不是越多越好,索引不能超过4、5个以上。执行计划里会显示扫描表的行数,如果表比较大又没用到索引造成全表扫描会很慢。具体的案例和sql会在后续章节介绍

二、代码优化

1.jvm

大家知道java的内存回收是jvm自己开了线程在做的,循环里产生了大量的对象的引用使用完没有清空或者读入内存数据太多都是会造成内存溢出,本质上就是需要用的内存空间大过了jvm向服务器申请的内存上限,对应的jvm配置为xmx。xms则为初始化内存。jdk提供了一个程序可以实时监控jvm的内存、cpu的运行状况。能看到新生代、老年代占用的大小和,分析程序使用内存的峰值。找到对应的代码进行优化。如果想实时看到每个对象占用的空间还可以使用神器jprofiler。

2.效率

这个需要平时的积累,写出更加高效规范的代码,这里推荐一本规范书籍《代码整洁之道》。举几个例子,循环里很大的for循环里,循环的次数要先计算出来,防止每次遍历都去计算。循环里的对象初始化尽可能得复用,减少空间占用。字符串需要拼接的使用springbuilder的append方法,string的+拼接会产生大量的字符串对象。为了节省cpu的资源提高效率,写出复杂度低通俗易懂的代码是程序员应该追求的。

总结

还有很多经验上想说的,在后续文章进行补充。希望喜欢的给一个赞支持一下!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值