《Java性能优化指南》读书笔记-JVM性能调优具体方法

选择jvm部署模式

应用在部署的时候,是单个jvm实例,仍是选择多个实例?该如何选择? 负载均衡

单个jvm实例存在的问题是单点故障。当咱们jvm实例出现故障的时候或者咱们须要重启或者部署的时候都会影响到应用的可用性,这对于互联网产品初期,对于应用可用性要求不高的应用是能够选择该模式的。 运维

多个jvm实例组成的应用集群。带来的问题有系统结构更加复杂,咱们须要配置成为自动故障转移,当一个问题出问题或者在维护的时候,还有别的jvm可以接管服务,从而不影响系统的可用性,若是咱们须要多个jvm实例同时提供服务,以增长系统的吞吐量,或者下降单个jvm实例的内存量,系统压力,能够配置成为负载均衡,而多个jvm实例又会消耗更多的系统资源,增长系统的管理成本。 jvm

所以对于部署的jvm实例数量建议是适应业务的发展逐步增长实例,不该过早部署复杂的结构,不然会带来不少运维管理上的成本。好比你要排查一个问题的时候,你查看日志因为部署了多个jvm实例,当你没法肯定在哪一个实例上的时候,则须要查看多个jvm实例,你部署的实例越多则越困难,还有你的代码版本升级还须要发布多个实例,配置文件可能又会有多份,若是你没有足够好的自动化运维管理多实例的工具的话,则你的运维成本会随着jvm实例的数量成线性增加,这种人工成本的增长将变得不可行。 工具


选择jvm运行模式

jvm有两种运行模式: 性能

Client模式特色是启动快、占用内存少、JIT编译器生产代码的速度快,可是代码的容许速度相对更慢。 测试

Server模式则提供了更加复杂的生成代码优化,所以代码的执行速度快,启动慢,占用内存更多。 优化

所以咱们在开发和测试环境上选择默认的Client模式,在生产环境上通常使用Server模式。 spa

jvm启动参数中添加-server便可开启Server模式。 操作系统

选择JVM位数

jvm分为32位和64位,增长了位数也就增长了jvm的寻址空间,让jvm支持更大的堆,具体在各操做系统平台上内存限制以下所示: 日志

有经验数据代表32位的性能要好于64位的性能,所以若是32位的内存够用的话不该该选择64位的jvm。


JVM内存配置调优


  1. 当应用初上线的时候若没法准确估算堆大小的时候则不配置堆大小,让jvm自动分配。
  2. 系统运行稳定以后,查看jvm活跃数据所占用的堆空间大小,查看年老代和永久代活跃数据在稳定运行期的空间大小。通常将-Xms和-Xmx设置为年老代活跃数据空间的3-4倍。永久代的设置-XX:PermSize及-XX:MaxPermSize应该设置为永久代活跃空间大小的1.2至1.5倍。
  3. -Xms和-Xmx通常配置成同样,固然这样会浪费一些空间,可是会避免由于Jvm堆动态扩容而引发的Full GC和jvm响应延迟。
相关文章
相关标签/搜索