小白教程

 找回密码
 立即注册
查看: 9522|回复: 5

如何统计一段Java业务代码的CPU执行时间和IO执行时间

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2021-4-28 20:06:16 | 显示全部楼层 |阅读模式

问题
业务代码中,总的时间消耗包含CPU时间 和 IO 时间。
如何通过代码或者其他工具,统计任意一段业务代码的CPU时间和IO时间。

例如针对上面图中的business方法,可以获得CPU累计消耗时间109ms和剩余的IO累计时间消耗。
假设业务方法是不透明的,只能调用,那么调用方如何统计目标方法的这2个时间消耗。
(可以使用代码,或者工具)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-2 17:23:52 | 显示全部楼层
可以考虑使用springAop,分别计算business方法耗时(IO+CPU), HttpClientUitl.get方法耗时(IO) ,至于如何将这两个如何绑定到一次处理
可以考虑使用ThreadLocal设置个数字,用于标识 business和HttpClientUtil.get属于一次处理
回复

使用道具 举报

0

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2021-5-8 10:46:39 | 显示全部楼层
所以最终是如何处理?
不对,业务方法是不透明的,你去调用,那就只有请求总时间了。。
不透明了,你怎么还知道有io,cpu的操作。。
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-13 22:20:21 | 显示全部楼层
没办法统计,system.current也是需要消耗性能的,并不是无损操作
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-19 02:44:27 | 显示全部楼层
楼主的这个需求,是外行人提的吗?
你现在使用的是Java程序,但是,需求,怎么看着像C/C++程序的需求啊?

统计 CPU 和 IO 的操作时长,这个是操作系统级的需求,一般由偏低级的语言才能好实现。
Java语言是运行在虚拟机之上的程序,统计 操作系统之下的 CPU 和 IO 操作(偏硬件方面),是很困难的事情。

Java 语言可以统计的,一般都是函数的执行时长(使用动态代理技术),楼主可以考虑这个方向,统计函数的调用时长吧,这个还靠谱点。
当然,函数的执行时间,很可能无法区分 CPU时长 和 IO时长。
计算 CPU的使用时长 是一个很复杂的过程,同理,IO时长也是相对会比较复杂,总之,越想精确一些,算法就越麻烦,你要对操作系统,进程调度之类的东西非常了解才有可能实现。
回复

使用道具 举报

0

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2021-5-26 09:13:58 | 显示全部楼层
这个确实很复杂,需要精通内核底层的很多知识,如果有能有一个这样的工具就好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 12:31 , Processed in 0.026928 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表