02-结果分析

来源:互联网 发布:酷派手机数据自动开启 编辑:程序博客网 时间:2024/05/01 13:59

1.    LR监控计数器

内存Memory: 内存使用情况可能是系统性能中最重要的因素。如果系统“页交换”频繁,说明内存不足。“页交换”是使用称为“页面”的单位,将固定大小的代码和数据块从 RAM 移动到磁盘的过程,其目的是为了释放内存空间。尽管某些页交换使 Windows 2000 能够使用比实际更多的内存,也是可以接受的,但频繁的页交换将降低系统性能。减少页交换将显著提高系统响应速度。要监视内存不足的状况,从以下的对象计数器开始:

Ø  Available Mbytes:可用物理内存数. 如果AvailableMbytes的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。

Ø   page/sec: 表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以4k就得到由此引起的硬盘数据流量)。Pages/sec 的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。

Ø  page read/sec:页的硬故障,page/sec的子集,为了解析对内存的引用,必须读取页文件的次数。阈值为>5. 越低越好。大数值表示磁盘读而不是缓存读。由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足与导致页交换的磁盘瓶径混淆。因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器: Physical Disk\ % Disk Time Physical Disk\ Avg.Disk Queue Length 例如,包括 PageReads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。 要确定过多的页交换对磁盘活动的影响,请将 Physical Disk\Avg.Disk sec/Transfer 和 Memory\ Pages/sec 计数器的值增大数倍。如果这些计数器的计数结果超过了 0.1,那么页交换将花费百分之十以上的磁盘访问时间。如果长时间发生这种情况,那么您可能需要更多的内存。

Ø  Page Faults/sec:每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page/sec只表明数据不能在内存的指定工作集中立即使用。

Ø  Cache Bytes:文件系统缓存(File System Cache),默认情况下为50%的可用物理内存。如IIS5.0运行内存不够时,它会自动整理缓存。需要关注该计数器的趋势变化 如果怀疑有内存泄露,请监视 Memory\ AvailableBytes 和 Memory\Committed Bytes,以观察内存行为,并监视您认为可能在泄露内存的进程的 Process\Private Bytes、Process\Working Set 和Process\Handle Count。如果怀疑是内核模式进程导致了泄露,则还应该监视 Memory\Pool Nonpaged Bytes、Memory\ Pool Nonpaged Allocs 和 Process(process_name)\ Pool Nonpaged Bytes。

Ø   Pages per second :每秒钟检索的页数。该数字应少于每秒一页。

 

处理器Process: 监视“处理器”和“系统”对象计数器可以提供关于处理器使用的有价值的信息,帮助您决定是否存在瓶颈。

Ø  %Processor Time:如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。

Ø   %User Time:表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。

Ø  %Privileged Time:(CPU内核时间)是在特权模式下处理线程执行代码所花时间的百分比。如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。另外设置Tempdb in RAM,减低"max async IO","max lazy writer IO"等措施都会降低该值。此外,跟踪计算机的服务器工作队列当前长度的 Server WorkQueues\ Queue Length 计数器会显示出处理器瓶颈。队列长度持续大于 4 则表示可能出现处理器拥塞。此计数器是特定时间的值,而不是一段时间的平均值。

Ø  % DPC Time:越低越好。在多处理器系统中,如果这个值大于50%并且Processor:%Processor Time非常高,加入一个网卡可能会提高性能,提供的网络已经不饱和

Thread

Ø   ContextSwitches/sec: (实例化inetinfo 和dllhost 进程) 如果你决定要增加线程字节池的大小,你应该监视这三个计数器(包括上面的一个)。增加线程数可能会增加上下文切换次数,这样性能不会上升反而会下降。如果十个实例的上下文切换值非常高,就应该减小线程字节池的大小

system

Ø  Processor Queue Length  系统处理器队列,一般不能大于处理器数量+1

Ø  Context Switches/sec  每秒上下文切换,一般在10000到20000之间。

硬盘Physical Disk:

Ø  %Disk Time %:指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。如果三个计数器都比较大,那么硬盘不是瓶颈。如果只有%Disk Time比较大,另外两个都比较适中,硬盘可能会是瓶颈。在记录该计数器之前,请在Windows 2000 的命令行窗口中运行diskperf -yD。若数值持续超过80%,则可能是内存泄漏。

