论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
读Java性能权威指南(第2版)笔记22_ 操作系统工具和Jav ...
读Java性能权威指南(第2版)笔记22_ 操作系统工具和Java监控工具 ...
美丽的神话
金牌会员
|
2023-3-20 06:21:39
|
显示全部楼层
|
阅读模式
楼主
主题
872
|
帖子
872
|
积分
2616
1. 性能优化是围绕工具展开的
1.1. 最重要的工具大都是Java开发工具包(JDK)自带的
1.2. 查看应用程序性能时,首先应该考察的就是CPU时间
2. 操作系统工具
2.1. Unix系统
2.1.1. sar(System Accounting Report)及其组成工具
2.1.2. vmstat、iostat和prstat
2.2. Windows系统
2.2.1. 有图形化的资源监视器
2.2.2. 类似typeperf的命令行工具
2.3. CPU使用率
2.3.1. 用户时间
2.3.1.1. CPU执行应用程序代码的时间所占的百分比
2.3.2. 系统时间
2.3.2.1. 执行内核代码的时间所占的百分比
2.3.2.2. Windows上叫作特权时间
2.3.3. CPU空闲原因
2.3.3.1. 应用程序阻塞在同步原语上,直到锁释放后才能继续执行
2.3.3.2. 应用程序在等待某些东西
2.3.3.3. 应用程序没有事情可做
2.4. 批处理类型应用程序
2.4.1. 工作量是固定的
2.4.2. CPU空闲意味着无事可做
2.4.3. 榨干CPU的最后一点处理能力是其孜孜以求的目标
2.5. 服务器处理类型
2.5.1. CPU会因为没有工作可做而处于空闲状态
2.6. 多CPU的使用率
2.6.1. CPU在有工作可做时也可能空闲
2.6.2. 以固定大小的线程池运行各种任务
2.6.2.1. 线程任务以队列形式放置,当有线程空闲而且队列中有任务时,该线程会取出任务并执行
2.6.2.2. 不要仅仅因为有空闲的CPU可用,就认为应该增加线程池的大小以完成更多的工作
2.7. 程序无法获得CPU周期的原因
2.7.1. 锁或外部资源的瓶颈
2.8. CPU运行队列
2.8.1. Unix系统称之为运行队列
2.8.1.1. vmstat
2.8.1.2. 运行队列表示的是机器上所有的进程信息
2.8.1.3. 让Unix系统的运行队列长度小于等于CPU数
2.8.2. Windows系统称之为处理器队列
2.8.2.1. typeperf
2.8.2.2. 处理器队列长度不包含正在运行的线程的数量
2.8.2.3. 让Windows系统的处理器队列长度等于0
2.8.3. 如果运行队列在相当长的时间内过长,那就说明机器已经过载,需要想办法减少机器当前的工作量
2.8.3.1. 通过将任务移至其他机器或者优化代码
2.9. 优化代码的目的是提高CPU使用率(在较短时间内),而不是降低
2.10. 在着手深入优化应用程序之前,应该先弄清楚CPU使用率为什么低
2.11. 磁盘使用率
2.11.1. 对于不直接写入磁盘的应用程序,系统内存交换会影响它们的性能
2.11.2. 瓶颈的原因
2.11.2.1. 写入数据的效率不高(吞吐量太低)
2.11.2.2. 写的数据太多(吞吐量太高)
2.11.3. iostat
2.11.3.1. Linux
2.12. 网络使用率
2.12.1. netstat
2.12.1.1. Linux
2.12.2. typeperf
2.12.2.1. windows
2.12.3. nicstat
2.12.3.1. Unix
2.12.4. 对于本地以太网,使用率持续超过40%就说明接口饱和了
2.12.5. 瓶颈的原因
2.12.5.1. 写入数据的效率不高(吞吐量太低)
2.12.5.2. 写的数据太多(吞吐量太高)
3. Java监控工具
3.1. jcmd
3.1.1. 打印Java进程中的基本类、线程和JVM信息
3.1.2. % jcmd process_id command optional_arguments
3.2. jconsole
3.2.1. 提供JVM活动的图形化视图
3.2.2. 线程的使用
3.2.3. 类的使用
3.2.4. GC活动
3.3. jmap
3.3.1. 提供堆转储和其他JVM内存使用的信息
3.4. jinfo
3.4.1. 查看JVM系统属性
3.4.2. 允许动态设置一些系统属性
3.5. jstack
3.5.1. 转储Java进程的栈信息
3.6. jstat
3.6.1. 提供GC和类加载活动的信息
3.7. jvisualvm
3.7.1. 监控JVM的GUI工具
3.7.2. 可以分析正在运行的应用程序
3.7.3. 可以分析JVM堆转储文件
4. 基本的VM信息
4.1. 运行时间
4.1.1. JVM启动后运行的时长
4.1.2. % jcmd process_id VM.uptime
4.2. 系统属性
4.2.1. 显示了System.getProperties()中的条目
4.2.2. % jcmd process_id VM.system_properties
4.2.3. % jinfo -sysprops process_id
4.3. JVM版本
4.3.1. % jcmd process_id VM.version
4.4. JVM命令行
4.4.1. 显示了命令行直接设定的标志
4.4.2. % jcmd process_id VM.command_line
4.5. JVM调优标志
4.5.1. 应用程序中生效的调优标志
4.5.2. % jcmd process_id VM.flags [-all]
4.5.3. 显示了命令行设置的标志和JVM直接设置的一些标志
4.5.4. 加上-all命令可以列出所有的标志
5. 特定JVM平台相关的默认值
5.1. -XX:+PrintFlagsFinal命令
5.1.1.
% java other_options -XX:+PrintFlagsFinal -version
uintx InitialHeapSize := 4169431040 {product}
intx InlineSmallCode = 2000 {pd product}
复制代码
5.1.2. 输出中的冒号表示标志使用了非默认值
5.1.2.1. 标志的值直接通过命令行设定
5.1.2.2. 其他标志间接地改变了这个标志的值
5.1.2.3. JVM自动计算出了默认值
5.1.3. 没有冒号,表示当前的值是这个版本JVM的默认值
5.1.4. product表示该标志的默认设置在所有平台是统一的
5.1.5. pd product表示该标志的默认值依赖于平台
5.2. jinfo
5.2.1. 允许在应用程序执行过程中更改标志的值
5.2.2. % jinfo -flags process_id
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
美丽的神话
金牌会员
这个人很懒什么都没写!
楼主热帖
Python 实现贪心算法
Spark快速上手(3)Spark核心编程-RDD转 ...
Python自动操作 GUI 神器——PyAutoGUI ...
java中Files.mismatch方法具有什么功能 ...
哈工大软件构造Lab3(2022)
什么是超融合数据中心网络? ...
GIS前沿技术
Kubernetes——Pod对象的声明周期(Pod ...
C# net core 微信公众号导出历史文章 ...
微服务介绍
标签云
挺好的
服务器
快速回复
返回顶部
返回列表