Java识别延迟源



我正在开发一个概念上相当简单的java进程。它是一个单一的线程,不断地从各种来源获取数据,并根据这些数据做出决策。我最近注意到两条日志行之间有一个可疑的延迟,我预计这两条日志之间不会发生太多处理。(几十毫秒的延迟与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");

最新更新