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

Eth*_*man 14 java language-agnostic profiling visualvm production-environment

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

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

据我所知,有些人可能会发现将生产应用程序分析为冒犯的概念.请放心,我已经用尽了大部分其他选择.我考虑这个的原因是我没有资源在我的测试服务器上完全复制我们的生产设置,而且我无法在我的测试服务器上引起感兴趣的失败.

问题:

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

  • 分析的性能成本是多少?
  • 为什么在生产中远程连接和分析Web应用程序(奇怪的故障模式,安全问题等)是一个坏主意的任何其他原因?
  • 分析对内存占用的影响有多大?
  • 特别是那些具有非常低的性能成本的java分析工具?
  • 用于分析Web应用程序的任何Java分析工具?
  • 有没有人对使用visualVM进行性能分析的性能成本进行基准测试?
  • visualVM可以扩展到什么尺寸的应用程序和数据集?

Tod*_*lin 13

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

回答你的问题:

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

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

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

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

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

  5. Web应用程序: OProfile是一个系统级的分析器,因此它不知道Web应用程序可能具有的会话,事务等内容.

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

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

这是一个使用OProfile查找性能瓶颈的教程.