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

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

给读者的温柔敏感的注意事项:

我知道有些人可能会发现分析生产应用程序的概念令人反感。请放心,我已经用尽了大多数其他选择。我考虑这样做的原因是,我没有资源在测试服务器上完全复制我们的生产设置,并且我无法在测试服务器上导致感兴趣的故障。

问题:

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

  • 分析的性能成本是多少?
  • 为什么在生产环境中远程连接和分析Web应用程序是一个坏主意(奇怪的故障模式,安全问题等)的任何其他原因?
  • 性能分析对内存足迹的影响有多大?
  • 具体来说,是否有性能成本非常低的Java分析工具?
  • 有没有专为分析 Web 应用程序而设计的 Java 分析工具?
  • 有没有人对使用 visualVM 进行性能分析的性能成本有基准?
  • visualVM 可以扩展到什么大小的应用程序和数据集?

答案 1

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

要回答您的问题:

  1. 开销:这些是采样的探查器,也就是说,它们以某种固定的时间间隔生成计时器或性能计数器中断,并查看当前正在执行的代码。他们用它来构建你花时间的直方图,并且对于合理的采样间隔,开销非常低(他们声称的1-8%)。

    请看一下 OProfile 的采样频率与开销的关系图。如果默认值不符合您的喜好,您可以调整采样频率以降低开销。

  2. 在生产中的用法:使用 OProfile 的唯一警告是,您需要将其安装在生产计算机上。我相信自RHEL3以来,Red Hat中就有内核支持,我很确定其他发行版也支持它。

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

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

  5. 网络应用:OProfile是一个系统级探查器,因此它不知道Web应用程序将具有的会话,事务等内容。

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

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

下面是有关使用 OProfile 查找性能瓶颈的教程。


答案 2

我使用 YourKit 在高负载生产环境中分析应用,虽然肯定会产生影响,但它很容易被接受。Yourkit能够以非侵入性的方式做到这一点,例如有选择地关闭某些更昂贵的分析功能(这真的是一个滑动尺度)。

我最喜欢的方面是,您可以在运行YourKit代理的情况下运行VM,并且它对性能的影响为零。只有当您连接GUI并开始分析时,它才会产生影响。


推荐