java - Zing 上的异步分析器开销
问题描述
我们的团队正在使用 HdrHistograms 监控我们的应用程序的延迟。当我将异步分析器附加到它时,所有百分位数都会急剧增加。
操作系统:Red Hat Enterprise Linux 8.1 版(Ootpa)
JVM:11.0.8-zing_20.08.2.0-b2-product-linux-X86_64
如果我使用标志 -i 1000 -t 附加探查器会发生这种情况:
如果我使用标志 -i 100000 -t 附加探查器会发生这种情况:
降低采样频率显然会降低开销,但仍然很大。我有两个问题:
- 除了降低采样频率之外,还有其他方法可以减少分析开销吗?也许有一些神奇的内核/JVM标志?
- 这种开销是否会严重扭曲配置文件本身?
谢谢
解决方案
分析间隔以纳秒为单位。您可以明确指定单位,例如-i 10ms
. 在您的情况下,-i 1000
这意味着 1000 纳秒,这不是一个合理的采样间隔:该过程只会进行连续采样而不是有用的工作 - 当然,结果配置文件不会反映真实情况。从默认间隔 (10ms) 开始,只有在绝对需要时才减少它。
我已经解释了这个答案的合理范围:
至于分析间隔,10 ns 大约是 20-50 个 cpu 指令。以这样的速度取样实际上是不可能的。该过程只会花费所有时间在探查器中。
cpu 模式下的默认采样间隔为 10ms。这种选择对于生产中的分析来说已经足够好了:对于一个普通的应用程序来说,分析开销可以忽略不计,而样本的数量足以收集一个有意义的配置文件。
1ms 间隔通常适用于基准测试和在短时间内分析实际应用程序。较低的间隔很少有用——也许,仅用于捕获一小段运行代码的配置文件。
推荐阅读
- ios - 斯威夫特 | 使用 HSL 颜色空间而不是标准 HSB/HSV
- c++ - C++ DLL 类导出,编译器“优化”虚拟调用
- php - Woo-commerce 评论不适用于单个产品页面
- firebase - Firebase 电话身份验证每个手机号码的每日限制
- python - MapReduce 统计出现的行数
- javascript - 从 axios 发送到 API Controller 时,Object 上的值为 null。如何解决?
- vue.js - vue cli 如何在 index.html 中创建自定义块和挂钩?
- javascript - 如何修改正则表达式以限制字符数最少 8 到最多 20
- java - 怎么计算!构造一个算法,允许您输入一个 4 位整数并计算第一位和最后一位数字的总和
- ruby-on-rails - 通过关系在 has_many 上的 ActiveRecord::InvalidForeignKey