《Java性能优化权威指南》读书笔记

第1章 策略、方法、方法论

略…

第2章 操作系统性能监控

2.1 定义

性能监控、性能分析及性能调优

  • 性能监控,非侵入方式收集或查看应用程序性能数据的活动
  • 性能分析,以侵入方式收集运行性能数据的活动
  • 性能调优,一种为改善应用响应性能吞吐量而更改参数(Tune-able)、源代码或属性配置的活动

2.2 CPU使用率

带着下面这个目标/问题去读

如何让多处理器、多核系统上运行的多线程应用有效地利用CPU周期

发散的联想下:
1)消耗很多的CPU就意味着程序的性能或扩展性提高了?或者达到了最高?

大多数操作系统的CPU使用率分为用户态CPU使用率系统态CPU使用率,理想情况下,应用达到最高性能和扩展性时,此时系统态CPU使用率应该是0%,所以尽可能降低系统态CPU使用率是提高应用性能的目标之一

2.2.1 命令行监控CPU使用率

《Java性能优化权威指南》读书笔记_第1张图片
《Java性能优化权威指南》读书笔记_第2张图片

2.3 CPU调度程序运行队列

系统运行队列长度等于虚拟处理器个数时,用户不会明显感觉到性能下降。(此处虚拟处理器的个数指系统硬件线程的个数,也是Java API Runtime.availableProcessors()返回值)
当运行队列长度达到虚拟处理器个数的4倍或更多时,系统的响应应该就非常迟缓了。

一般性指导原则:

如果在很长一段时间里,运行队列的长度达到处理器个数的3~4倍或更高,则需要立即引起注意或采取行动。

如何采取行动,作者给出了两个方面的思路:
1)增加CPU以分担负载或减少处理器的负载量,这种方式从根本上减少了每个虚拟处理器上的活动线程数,从而减少了运行队列中的轻量级进程数。
2)分析系统中运行的应用,Java程序员可以用更高效的算法和数据结构得到更好的性能。

2.3.1 监控CPU调度程序运行队列:Windows

\System\Processor Queue Length(在Performance Monitor的Add Counters中添加计数器System > Processor Queue Length)监控运行队列长度。

2.3.2 监控CPU调度程序运行队列:Linux

《Java性能优化权威指南》读书笔记_第3张图片

2.4 内存使用率

系统内存相关属性,例如:页调度、页交换、加锁、线程迁移中的让步式和抢占式上下文切换。

PS:以上,作者只是提到了这些名词,看下后续章节有没有展开描述。

系统在进行页交换或使用虚拟内存时,会对应用的响应性和吞吐量造成较大影响。

JVM垃圾收集器在系统进行页交换时的性能也很差,由于要回收不可达对象所占空间,JVM需要访问大量的内存,而如果Java堆的一部分被置换出去,此时就必须先置换进内存以便垃圾收集器扫描存活对象,这会增加GC持续的时间(STW)。

2.4.1 监控内存利用率:Windows

《Java性能优化权威指南》读书笔记_第4张图片
《Java性能优化权威指南》读书笔记_第5张图片

2.4.2 监控内存利用率:Linux

《Java性能优化权威指南》读书笔记_第6张图片

第三章

你可能感兴趣的:(读书笔记)