性能优化及微服务

(1)制约程序性能的根源

常用的性能评估指标

并发:同一时间多少请求访问

TPS:transaction per second,一秒钟可以处理多少个transaction,写操作

QPS:query per second,一秒钟可以处理多少个查询,读操作

耗时:端到端耗时,服务端耗时,应用程序耗时

95线:95%的请求落在什么范围内

99线:99%的请求落在什么范围内

<1>网络<2>应用本身<3>数据库<4>缓存<5>消息<6>操作系统<7>内存<8>IO<9>CPU

(2)将应用程序优化到极致

JVM内存结构

gc算法:

<1>标记清除算法,优点:简单,缺点:随便化

<2>复制算法,

<3>分代算法,

内存大小的取舍

<1>扩大内存可以更少的触发gc

<2>内存太大触发gc时候的停顿时间会长

吞吐量=花费在非gc停顿上的工作时间/总时间    至少需要优化到95%

-xms启动JVM时堆内存的大小

-xmx堆内存最大限制

两者需要设置的一样防止扩缩容

-XX:NewSize年轻代大小

-XX:MaxNewSize最大年轻代大小

两者需要设置的一样防止扩缩容

GC优化

将进入老年代的对象减少到最低

yang gc:40ms内

major gc: stop the world时间总和和100ms内

full gc:尽可能少,且时间在1s内

CMS Full GC条件

CMS调优

G1参数调优

调优Best pratise

日志优化

同步日志/异步日志

日志归档时间

日志大小拆分

池化策略

idle数量

(2)提高数据库的读写性能

单机数据库

<1>查询优化

主键查询   千万条记录1-10ms

唯一索引    千万条记录10-100ms

非唯一索引   千万条记录100-1000ms

无索引   百万条记录  1000ms

<2>批量写

for each  (insert into tables values  ())

execute once  insert into tables values  ()

 

<3>索引优化

<4>innodb相关优化

读写分离

一主多从

读库延迟问题处理

主从切换处理

 

分库分表

垂直拆分

水平拆分

多主多从

(3)应对缓存问题

穿透:数据不存在,解决:尝试设置无效标志位代表数据不存在

击穿:

雪崩

缓存脏数据问题

多级缓存

(4)如何优化网络瓶颈

网络瓶颈的根源:

公网:带宽,出口调用量

内网:带宽,出口调用量

解决:

分散数据

压缩

 

 


版权声明:本文为heting717原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。