Ø  Avg.Disk Queue Length:指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。该值应不超过磁盘数的1.5~2 倍。要提高性能,可增加磁盘。注意:一个Raid Disk实际有多个磁盘。

Ø  Average Disk Read/Write Queue Length:指读取(写入)请求(列队)的平均数。

Ø  Disk Reads(Writes)/s: 物理磁盘上每秒钟磁盘读、写的次数。两者相加,应小于磁盘设备最大容量。

Ø  Average Disksec/Read: 指以秒计算的在此盘上读取数据的所需平均时间。

Ø  Average Disk sec/Transfer:指以秒计算的在此盘上写入数据的所需平均时间。

Network Interface:  

Ø  Bytes Total/sec :为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较,大于带宽的70%时说明网上负担过重。

Ø  Output Queue Length 等待网卡工作队列的长度,长时间大于2说明网卡负担过重。

自定义监控ORACLE计数器

数据高速缓存区命中率       (监控 SGA 的命中率)命中率应大于0.90最好

 SELECTround(1-SUM(PHYSICAL_READS)/(SUM(DB_BLOCK_GETS) + SUM(CONSISTENT_GETS)), 4) *100 FROM (SELECT CASE WHEN NAME='physical reads' THEN VALUE ENDPHYSICAL_READS,CASE WHEN NAME = 'db block gets' THEN VALUE ENDDB_BLOCK_GETS,CASE WHEN NAME = 'consistent gets' THEN VALUE END CONSISTENT_GETSFROM V$SYSSTAT WHERE Name IN ('physical reads','db block gets','consistentgets'))

库快存命中率       该计数器返回当前库快存命中率

SELECT 100*((sum(pins-reloads))/sum(pins))from v$librarycache       

共享区库缓存区命中率       (监控 SGA 中共享缓存区的命中率)命中率应大于0.99

Select round(sum(pins-reloads)/sum(pins) *100, 2) from v$librarycache

监控 SGA 中字典缓冲区的命中率       (共享区字典缓存区命中率)命中率应大于0.85

Selectround(sum(gets-getmisses-usage-fixed)/sum(gets) * 100, 2) from v$rowcache       

检测回滚段的争用       小于1%

select round(sum(waits)/sum(gets) * 100, 2)from v$rollstat       

检测回滚段收缩次数       

select sum(shrinks) from v$rollstat,v$rollname where v$rollstat.usn =v$rollname.usn      

监控表空间的 I/O读总数       

select sum(f.phyrds) pyr from v$filestat f,dba_data_files df where f.file# =df.file_id       

监控表空间的 I/O块读总数       

select sum(f.phyblkrd) pbr from v$filestatf, dba_data_files df where f.file# = df.file_id

监控表空间的 I/O写总数

select sum(f.phywrts) pyw from v$filestatf, dba_data_files df where f.file# =df.file_id       

监控表空间的 I/O块写总数       监控表空间的 I/O

select sum(f.phyblkwrt) pbw from v$filestatf, dba_data_files df where f.file# =df.file_id       

监控 SGA 中重做日志缓存区的命中率       应该小于1%

SELECT Decode(immediate_gets+immediate_misses,0,0,immediate_misses/(immediate_gets+immediate_misses)*100)ratio2 FROM v$latch WHERE name IN ('redocopy')       

监控内存和硬盘的排序比率       最好使它小于 10%

select round(sum(case when name='sorts(disk)' then value else 0 end) / sum(case when name='sorts (memory)' then valueelse 0 end)*100,2) from (SELECT  name, value FROM v$sysstatWHERE name IN ('sorts (memory)', 'sorts (disk)')) 

 

 

2.    LR结果分析

Ø  测试报告生成

演示

Ø  分析器导出数据及路径查看

演示

Ø  分析器全局设置

演示

Ø  添加图表

演示

Ø  细化图表数据:过滤、分组、下钻

演示

Ø  平均事务响应时间图

测试场景运行期间的每一秒内事务执行所用的平均时间,通过它可以分析测试场景运行期间应用系统的性能走向。例:随着测试时间的变化,系统处理事务的速度开始逐渐变慢,这说明应用系统随着投产时间的变化,整体性能将会有下降的趋势

Ø  每秒事务数量图

