java - Java 识别延迟源
问题描述
我正在研究一个概念上相当简单的java进程。它是一个单一的线程,不断地从各种来源获取数据并根据这些数据做出决策。我最近注意到 2 个日志行之间存在可疑延迟,我不希望在 2 个日志行之间发生太多处理。(数十英里的延迟与 1 到几英里的预期)
由于这种可疑的延迟并不总是存在,我的第一个想法是我在最大限度地减少垃圾收集的需求方面做得很差,导致 JVM 在不需要的时间暂停执行。
虽然我仍然相信我在这方面做得不好,但这似乎不是原因。我添加了以下 JVM 参数:-Xlog:gc*=info,safepoint::timemillis,level,tags
并且我在可疑的日志行之间没有看到任何停顿。这些 JVM 参数不会显示其他 JVM 暂停吗?
无论如何,java专业人士有什么建议可以尝试有效地追踪这种延迟的来源吗?我可以使用任何(最好是免费的)工具来监控和了解正在发生的事情?
环境信息:Linux 3.10,java 11。有问题的进程在一个独立的核心上运行,除此之外我没有做太多的调整。
解决方案
取决于信息的来源,可能是获取信息的延迟。就像它必须连接到服务器一样,那么服务器的连接和查询可能会引入这种延迟。或者您访问磁盘的速度太快,并且您受到驱动器速度的限制。除此之外,我不确定。也许添加其中一些。
long time = System.currentTimeMillis();
foo();
System.err.println(System.currentTimeMillis() - time + "ms");
推荐阅读
- r - 为什么 R 中的 DGLM 无法识别我的对象?
- jquery - 为什么当我在同一行中编辑另一个单元格时,此数据表单元格会恢复为旧值?
- python - 用转移概率模型拟合 HMM
- python - 如何在保留信息的同时加入多个事件的表?
- c - 我可以在 C 上的同一个函数上使用 pthreads 吗?
- qt - QPaintDevice::height(): 如何获得最大值。屏幕高度?
- sql - 在 FROM 子句中使用派生表进行慢速查询
- java - Java JPA 无法添加或更新子行:外键约束失败
- r - 输入的键都不是有效键 - R
- python - 有没有办法确定一张图片是否比另一张更随机,python