服务化应用的性能、可用性的最佳实践封装,主要体现思路。
参数兼顾性能及排查问题的便捷性, 其中一些参数需要根据JDK版本适配。
详见 jvm-options.sh 和稍后出炉的文章。
CMS GC 始终对流量有一定的影响。
因此我们希望在夜半闲时,如果检测到老生代已经达到50%, 则主动进行一次GC,同理可以进行其他清理动作。
简单的定时器让应用固定在可设定的闲时(如半夜)进行清理动作。 为了避免服务的所有实例同时清理造成服务不可用,加入了随机值。
详见gc
应用重启之后的前几个调用很容易超时,其中一个原因是此时需要加载大量的类,如果要进行AOP类修改时尤其明显。
因此我们希望在应用正式接收请求前,先完成需要的类的加载。
类加载器在应用运行过程中记录它加载过的类,下次启动时读取该记录,先把这些类都加载一遍。
我们希望一个业务方法缓慢时,不会把整个线程池塞爆导致所有方法都不能响应。
但是为每个方法配置独立线程池又存在配置困难和浪费问题,因此我们希望简单实现一个线程池,在平时使用公共池,当某个方法出现问题时对其进行隔离,当问题消失时又自动恢复到公共池。