“每秒通过事务数/TPS”显示在场景运行的每一秒钟,每个事务通过、失败以及停止的数量,使考查系统性能的一个重要参数。通过它可以确定系统在任何给定时刻的时间事务负载。分析TPS主要是看曲线的性能走向。       将它与平均事务响应时间进行对比,可以分析事务数目对执行时间的影响。例:当压力加大时,点击率/TPS曲线如果变化缓慢或者有平坦的趋势,很有可能是服务器开始出现瓶颈

Ø  每秒事务总数量图

“每秒通过事务总数”显示在场景运行时,在每一秒内通过的事务总数、失败的事务总署以及停止的事务总数

事务概要图

负载下事务响应时间图:随用户数量增加事务响应时间图

事务响应时间百分比图

事务响应时间分布图

Ø  利用合并图进行图表的联合分析

叠加法:共享X轴,各自的Y轴标尺显示在新图表两边

平铺法:

关联法:Y轴变新图X轴,合并图Y轴为Y轴

Ø  吞吐量图:与平均事务响应时间图进行比较,获取吞吐量对事务性能的影响

Ø  每秒点击次数图:与平均事务响应时间图进行比较,获取点击次数对事务性能的影响

Ø  页面调试图(controller中启用):

网页调试图

页面组件细分图:查找哪些组件耗费更多的时间

页面下载时间细分图:显示网页中不同元素的下载时间,同时还可按照下载过程把时间进行分解,用不同的颜色来显示DNS解析时间、建立连接时间、第一次缓冲时间等各自所占比例。

 

3.    系统调优

1.        硬件问题;

2.        网络问题;

3.        应用服务器、数据库服务器配置问题;

4.        中间件、数据库配置;

5.        程序代码、数据库脚本问题;

6.        系统架构问题。

 

Ø  JVM内存配置

set JAVA_OPTS=%JAVA_OPTS%

-server -Xmx1550M -Xms1550M -Xmn420M-Xss512k -XX:PermSize=128M -XX:MaxPermSize=128M

 -XX:SurvivorRatio=8 -XX:ParallelGCThreads=8-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:LargePageSizeInBytes=64m-XX:+CMSParallelRemarkEnabled

-XX:+CMSScavengeBeforeRemark-XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly

-XX:CMSInitiatingOccupancyFraction=65-XX:CMSFullGCsBeforeCompaction=2 -XX:+UseCMSCompactAtFullCollection-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

-verbose:gc -XX:+PrintGCDetails-XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime

-XX:+PrintGCApplicationConcurrentTime  -XX:+PrintHeapAtGC -Xloggc:dggc.log

-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=java_pid.hprof

 

CMSInitiatingOccupancyFraction<=((Xmx-Xmn)-(Xmn-Xmn/( SurvivorRatio+2)))/(Xmx-Xmn)*100


JVM管理的内存叫堆;在32Bit操作系统上有4G的限制,一般来说Windows下为2G,而Linux 下为3G;64Bit的就没有这个限制。
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64但小于1G。
JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4但小于1G。
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制,可以由-XX:MinHeapFreeRatio=指定。
默认空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制,可以由-XX:MaxHeapFreeRatio=指定。
服务器一般设置-Xms、-Xmx相等以避免在每次GC后调整堆的大小,

 

GC日志是先决的数据参考和最终验证:

-XX:+PrintGCDetails-XX:+PrintGCTimeStamps(GC发生的时间) -XX:+PrintGCApplicationStoppedTime(GC消耗了多少时间)-XX:+PrintGCApplicationConcurrentTime(GC之间运行了多少时间)

收集器选择:

CMS收集器:暂停时间优先

   配置参数:-XX:+UseConcMarkSweepGC
   已默认无需配置的参数:-XX:+UseParNewGC(Parallel收集新生代) -XX:+CMSPermGenSweepingEnabled(CMS收集持久代) -XX:UseCMSCompactAtFullCollection(full gc时压缩年老代)

   初始效果:1g堆内存的新生代约60m,minor gc约5-20毫秒,full gc约130毫秒。

