`

项目性能优化报告

阅读更多
问题陈述:

   tomcat服务器运行一段时间后,tomcat控制台报错:
   java.lang.outOfMemoryError即内存堆泄露,然后tomcat服务死掉,只有重启tomcat才能恢复服务。



分析:

   1)java虚拟机jvm内存过小
   2)程序不严密,产生太多的垃圾



解决方法:
   针对第一个原因:考虑到本项目系统数据不是很大,再加上服务器内存配置不会太低,所以可以暂且不考虑此问题。
   针对第二个原因:
由于jvm产生的垃圾是由我们所写的代码产生的,质量好的代码产生的垃圾少,相反就会产生很多垃圾。
由于jvm的最大内存不能无限增大,故增大jvm的最大内存应该是在代码已经达到很优化时才实施的,所以优化程序才是我们最先要做的。
  
   运用java VisualVM来监控系统的堆和内存使用情况,通过"抽样器"来观察那些类不正常消耗内存。
  
安照以下几点进行系统优化:
    第一,避免死循环。仔细检查程序,防止出现死循环。
              查看了代码没有发现这种情况。

    第二,应该及时释放各种资源:内存, 数据库的各种连接。 如置对象为null,关闭数据库连接。
             (1).发现在for循环中用到大量的String局部变量,我把它移到for循环外面来做全局变量。
             (2).发现Action中的每个方法,有多个或是每个dao被多次实例化,每实例化一次,数据库就开启一次,这样会导致数据
                   库的开销大。现在修改为在一个Action中对需要的dao做一个全局的实例化,这样就只需要开启一次,多处使用。
             (3). 数据开启后没有关闭。现在把请求多的地方,加上了手动关闭数据库的方法。
             (4).项目中配有延迟加载没有使用,使得项目一次读取大量数据,这也会使系统运行慢,现在改为使用延迟加载的功能。

总结:
       此项目运用了struts, hibernate,没有使用spring做管理,这就导致在对数据库操作是经常忘记对数据库关闭,对他的开启操作
也没有控制好。此项目没有运用面向接口编程,所以后期修改也比较麻烦。没有运用现在开发使用比较多的hibernate的annotation,
在数据库的配置修改不是很方便。
      个人建议如果有时间,可以重新用SSH搭一个框架。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics