java - 在生产环境中分析 Web 应用程序的性能成本

标签 java language-agnostic profiling production-environment visualvm

我正在尝试解决大型复杂的 tomcat java web 应用程序的性能问题。目前最大的问题是,有时内存使用量会激增,应用程序会变得无响应。我已经修复了我可以使用日志分析器和日志文件的贝叶斯分析修复的所有问题。我正在考虑在生产 tomcat 服务器上运行分析器。

致敏感读者的注意事项:

我知道有些人可能会觉得分析生产应用程序的概念令人反感。请放心,我已经用尽了大部分其他选项。我考虑这个的原因是我没有资源在我的测试服务器上完全复制我们的生产设置,而且我无法在我的测试服务器上引起感兴趣的故障。

问题:

我正在寻找适用于在 tomcat 上运行的 Java Web 应用程序或以与语言无关的方式回答此问题的答案。

  • 分析的性能成本是多少?
  • 远程连接和分析生产中的网络应用程序不是一个好主意的任何其他原因(奇怪的故障模式、安全问题等)?
  • 性能分析对内存占用有多大影响?
  • 具体来说,是否有性能成本非常低的 Java 分析工具?
  • 有没有设计用于分析 Web 应用程序的 Java 分析工具?
  • 是否有人对使用 visualVM 进行性能分析的性能成本进行了基准测试?
  • visualVM 可以扩展到多大的应用程序和数据集?

最佳答案

OProfile和它的祖先DPCI是为分析生产系统而开发的。这些的开销非常低,并且它们会分析您的完整系统,包括内核,因此您可以在 VM 以及内核和库中找到性能问题。

回答您的问题:

  1. 开销:这些是采样分析器,也就是说,它们生成计时器或 performance counter定期中断,他们会查看当前正在执行的代码。他们使用它来构建您花费时间的直方图,并且对于合理的采样间隔,开销非常低(1-8% 是 they claim)。

    看看this graph采样频率与 OProfile 开销的关系。如果您不喜欢默认设置,您可以调整采样频率以降低开销。

  2. 在生产环境中的使用:使用 OProfile 的唯一注意事项是您需要将它安装在您的生产机器上。我相信自 RHEL3 以来,Red Hat 就提供了内核支持,而且我很确定其他发行版也支持它。

  3. 内存:我不确定 OProfile 的确切内存占用是多少,但我相信它保留相对较小的缓冲区并偶尔将它们转储到日志文件。

  4. Java:OProfile 包括支持 Java 并了解在 JIT 中运行的代码的分析代理。因此,您将能够看到 Java 调用,而不仅仅是解释器和 JIT 中的 C 调用。

  5. 网络应用:OProfile 是一个系统级的分析器,因此它不知道网络应用可能具有的 session 、事务等内容。

    也就是说,它是一个全系统分析器,所以如果您的性能问题是由操作系统和 JIT 之间的不良交互引起的,或者如果它在某些第三方库中,您您将能够看到这一点,因为 OProfile 对内核和库进行了分析。这对生产系统来说是一个优势,因为您可以发现由于配置错误或生产环境的特殊情况而导致的问题,而这些问题在您的测试环境中可能不存在。

  6. VisualVM: 不确定这个,因为我没有使用 VisualVM 的经验

这是 a tutorial关于使用 OProfile 查找性能瓶颈。

关于java - 在生产环境中分析 Web 应用程序的性能成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1207802/

相关文章:

java - 如何将二维数组展平为一维数组?

networking - 低延迟网络建议(s/w 和 h/w)

algorithm - 快轴对齐单元格遍历算法

java - 如何使用 visualvm 查找内存泄漏

c# - Visual Studio 分析 .psess 不存在或无效

javascript - Internet Explorer 11 中的 Web Worker 分析

java - 是否可以在一个事务中使用多个持久化单元,而不是 XA?

java - 错误获取方法rest json

algorithm - 在状态机中处理事件

java - 如何强制组合框呈现自动完成选项?