Parallel收集器:吞吐量优先

    配置参数: -XX:+UseParallelGC-XX:+UseParallelOldGC(Parallel收集年老代,从JDK6.0开始支持)

    已默认无需配置的参数:-XX:+UseAdaptiveSizePolicy(动态调整新生代大小)

    初始效果:1g堆内存的新生代约90-110m(动态调整),minor gc约5-20毫秒,full gc有无UseParallelOldGC 参数分别为1.3/1.1秒,差别不大。

    另外-XX:MaxGCPauseMillis=100 设置minor gc的期望最大时间,JVM会以此来调整新生代的大小,但在此测试环境中对象死的太快,此参数作用不大。

将GC日志输出到文件:不同JDK设置的参数不同,参考JDK官方文档
   SUN:-Xloggc:filename (例如:-Xloggc:D:/gc.log)
   IBM:-Xverbosegc:file=filename 或 -Xverbosegclog:filename
   HP :-Xverbosegc=filename  

如何设置Java启动参数:

  Tomcat:在catalina.bat的“set JAVA_OPTS=%JAVA_OPTS% ”后设置
   WebLogic:在startWebLogic.cmd的“%JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% ”后设置
   WebSphere:进入管理控制台,应用服务器->进程定义->Java虚拟机高级定义

GC的类型:

Minor Collection:GC用较高的频率对young进行扫描和回收,采用复制算法。
Major Collection:同时对Young和Old进行内存收集,也叫Full GC;因为成本关系对Old的检查回收频率要比Young低很多,采用标记清除/标记整理算法。可以通过调用代码System.gc()引发major collection,使用-XX:+DisableExplicitGC禁止它,或设为CMS并发 -XX:+ExplicitGCInvokesConcurrent。

jvm中GC执行的三种方式,即串行、并行、并发:
串行(SerialGC)是jvm的默认GC方式,一般适用于小型应用和单处理器,算法比较简单,GC效率也较高,但可能会给应用带来停顿;
并行(ParallelGC)是指GC运行时,对应用程序运行没有影响,GC和app两者的线程在并发执行,这样可以最大限度不影响app的运行;
并发(ConcMarkSweepGC)是指多个线程并发执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大;

性能调优参数列表:
参数及其默认值 描述
-XX:LargePageSizeInBytes=4m 设置用于Java堆的大页面尺寸
-XX:MaxHeapFreeRatio=70 GC后java堆中空闲量占的最大比例
-XX:MaxNewSize=size 新生成对象能占用内存的最大值
-XX:MaxPermSize=64m 老生代对象能占用内存的最大值
-XX:MinHeapFreeRatio=40 GC后java堆中空闲量占的最小比例
-XX:NewRatio=2 新生代内存容量与老生代内存容量的比例
-XX:NewSize=2.125m 新生代对象生成时占用内存的默认值
-XX:ReservedCodeCacheSize=32m 保留代码占用的内存容量
-XX:ThreadStackSize=512 设置线程栈大小,若为0则使用系统默认值
-XX:+UseLargePages 使用大页面内存

调试参数列表:

参数及其默认值 描述
-XX:-CITime 打印消耗在JIT编译的时间
-XX:ErrorFile=./hs_err_pid<pid>.log 保存错误日志或者数据到文件中
-XX:-ExtendedDTraceProbes 开启solaris特有的dtrace探针
-XX:HeapDumpPath=./java_pid<pid>.hprof 指定导出堆信息时的路径或文件名
-XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息
-XX:OnError="<cmd args>;<cmd args>" 出现致命ERROR之后运行自定义命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" 当首次遭遇OOM时执行自定义命令
-XX:-PrintClassHistogram 遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同
-XX:-PrintConcurrentLocks 遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同
-XX:-PrintCommandLineFlags 打印在命令行中出现过的标记
-XX:-PrintCompilation 当一个方法被编译时打印相关信息
-XX:-PrintGC 每次GC时打印相关信息
-XX:-PrintGC Details 每次GC时打印详细信息
-XX:-PrintGCTimeStamps 打印每次GC的时间戳
-XX:-TraceClassLoading 跟踪类的加载信息
-XX:-TraceClassLoadingPreorder 跟踪被引用到的所有类的加载信息
-XX:-TraceClassResolution 跟踪常量池
-XX:-TraceClassUnloading 跟踪类的卸载信息
-XX:-TraceLoaderConstraints 跟踪类加载器约束的相关信息

0 0
原创粉丝点击