不知道如何找到为什么我的方法调用的频率不够高,我的 Java 应用程序


这可能是

一个重复的问题,但我在搜索后无法找到答案。

我有一个将数据发送到中央SSH服务器(TCP(的通信应用程序。该应用程序应该从文件中读取数据并发送(我使用SSH的内部Java实现(。 传输效率低下(我比较了通过FTP进行相同大小的数据传输,速度快了一个数量级。 我知道SSH有开销,但我以前处理协议的经验告诉我,我们的SSH实现非常慢(。

我分析了应用程序,但我只能获得方法花费的各种 CPU 时间百分比。我消除了明显的时间消耗(例如,在没有MAC计算的情况下协商SSH等(,但我仍然无法提高。

如何检测数据路径上的死/空闲间隙(从通过SSH封装读取文件到TCP传输(? 即,我如何找到在我的数据交付路径之外花费时间的地方,以及影响数据交付速率的地方。有没有人有建议(哪些分析工具/方法/技术(可以用来找到?

对于采样模式下的 jvm 探查器:您必须尽可能快地采样 (1 ms( 并尽可能长时间地运行,以改进对稀有堆栈帧样本的捕获。此外,您应该在本地执行所有这些测试,以最大程度地减少采样数据中的阻塞 nw i/o(让程序主要执行 CPU 工作(。

对于检测模式下的 jvm 探查器:确保不要隐藏方法!检测比采样慢,因此许多探查器都有默认的忽略列表。通常,在检测模式下进行性能分析时,性能会很差,但请坚持下去:一个好的工具将显示每个分析方法的调用计数。在检测模式下查看时间没有用,但您可能会根据调用计数检测代码中的荒谬之处。

在任一模式下,请注意争用、内存使用情况、GC 暂停...任何可以独立于您漂亮的代码扼杀代码的东西......

当然,缓冲您的流...

最新更新