有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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内存使用情况

所有建议都被欣然接受


共 (3) 个答案

  1. # 1 楼答案

    一般的解决方案是使用一个探查器,例如YourKit,它的工作负载现实,重现问题

    我首先做的是一个仅CPU配置文件,一个仅内存配置文件,最后是一个CPU&;立即打开内存配置文件(然后查看CPU配置文件结果)

    YourKit还可以监控Java EE资源和JDBC连接等高级操作。我没试过,因为我没用过

    提高效率是一个好主意,即使这不是问题的原因,因为它将减少这些配置文件中的“噪音”,并使您的问题更加明显

    您可以尝试增加可用内存量,但有人怀疑这只会延迟问题

  2. # 2 楼答案

    你也可以试试stagemonitor。它是一个开源的性能监控库。它记录请求响应时间、JVM度量、请求细节,包括请求期间被调用方法的调用堆栈(概要文件)等等。由于开销较低,您也可以在生产中使用它

    调整过程如下所示

    • 使用请求仪表板识别慢速请求 request dashboard
    • 使用Request Detail Dashboard分析请求的堆栈跟踪,以了解慢速方法
    • 深入你的代码,尝试优化那些缓慢的方法
    • 您还可以将吞吐量或会话数等指标与响应时间或cpu使用率相关联
    • 使用JVM Memory Dashboard分析堆

    注:我是stagemonitor的开发者

  3. # 3 楼答案

    好的。因此,我看到大型Java应用程序运行较少的配置。你应该试着做以下事情-

    1. 首先将探查器连接到应用程序,查看应用程序的哪个部分花费的时间最多。你可以使用JProfilerEclipse MAT(我个人更喜欢JProfiler)。另外,试着看看占用内存最多的对象。这将帮助您缩小到需要重写以提高性能的部分

    2. 查看内存泄漏后,请将应用程序更新为使用64位JDK(假设它还没有这样做)

    3. 查看JVM参数并对其进行优化