Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java调试性能问题-最佳实践_Java_Performance_Debugging - Fatal编程技术网

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

java调试性能问题-最佳实践,java,performance,debugging,Java,Performance,Debugging,我只是想知道,是否有一系列步骤可以作为调试性能问题的指南,以确定哪些步骤花费的时间最多。有很多工具,从日志开始,计时方法,负载测试工具,计时数据库查询等等 考虑到有这么多不同的事情,是否有一个列表的事情,是在列表的顶部 如果是这样的话,请允许我这样的东西并没有真正针对Java的,对于任何语言/框架/工具,您都应该遵循相同的模式: 在你改变一件事之前先衡量一下你的表现 假设可能的原因/修复 实施变革 衡量变更后的绩效以与#1进行比较 重复直到高兴为止 对于这样的东西,Java并没有什么特别之处,对

我只是想知道,是否有一系列步骤可以作为调试性能问题的指南,以确定哪些步骤花费的时间最多。有很多工具,从日志开始,计时方法,负载测试工具,计时数据库查询等等

考虑到有这么多不同的事情,是否有一个列表的事情,是在列表的顶部


如果是这样的话,请允许我

这样的东西并没有真正针对Java的,对于任何语言/框架/工具,您都应该遵循相同的模式:

  • 在你改变一件事之前先衡量一下你的表现
  • 假设可能的原因/修复
  • 实施变革
  • 衡量变更后的绩效以与#1进行比较
  • 重复直到高兴为止

  • 对于这样的东西,Java并没有什么特别之处,对于任何语言/框架/工具,您都应该遵循相同的模式:

  • 在你改变一件事之前先衡量一下你的表现
  • 假设可能的原因/修复
  • 实施变革
  • 衡量变更后的绩效以与#1进行比较
  • 重复直到高兴为止
  • 检查机器是否有足够的RAM。分页将杀死应用程序
  • 检查应用程序花费在垃圾收集上的时间比例。高比例意味着您将受益于堆或GC调优
  • 在探查器中运行应用程序,并对其进行测试,监视CPU使用情况。寻找那些CPU花费所有时间的方法。一个好的探查器可以让您在无法控制的第三方代码中累积花费的时间,允许您识别自己代码中的热点
  • 对于应用程序中最热门的点,请确定时间花在哪里。都是I/O吗?计算?多线程同步?对象分配/解除分配?复杂度为n平方或更差的算法?还有别的吗
  • 一次处理一个热点,每次你改变一些东西时,测量并计算出你是否真的改进了什么。回滚无效的更改,并确定问题已转移到何处(如果更改有效)
  • 检查机器是否有足够的RAM。分页将杀死应用程序
  • 检查应用程序花费在垃圾收集上的时间比例。高比例意味着您将受益于堆或GC调优
  • 在探查器中运行应用程序,并对其进行测试,监视CPU使用情况。寻找那些CPU花费所有时间的方法。一个好的探查器可以让您在无法控制的第三方代码中累积花费的时间,允许您识别自己代码中的热点
  • 对于应用程序中最热门的点,请确定时间花在哪里。都是I/O吗?计算?多线程同步?对象分配/解除分配?复杂度为n平方或更差的算法?还有别的吗
  • 一次处理一个热点,每次你改变一些东西时,测量并计算出你是否真的改进了什么。回滚无效的更改,并确定问题已转移到何处(如果更改有效)

  • 任何一种性能调整的第一步也是最重要的一步都是确定什么是慢的,并测量它有多慢。在大多数情况下(特别是在性能问题很容易重现的情况下),探查器是最有效的工具,因为它将为您提供执行时间的详细统计信息,并将其分解为单个方法,无需手动为程序插入指令。

    任何性能调整的第一步也是最重要的一步都是确定什么是慢的,并测量它有多慢。在大多数情况下(特别是在性能问题很容易重现的情况下),探查器是最有效的工具,因为它将为您提供执行时间的详细统计信息,将其分解为单个方法,而无需手动插入程序

  • 测量
  • 把苹果和苹果比较一下。不要在繁忙的子网上运行测试(尤其不要试图通过说“我希望情况是现实的”来证明这种可笑的做法的合理性)
  • 测量-在每个离散步骤捕获时间戳
  • 请注意,尽管存在关系,但吞吐量和响应时间不是一回事
  • 在你做出改变之后。。。测量永远不要对自己说,这似乎更好。你知道你是怎么知道的吗?比较测量值1和测量值2
  • 一次测试一件事。不要创建一个试图模拟现实条件的uber性能套件。这太多了,你会让自己不知所措。测试消息大小。测试并发性。隔离试验
  • 一旦您开始隔离瓶颈,接下来的步骤将变得更加自然,微调测试将变得更加容易,此时您可以选择连接一个探查器来调查GC/CPU性能和内存消耗(VisualVM很好而且免费)。重点是像二进制搜索一样处理性能问题。从测量每件事开始,不断地细分问题,直到问题暴露出来

  • 测量
  • 把苹果和苹果比较一下。不要在繁忙的子网上运行测试(尤其不要试图通过说“我希望情况是现实的”来证明这种可笑的做法的合理性)
  • 测量-在每个离散步骤捕获时间戳
  • 请注意,尽管存在关系,但吞吐量和响应时间不是一回事
  • 在你做出改变之后。。。测量永远不要对自己说,这似乎更好。你知道你是怎么知道的吗?比较测量值1和测量值2
  • 一次测试一件事。不要创建一个试图模拟