优化系列

Mysql优化

1尽可能让字段not null

2选择正确的存储引擎,myisam是表锁 写,innodb是行锁,查

3为每张表设置一个id作为其主键。这个id最好是一个int类型的

4当只需要一条数据时使用LIMIT 1.我们作为开发者,是能够知道我们需要的数据的条数的,若已经知道结果只有一条的时候,一定要使用limit 1 ,这样一来,MySQL在查询到一条数据之后,会立即停止搜索,这会带来性能上的提升

5使用缓存。缓存是解决这类问题的一把手。它既可以加快整个系统(并非数据库系统,使用缓存的时候并没有去访问数据库)的访问速度,也可以减少数据库负载的压力

6为搜索字段建索引

7垂直分割,把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的

JVM调优

1使用调优工具

2查看堆信息

有了堆信息查看方面的功能,我们一般可以顺利解决以下问题:

  --年老代年轻代大小划分是否合理

  --内存泄漏

  --垃圾回收算法设置是否合理

3线程监控

死锁检查

4查看热点

CPU热点:检查系统哪些方法占用的大量CPU时间

内存热点:检查哪些对象在系统中数量最大(一定时间内存活对象和销毁对象一起统计)

5使用快照对比,迅速发现问题

这两个东西对于系统优化很有帮助。我们可以根据找到的热点,有针对性的进行系统的瓶颈查找和进行系统优化,而不是漫无目的的进行所有代码的优化。

 

 

 

1按系统线程选好收集器的算法

         串行处理器:

         -- 适用情况:数据量比较小(100M左右),单处理器下并且对相应时间无要求的应用。

         -- 缺点:只能用于小型应用。

         并行处理器:

          -- 适用情况:“对吞吐量有高要求”,多CPU,对应用过响应时间无要求的中、大型应用。举例:后台处理、科学计算。

          -- 缺点:垃圾收集过程中应用响应时间可能加长。

         并发处理器:

          -- 适用情况:“对响应时间有高要求”,多CPU,对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。

2堆大小设置

年轻带和老年代大小

        什么情况下触发垃圾回收

        由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Scavenge GC 和 Full GC

        Scavenge GC

        一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,对Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。这种方式的GC是对年轻代的Eden区进行,不会影响到年老代。因为大部分对象都是从Eden区开始的,同时Eden区不会分配的很大,所以Eden区的GC会频繁进行。因而,一般在这里需要使用速度快、效率高的算法,使Eden区能尽快空闲出来。

         Full GC

         对整个堆进行整理,包括Young、Tenured 和 Perm。Full GC 因为需要对整个堆进行回收,所以比 Scavenge GC 要慢,因此应该尽可能减少 Full GC 的次数。在对JVM调优的过程中,很大一部分工作就是对于 Full GC 的调节。

有如下原因可能导致Full GC:
         . 年老代(Tenured)被写满

         . 持久代(Perm)被写满

         . System.gc()被显式调用

         . 上一次GC之后Heap的各域分配策略动态变化

猜你喜欢

转载自www.cnblogs.com/maplesu/p/10122862.html