一尘不染

在生产中对Web应用程序进行性能分析的性能成本

java

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

致读者的注意事项:

我了解有些人可能会发现对生产应用程序进行冒犯性分析的想法。请放心,我已经用尽了大多数其他选项。我正在考虑这样做的原因是,我没有资源来完全复制测试服务器上的生产设置,并且无法导致测试服务器上出现感兴趣的故障。

问题:

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

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

阅读 179

收藏
2020-12-03

共1个答案

一尘不染

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

要回答您的问题:

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

查看此图,了解OProfile的采样频率与开销的关系。如果默认设置不符合您的喜好,则可以调整采样频率以降低开销。

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

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

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

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

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

  1. VisualVM: 不确定这一点,因为我没有使用VisualVM的经验

这是有关使用OProfile查找性能瓶颈的教程

2020-12-03