为在远程linux机器上运行的Java应用推荐探查器?

为在远程linux机器上运行的Java应用推荐探查器?,java,profiling,Java,Profiling,我正在寻找一个可以在单独的linux设备上运行Java6应用程序(没有windows管理器)的分析器 该应用程序是一个对延迟敏感的多线程服务器,通常在几百微秒(小于1毫秒)内响应传入的网络事件。我对学习代码的热点部分和争用锁感兴趣,而对内存使用模式不太感兴趣 我不关心评测运行期间的评测开销,我希望性能会受到影响 结帐。没有人提出过同样的建议。这一款看起来功能更丰富 我已经用过其他工具好几次了。但它只是免费试用。我已经习惯了使用yourkit档案器: 你的里程数可能不同,但我喜欢,值得一看。在过

我正在寻找一个可以在单独的linux设备上运行Java6应用程序(没有windows管理器)的分析器

该应用程序是一个对延迟敏感的多线程服务器,通常在几百微秒(小于1毫秒)内响应传入的网络事件。我对学习代码的热点部分和争用锁感兴趣,而对内存使用模式不太感兴趣

我不关心评测运行期间的评测开销,我希望性能会受到影响

结帐。没有人提出过同样的建议。这一款看起来功能更丰富


我已经用过其他工具好几次了。但它只是免费试用。

我已经习惯了使用yourkit档案器:


你的里程数可能不同,但我喜欢,值得一看。在过去,我曾使用它来识别和避免锁争用,我知道它能够识别代码的热门部分(我希望任何探查器都能识别)

Yourkit非常好,只是我想说,探查器通常对亚毫秒延迟应用程序的示例不是很有用

但是,如果您还没有查看内存使用情况,那么我将从这里开始。你如何确保你最小化;对象创建、缓存未命中、上下文切换开销(来自在线程之间传递数据)?你所有的代码都预热了吗?i、 因此,您没有遇到任何解释代码

我建议您在应用程序中使用nanoTime()键执行路径来标记时间戳,以记录每个请求在关键阶段的时间,从而查看延迟最大的位置

顺便说一句:可以获得响应时间低于100微秒的Java应用程序


BTW2:白天可以减少完全GC的数量,而只有在晚上才可以使系统完全GC。通过增加eden的大小,您可能会达到这样的程度,即您也没有次要的集合。

我们已经对内存使用情况进行了相当多的研究,尽管我确信我们应该再次这样做。“我想你的意思是100微秒以下?”特德,是的,谢谢你。当CPU评测同时启用内存评测时,我发现这一点非常有用。这通过增加额外的监控开销,对CPU测量值进行加权,以突出显示分配对象的位置。这通常会产生2-3个你以前可能从未见过的优化的好地方。该页面的第二句话说,“Java VisualVM可以检索远程应用程序的监控信息,但它无法分析远程应用程序”@Ted Graham我已经更新了我的答案。添加了其他人不建议的Netbeans探查器。我还发现了一些链接,您可以使用这些链接使用visualvm进行远程评测。我将首先尝试,并相应地更新我的答案。