Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述
概述:
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性能调优-概述的更多相关文章
- Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量
吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标. 吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序. CMS吞吐调优 CMS包 ...
- Java性能优化权威指南-读书笔记(四)-JVM性能调优-延迟
延迟指服务器处理一个请求所花费的时间,单位一般是ms.s. 本文主要讲降低延迟可以做的服务器端JVM优化. JVM延迟优化 新生代 新生代大小决定了应用平均延迟 如果平均Minor GC持续时间大于应 ...
- Java性能优化权威指南-读书笔记(一)-操作系统性能监控工具
一:CPU 1. 用户态CPU是指执行应用程序代码的时间占总CPU时间的百分比. 系统态CPU是指应用执行操作系统调用的时间占总CPU时间的百分比.系统态CPU高意味着共享资源有竞争或者I/O设备之间 ...
- Java性能优化权威指南-读书笔记(三)-JVM性能调优-内存占用
新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full ...
- [原创]Java性能优化权威指南读书思维导图
[原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt Binu John 译者: 柳飞 ...
- [原创]Java性能优化权威指南读书思维导图4
[原创]Java性能优化权威指南读书思维导图4
- [原创]Java性能优化权威指南读书思维导图3
[原创]Java性能优化权威指南读书思维导图3
- [原创]Java性能优化权威指南读书思维导图2
[原创]Java性能优化权威指南读书思维导图2
- 读书笔记系列之java性能优化权威指南 一 第一章
主题:java性能优化权威指南 pdf 版本:英文版 Java Performance Tuning 忽略:(0~24页)Performance+Acknowledge 1.Strategies, A ...
随机推荐
- 解决SSH无密码登陆后又需要密码登陆
主节点CentOS_Master 从节点Slave_1. 我想着可能是 /etc/ssh/sshd_config下的那个公钥文件路径不对,看了下home/hxsyl/.ssh/authorized_k ...
- 【poj3177】 Redundant Paths
http://poj.org/problem?id=3177 (题目链接) 题意 给出一个n个节点m条边的无向图,求最少连几条边使图中没有桥. Solution 我们可以发现,用最少的边使得图中没有桥 ...
- Knockout Grid - Loading Remote Data
http://wijmo.com/grid-with-knockout-viewmodel-loading-remote-data/ We were hearing quite a few peopl ...
- ci为什么必须得写构造函数
构造函数 如果要在你的任意控制器中使用构造函数的话,那么必须在里面加入下面这行代码: parent::__construct(); 这行代码的必要性在于,你此处的构造函数会覆盖掉这个父控制器类中的构造 ...
- Chord算法
转自:http://blog.csdn.net/wangxiaoqin00007/article/details/7374833 虽然网上搜索CHord,一搜一大堆,但大多讲得不太清楚明白.今天发现一 ...
- Jquery 鼠标事件解析
1 mouseover与mousemove的区别: mouseover是当鼠标移动到对象时产生,只产生一次,这时如果继续在对象上移动,不会再产生mouseover事件,而是mousemove事件,mo ...
- mouseover和mouseout闪烁问题
在父级元素上注册了mouseover和mouseout事件后,当鼠标移动到子元素上时,会触发父级的mouseout和mouseover事件,反复触发,形成闪烁. 原因: 一种是由于冒泡,子级的mous ...
- B/S C/S架构的界面测试
网站是B/S架构的典型,从做网站的有限经验来整理一下B/S测试的基本要点,并把它与C/S进行区分. 与C/S相比,以下4个测试是除了常用测试外还要注意的: (1)链接测试 (2)表单测试 (3)脚本测 ...
- (转)MFC中获得各个类的指针/句柄 ID的总结
http://www.cnblogs.com/ylhome/archive/2009/10/06/1578478.html 一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard ...
- vssver2.scc 文件是干啥的?
idcdpi源文件下的tools下有一个文件 vssver2.scc vssver2.scc是什么文件 首先,先来个名词解释:Microsoft Visual Source Safe是美 ...