Java性能调优工程的几点建议《转载》
来源:互联网 发布:解手机密码软件 编辑:程序博客网 时间:2024/05/17 02:43
性能优化工程由两部分组成:性能需求分析及规划、性能结果分析。两者构成闭环,使得性能得到不断的提升。
一、性能需求分析及规划
在决定性能需求的时候,工程师们首先要问自己三个问题:
哪些会让用户开心? 哪些会让用户懊恼? 目前存在的问题需要被关注并解决吗?
接下来,需要站在用户的角度去思考QoS;将QoS标准量化为可测量的指标,即SLA服务等级协议;然后对SLA性能指标进行定义、梳理并排列优先级(吞吐量、响应时间、容量、请求足迹、CPU使用率等)。
吞吐量/率:
目标—是否可以比设定的吞吐量低?如果可以,这种状态可以持续多久?最低可以低到多少?
测量—怎样测量?(事务数/秒、消息数/秒或者两种方式)哪里测量?(客户端、服务器端或者浏览器端)
响应时间:
目标—是否可以超出设定的响应时长?如果可以,这种状态可以持续多久?最长可以达到多久?
测试—怎样测量?(取99%响应的时间计算均值、只统计某一段响应时间(5-9秒)、最差的情况或者全部)哪里测量?(客户端、服务器端或者整个环路)
容量管理:
可以接受的容量是多少?如果某个系统过载怎么办(负载均衡出现问题)?怎样测量容量?一个系统和所有系统能承受的最大容量是多少?可以承受多久?需要监测哪些指标?
二、性能结果分析
关于性能结果分析,这里只讨论Java的性能分析。分析哪些因素会影响到终端用户体验,无法达到预期的QoS;跟踪监测性能指标。
下图是一个分层情况图:
应用层生态系统:应用服务、应用服务器、数据库、生态系统中其他服务 JRE层:类加载情况、JIT编译情况、垃圾回收情况、线程情况 操作系统层:系统/内核状态、锁状态、线程状态 硬件层:内存带宽/内存吞吐量/内存占用、CPU/内核的使用、CPU缓存效率/使用/级别、处理器结构、IO状态
性能调优的执行
两种实现模式
自上而下、自下而上。
如果想从应用层面入手进行改进的话,且你是一个应用程序工程师,具备修改代码的能力,可以采用自上而下的方式。
如果想从平台层面入手进行改进的话,可采用自下而上的方式。首先你要明确平台的哪个模块是需要改进的;其次列出相关的应用、进行工作量的评估;然后再寻找恰当的工具。
四个步骤:
不论哪一种方向,均可以分为四步:第一步监控、第二步归纳、第三步分析、第四步调优和应用。
通常而言,关心的指标有以下几个。
CPU:CPU状态、内核状态、缓存命中和没有命中的次数、分支预测、流水线、条件转移、load-store的工作模式等
内存:内存使用、内存、带宽、读写状态、读操作的最大带宽、写操作的最大带宽、最大容量、与结构相关的。
JVM/GC:收集与变化相关的信息、收集一般或者并发的GC各个阶段的信息、并发工作队列和工作状态、内部队列或缓存等。
监控:
首先是从监控环节做起。
监控方式分为三种:主动(报警设定)、被动(网络分流器)、离线(日志抓取)。
可以选用的工具有三类:
第三方——VisualVM、Java Flight Recorder
JVM自带命令——PrintCompilation、PrintGCDetails(+PrintGCDateStamps)、jmap-clstats、jcmd
GC.class-stats
操作系统自带——Linux下面有mpstat、sysstat – iostat、pidstat、prstat、vmstat、dash、CPU
– Z、 cacti等;Windows下面有Performance Monitor、Task Manager、Resource Monitor、CPU-Z、cacti等
归纳和分析
接下来是归纳和分析环节。
这个时候你已经有了所有需要的信息,你需要辨识出哪些地方需要提升,分析出哪些是潜在需要改进的问题。这个环节可以使用的开源工具有两类:
第三方性能分析工具——Oracle Solaris Studio Performance
Analyzer、perftools、PAPI、Code XL、 Dtrace、Oprofile、gprof、LTTJava 程序层面——Visual VM、Netbeans Profiler、JConsole
调优
最后一步调优。JVM/GC的调优重点在于要选择对的堆、对的垃圾回收算法。首先正确划分对象的所属年代,然后只对长期存活的对象进行调优,每个虚拟机的所有GC工作线程(GC的stop-the-world现象),同一个VM中多个 GC线程来执行;看看压缩普通对象指针是否有效;大的堆也许需要使能AlwaysPretouch并且将UseLargePages设置为最佳大小。此外,在代码层面优化满足SLA目标,设置恰当的ramp-up和ramp-down,对象的年代划分和保留策略(理解LDS文件的形成),确保测量正确。
原文地址:
https://yq.aliyun.com/articles/167787?utm_content=m_28272#
- Java性能调优工程的几点建议《转载》
- Java性能调优工程的几点建议
- Java的ThreadPoolExecutor使用几点建议(转载)
- java编程中提升性能的几点建议
- Java内存优化和性能优化的几点建议
- Java内存优化和性能优化的几点建议
- Java内存优化和性能优化的几点建议
- Java内存优化和性能优化的几点建议
- Java内存优化和性能优化的几点建议
- Java内存优化和性能优化的几点建议
- Java内存优化和性能优化的几点建议
- Java内存优化和性能优化的几点建议
- Java内存优化和性能优化的几点建议
- 优化hibernate性能的几点建议
- 优化hibernate性能的几点建议
- 优化hibernate性能的几点建议
- 优化hibernate性能的几点建议
- 优化hibernate性能的几点建议
- 修改无线wifi网络名称。注册表。windows 无线属性 windows 无线 配置文件
- Table_map_log_event column types: numerical identifier and metadata
- Terrible Sets
- 狼 羊 渔夫过河问题
- 基于对抗生成网络的图像转换技术【论文笔记】
- Java性能调优工程的几点建议《转载》
- 《机器学习实战》(六)—— SVM(SMO算法)
- BZOJ 禁忌 AC自动机+概率DP+矩阵乘
- Feel Good
- mysql密码丢失找回
- PHP生成条形码
- poj 3243 扩展BSGS
- Codeforces Round #428 (Div. 2)-搜索&期望&细节-C. Journey
- C#用空格分隔并去除分割后的空格元素