Skip to content

Latest commit

 

History

History

vjstar

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

1. 概述

服务化应用的性能、可用性的最佳实践封装,主要体现思路。

2. 实践列表

2.1 JVM启动参数

参数兼顾性能及排查问题的便捷性, 其中一些参数需要根据JDK版本适配。

详见 jvm-options.sh 和稍后出炉的文章。

2.2 闲时GC

CMS GC 始终对流量有一定的影响。

因此我们希望在夜半闲时,如果检测到老生代已经达到50%, 则主动进行一次GC,同理可以进行其他清理动作。

简单的定时器让应用固定在可设定的闲时(如半夜)进行清理动作。 为了避免服务的所有实例同时清理造成服务不可用,加入了随机值。

详见gc

2.3 类的预加载

应用重启之后的前几个调用很容易超时,其中一个原因是此时需要加载大量的类,如果要进行AOP类修改时尤其明显。

因此我们希望在应用正式接收请求前,先完成需要的类的加载。

类加载器在应用运行过程中记录它加载过的类,下次启动时读取该记录,先把这些类都加载一遍。

2.4 动态隔离线程池

我们希望一个业务方法缓慢时,不会把整个线程池塞爆导致所有方法都不能响应。

但是为每个方法配置独立线程池又存在配置困难和浪费问题,因此我们希望简单实现一个线程池,在平时使用公共池,当某个方法出现问题时对其进行隔离,当问题消失时又自动恢复到公共池。