【问题标题】:Large Number of Exceptions thrown in JavaJava中抛出的大量异常
【发布时间】:2012-07-18 03:53:26
【问题描述】:

我们被要求监控正在运行的批处理作业的性能。批处理作业在 Jeus Application Server 上运行,并且在 48 核 HP UX 服务器上运行。有问题的批处理作业有大约 1500 个线程。发生最多的异常是 NumberFormatException。批处理作业不会终止,它会继续运行。

在使用 HPJmeter 进行监控时,我注意到有数千个异常被抛出。 NumberFormat 只是较常见的一种,但还有更多。我有以下问题:

  • 这是否表明设计/编码不佳?
  • 应用服务器通常会处理很多异常而不上报吗?
  • 这会影响正在运行的应用程序的性能吗? (在大约 45 分钟的运行时间里,抛出了大约 11000 个异常)

谢谢, 阿迪亚。

【问题讨论】:

    标签: java exception-handling application-server


    【解决方案1】:
    1. 是的,特别是因为开发人员还没有经历过并且至少将这些包含在自定义异常中。否则,它们应该作为警告输出到日志文件。日志库的存在是有原因的。
    2. 如果异常是真实的,则可能是由于代码被破坏或数据集更改。我建议至少跟踪一项工作以了解错误发生的原因。我之前曾在某项工作中处理过 PB 级的数据,我明白这有多令人沮丧,但如果该工作的输出随后被消耗并给您带来问题,那么您以后将不得不付出代价。
    3. 如果引发异常的计算路径相对较轻,那么与任何计算相比,来自异常的 IO 和函数调用将花费很多。但是,鉴于您在 45 分钟内只有 11k 异常,即每秒 4 次。这当然不好,但假设没有其他应用程序也执行大量 IO,那么这不会严重阻碍您的工作。

    【讨论】:

    • 我们确实有很多批处理作业同时运行。有问题的服务器也像数据库服务器(oracle)。因此,大量的 IO 同时发生。不过感谢您的解释。
    【解决方案2】:

    对此的明显反应将是

    1. 您的批处理作业试图做的很多事情很可能没有完成。
    2. 但你永远不知道,一个疯狂的开发人员会尝试在 catch 块中修复问题,然后吃掉异常(假阴性)
    3. 如果代码一直运行到现在并且刚刚开始抛出异常,则可能是您的数据集已更改或开发人员抛出了正确的异常。

    【讨论】:

    • 批处理作业运行良好。当我注意到这一点时,我们被要求进行一些性能监控。它正在消耗 CPU 资源。这些例外都不是展示塞。不过感谢您的回复。
    • 所以是的,批处理作业正在尝试做所有这些废话,但没有结果,所以你在浪费 CPU 周期。相反,只需在 ui 上捕获错误。
    猜你喜欢
    • 2012-07-23
    • 2016-08-10
    • 2022-11-25
    • 2011-02-07
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多