这可能是一个重复的问题,但我在搜索后无法找到答案。
我有一个通信应用程序,可以将数据发送到中央SSH服务器(TCP)。应用程序应该从文件中读取数据并发送(我使用SSH的内部Java实现)。传输效率低下(我通过FTP比较相同大小的数据传输速度,速度提高了一个数量级。我知道SSH存在开销,但我之前处理协议的经验告诉我,我们的SSH实现非常慢。)
我分析了应用程序,但我只能获得方法花费的各种CPU时间。我消除了明显的时间生长(例如,在没有MAC计算的情况下协商SSH等)但我仍然无法提高。
如何检测数据路径上的死/空闲间隙(从通过SSH封装读取文件到TCP传输)?即,如何找到在数据传递路径之外花费时间的地方,以及哪些因素会影响数据传输速率。 那里有人有建议(分析工具/方法/技术)可以用来找到吗?
答案 0 :(得分:0)
对于采样模式下的jvm分析器:必须尽可能快地采样(1 ms)并尽可能长时间运行,以改善稀有堆栈样本的捕获。此外,您应该在本地执行所有这些测试,以最大限度地减少采样数据中的阻塞nw i / o(使程序主要执行CPU工作)。
对于仪器模式下的jvm分析器:确保不要隐藏方法! Instrumentaiton比采样慢,因此许多分析器都有默认的忽略列表。通常情况下,在检测模式下进行性能分析时会出现糟糕的性能但仍然存在:一个好的工具会显示每个分析方法的调用计数。在检测模式下查看时间没有用,但您可能会根据调用计数检测代码中的荒谬。
在任何一种模式下,都要注意争用,内存使用,GC暂停......任何可以使代码独立于你漂亮代码的东西......
当然,缓冲你的溪流......