Java Webapp性能问题
我有一个完全用Java开发的Web应用程序。Webapp不使用任何图形/模型框架,而是使用模型视图控制器。它只使用Servlet规范(Servlet版本2.4)创建。 它从2001年开始开发的网络应用程序非常复杂。最初,它是为与Tomcat 4一起工作而构建的。x/5。x、 实际上,它在Tomcat 6上运行。x、 但是,我们仍然有内存泄漏
在深度方面,Webapp的规范可以恢复为:
- 使用Servlet v.2.4规范李>
- 它不使用任何框架
- 它不使用JavaEE(而不是EJB)
- 它基于JavaSE(带有servlet)
- 仅适用于IE 6+(因为它的年龄)
基础设施规范
实际上,webapp可以在三种环境下工作:
首先
- IBM服务器(我不记得确切的型号)
- 英特尔至强2.4 Ghz
- 32GB内存
- 1TB硬盘
- Tomcat(版本6)配置为使用8GB的RAM
秒
- 戴尔服务器
- 英特尔至强2.0Ghz
- 4GB内存
- 500GB硬盘
- Tomcat(5.5版)配置为使用1.5GB的RAM
第三名
- 戴尔服务器
- Amd Opteron 1214 2.20Ghz
- 4GB内存
- 320GB硬盘
- Tomcat(版本6)配置为使用1.5GB的RAM
数据库规范
除了使用SQL Server 2008 R2标准版的第一个服务器规范的用户之外,该webapp使用SQL Server 2008 R2 Express Edition作为DBMS。对于连接池,应用程序使用Apache DBCP
问题
嗯,它有非常严重的性能问题。网络应用持续减速,并且多次拒绝服务。恢复应用程序的唯一方法是重新启动Apache Tomcat服务。 在性能审计期间,我发现了几个编程问题(比如数据库连接永远不会关闭,过度使用向量集合[而不是ArrayList])
我想知道如何提高应用程序的性能,哪些应用程序可以帮助我监控Tomcat性能和Webapp内存使用情况
所有建议都被欣然接受
# 1 楼答案
一般的解决方案是使用一个探查器,例如YourKit,它的工作负载现实,重现问题
我首先做的是一个仅CPU配置文件,一个仅内存配置文件,最后是一个CPU&;立即打开内存配置文件(然后查看CPU配置文件结果)
YourKit还可以监控Java EE资源和JDBC连接等高级操作。我没试过,因为我没用过
提高效率是一个好主意,即使这不是问题的原因,因为它将减少这些配置文件中的“噪音”,并使您的问题更加明显
您可以尝试增加可用内存量,但有人怀疑这只会延迟问题
# 2 楼答案
你也可以试试stagemonitor。它是一个开源的性能监控库。它记录请求响应时间、JVM度量、请求细节,包括请求期间被调用方法的调用堆栈(概要文件)等等。由于开销较低,您也可以在生产中使用它
调整过程如下所示
注:我是stagemonitor的开发者
# 3 楼答案
好的。因此,我看到大型Java应用程序运行较少的配置。你应该试着做以下事情-
首先将探查器连接到应用程序,查看应用程序的哪个部分花费的时间最多。你可以使用JProfiler或Eclipse MAT(我个人更喜欢JProfiler)。另外,试着看看占用内存最多的对象。这将帮助您缩小到需要重写以提高性能的部分
查看内存泄漏后,请将应用程序更新为使用64位JDK(假设它还没有这样做)
查看JVM参数并对其进行优化