我正在尝试使用大型复杂的tomcat Java Web应用程序解决性能问题。目前最大的问题是,内存使用量有时会激增,应用程序将变得无响应。我已经修复了我可以使用日志探查器和日志文件的贝叶斯分析解决的所有问题。我正在考虑在生产的Tomcat服务器上运行探查器。
致读者的注意事项:
我了解有些人可能会发现对生产应用程序进行冒犯性分析的想法。请放心,我已经用尽了大多数其他选项。我正在考虑这样做的原因是,我没有资源来完全复制测试服务器上的生产设置,并且无法导致测试服务器上出现感兴趣的故障。
问题:
我正在寻找对在tomcat上运行的Java Web应用程序有效的答案,或者以与语言无关的方式回答此问题。
OProfile及其祖先DPCI是为概要分析生产系统开发的。这些操作的开销非常低,而且它们可以对 整个系统 (包括内核)进行概要分析,因此您可以在VM , 内核和库中发现性能问题。
要回答您的问题:
查看此图,了解OProfile的采样频率与开销的关系。如果默认设置不符合您的喜好,则可以调整采样频率以降低开销。
在生产中的用法: 使用OProfile的唯一警告是您需要将其安装在生产计算机上。我相信自RHEL3以来,Red Hat中已经提供了内核支持,而且我很确定其他发行版也支持它。
内存: 我不确定OProfile的确切内存占用量是多少,但是我相信它会保留相对较小的缓冲区,并偶尔将其转储到日志文件中。
Java: OProfile包含支持Java的配置代理,并且了解在JIT中运行的代码。因此,您将能够看到Java调用,而不仅是解释器和JIT中的C调用。
Web应用程序: OProfile是系统级的探查器,因此它不知道Web应用程序将具有的会话,事务等内容。
就是说,它是一个 完整的系统 探查器,因此,如果您的性能问题是由操作系统和JIT之间的不良交互导致的,或者它在某些第三方库中,则可以看到,因为OProfile探查器内核和库。这对于生产系统是一个优势,因为您可以捕获由于测试环境中可能不存在的生产环境配置错误或细节而导致的问题。
这是有关使用OProfile查找性能瓶颈的教程。