概述:
JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少。而是要根据实际的应用程序的系统需求,实际的活跃内存等确定。
正文:

JVM调优工作流程

整个调优过程是不断重复的一个迭代,后面的步骤有可能影响前面的配置,可能需要重新调优。

应用程序的系统需求

确定应用程序的系统需求是性能调优的基础,后面的调优都会依赖这个要求。一个应用不会无休止地调优下去。

1.可用性

2.可管理性

3.启动时间

4.吞吐量

TPS: 每秒多少次事务

QPS: 每秒多少次查询

5.延迟

比如关键请求必须60ms完成响应

6.内存占用

选择JVM的部署模式

单JVM部署模式:可以用更多的物理内存
多JVM部署模式:减少了单点,不过分布式部署也解决了这个问题

JVM运行模式

32位JVM:

内存空间限制为4G,关键是还进一步受限于操作系统,Windows大约1.5G,Linux大约3G。

64位JVM:

对象指针的长度从32位变为64位,导致CPU高速缓存可以缓存的指针变少,降低了缓存效率。可以开启指针压缩,解决这个问题,指针压缩在堆小于等于26GB时,性能最好。JVM会根据堆大小自动开启这个。

垃圾收集调优基础

基本原则

1. 每次MinorGC都尽可能多地收集垃圾对象。可以减少FullGC的频率,因为FullGC的持续时间总是最长;

2. 处理吞吐量和延迟问题时,GC能使用的内存越大,垃圾收集的效果越好,应用越流畅;

3. 在这三个属性(吞吐量、延迟、内存占用)中任意选择两个进行JVM垃圾收集器调优,因为三个属性肯定不能同时满足;

GC日志

GC日志是收集调优所需信息的最好途径,下面是一次MinorGC的日志,FullGC的日志和这个类似:

5.483: [GC (Allocation Failure)
[PSYoungGen: 142650K->16873K(145408K)]
168504K->48298K(189440K), 0.0769590 secs]
[Times: user=0.22 sys=0.00, real=0.08 secs]

1). 各属性说明

5.483:是JVM启动到现在的时间戳

Allocation Failure:Eden区分配内存失败,导致GC

142650K(新生代回收前大小)->16873K(新生代回收后大小)(145408K(新生代总大小))

168504K(回收前堆占用大小)->48298K(回收后堆占用大小)(189440K(堆总大小))

Times:user(GC非操作系统指令占用的CPU时间)sys(GC操作系统调用占用的CPU时间)real(实际占用的CPU时间)

2). 计算老年代方法

根据上面这个MinorGC日志,可以推算出老年代在GC前后的大小。

GC前:168504K(回收前堆占用大小)-142650K(新生代回收前大小)=25854K

GC后:48298K(回收后堆占用大小)-16873K(新生代回收后大小)=31425K

3). GC日志命令行选项

-XX:+PrintGCTimeStamps

打印此次垃圾回收距离jvm开始运行的所耗时间

-XX:+PrintGCDeatils

打印垃圾回收的细节信息

-Xloggc:<filename>

将垃圾回收信息输出到指定文件

-XX:+PrintGCDateStamps

需要打印日历形式的时间戳选项

-XX:+PrintGCApplicationStoppedTime

-XX:+PrintGCApplicationConcurrentTime

打印应用程序由于执行VM安全点操作而阻塞的时间以及两个安全点操作之间应用程序的运行时间

-XX:+PrintSafepointStatistics

可以将垃圾回收的安全点与其他的安全点区分开

Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述的更多相关文章

  1. Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量

    吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标. 吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序. CMS吞吐调优 CMS包 ...

  2. Java性能优化权威指南-读书笔记(四)-JVM性能调优-延迟

    延迟指服务器处理一个请求所花费的时间,单位一般是ms.s. 本文主要讲降低延迟可以做的服务器端JVM优化. JVM延迟优化 新生代 新生代大小决定了应用平均延迟 如果平均Minor GC持续时间大于应 ...

  3. Java性能优化权威指南-读书笔记(一)-操作系统性能监控工具

    一:CPU 1. 用户态CPU是指执行应用程序代码的时间占总CPU时间的百分比. 系统态CPU是指应用执行操作系统调用的时间占总CPU时间的百分比.系统态CPU高意味着共享资源有竞争或者I/O设备之间 ...

  4. Java性能优化权威指南-读书笔记(三)-JVM性能调优-内存占用

    新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full ...

  5. [原创]Java性能优化权威指南读书思维导图

    [原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt    Binu John 译者: 柳飞 ...

  6. [原创]Java性能优化权威指南读书思维导图4

    [原创]Java性能优化权威指南读书思维导图4

  7. [原创]Java性能优化权威指南读书思维导图3

    [原创]Java性能优化权威指南读书思维导图3

  8. [原创]Java性能优化权威指南读书思维导图2

    [原创]Java性能优化权威指南读书思维导图2

  9. 读书笔记系列之java性能优化权威指南 一 第一章

    主题:java性能优化权威指南 pdf 版本:英文版 Java Performance Tuning 忽略:(0~24页)Performance+Acknowledge 1.Strategies, A ...

随机推荐

  1. BZOJ-1008 越狱 数论快速幂

    1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 6192 Solved: 2636 [Submit][Status] ...

  2. jquery中的prop和attr比较区别

    近期和一同事争执prop和attr的区别,也查了很多,同事说它只是特性和固有属性的区别,但是我也查到了一些其他的,故此,来总结一下吧! 1.固有属性和特别属性 对于HTML元素本身就带有的固有属性,在 ...

  3. 洛谷P1755 斐波那契的拆分

    题目背景 无 题目描述 已知任意一个正整数都可以拆分为若干个斐波纳契数,现在,让你求出n的拆分方法 输入输出格式 输入格式: 一个数t,表示有t组数据 接下来t行,每行一个数n(如题) 输出格式: t ...

  4. ExtJS入门教程05,grid的异步加载数据

    上一篇演示了extjs grid的基本用法,并加载了本地数据.今天我们将演示如何加载异步数据. 所谓异步,就是通过ajax的方式将服务器端的数据加载到我们的grid中.为了提供数据,我们先定义一个数据 ...

  5. 关于Java单例

    参考资料:http://blog.csdn.net/haoel/article/details/4028232 public class SingletonTest implements Runnab ...

  6. linux安全加固(2)

    目录:1.BIOS2.SSH安全3.禁用telnet4.禁用代码编译5.ProFTP6.TCPwrappers7.创建一个SU组8.root通知9.history安全10.欢迎信息11.禁用所有特殊账 ...

  7. tcpdump wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍

    tcpdump wireshark 实用过滤表达式(针对ip.协议.端口.长度和内容) 实例介绍 标签: 网络tcpdst工具windowslinux 2012-05-15 18:12 3777人阅读 ...

  8. JavaScript简易缩放程序

    一.前言: 上一篇随笔中已经把拖动程序完成了,这篇主要把缩放程序完成,后面合并后可以做成一个图片裁剪的功能 简易缩放程序DEMO:http://jsfiddle.net/UN99R/ 限制缩放程序DE ...

  9. poj1279.Inlay Cutters(模拟 + 枚举)

    Inlay Cutters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2367   Accepted: 995 Desc ...

  10. Minimum Depth of Binary Tree

    二叉树的最小深度 采用递归的方式求左右结点的高度,注意判断一个结点是否是叶子结点(左右子树都不存大). int minDepth(TreeNode *root) { return minDepth(r ...