java调试性能问题 - 最佳实践

时间:2011-06-15 23:14:43

标签: java performance debugging

只是想知道是否有一个步骤列表,我可以将其用作调试性能问题的指南,以确定最耗费时间的内容。从记录,计时方法,负载测试工具,计时数据库查询等开始,有无数的工具......

考虑到有很多不同的东西,列表顶部是否有列表。

若是,请让我

4 个答案:

答案 0 :(得分:5)

  1. 检查机器是否有足够的RAM。分页会杀死应用程序。
  2. 检查应用程序在垃圾回收中花费的时间比例。高比例意味着您将从堆或GC调整中受益。
  3. 在分析器中运行应用程序并完成其步调,监控CPU使用情况。寻找CPU花费所有时间的那些方法。一个好的分析器可以让你花费在你无法控制的第三方代码上花费的时间,让你能够识别自己代码中的热点。
  4. 对于应用程序中的热门热点,请确定花费时间的地方。这都是I / O吗?计算?多线程同步?对象分配/解除分配?具有n平方或更差复杂度的差算法?还有别的吗?
  5. 一次处理一个热点,每次更改某些内容,测量并确定您是否真正改进了任何内容。如果更改有效,请回滚无效的更改并找出问题所在的位置。

答案 1 :(得分:3)

对于类似这样的东西,没有什么特别针对Java,任何语言/框架/工具都应遵循相同的模式:

  1. 在更改单个内容之前测量性能
  2. 假设可能的原因/解决方案
  3. 实施更改
  4. 在更改后测量性能以与#1
  5. 进行比较
  6. 重复直到开心

答案 2 :(得分:3)

  1. 测量
  2. MEASURE !!!!!
  3. 将苹果与苹果进行比较。不要在繁忙的子网上运行测试(特别是不要试图通过说 - “我希望情况切合实际”来证明这种荒谬的做法是正确的。)
  4. 测量 - 在每个离散步骤捕获时间戳。
  5. 请注意,虽然存在关系,但吞吐量和响应时间并不相同
  6. 在你做出改变之后...... MEASURE !!!!!永远不要对自己说,似乎更好。你知道你怎么知道它更好吗?将测量1与测量2进行比较
  7. 一次测试一件事。不要创建一个试图模拟现实条件的超级性能套件。太多了,你让自己不堪重负。测试邮件大小。测试并发性。单独测试
  8. 一旦你开始孤立瓶颈,接下来的步骤将开始感觉更自然,微调你的测试会变得更容易,你可以选择连接一个探查器来调查GC / CPU性能和内存消耗( VisualVM很好而且免费。)重点是处理二进制搜索等性能问题。首先测量所有内容,然后不断将问题细分给它揭示自己。

答案 3 :(得分:1)

任何类型的性能调整中的第一步也是最重要的一步是识别什么是慢速,并测量它的速度有多慢。在大多数情况下(特别是如果性能问题很容易重现), profiler 是最有效的工具,因为它会为您提供有关执行时间的详细统计信息,将其分解为单个方法,无需手动检测程序。