项目性能优化报告

问题陈述:

tomcat服务器运行一段时间后,tomcat控制台报错:

java.lang.outOfMemoryError即内存堆泄露,然后tomcat服务死掉,只有重启tomcat才能恢复服务。

分析:

1)java虚拟机jvm内存过小

2)程序不严密,产生太多的垃圾

解决方法:

针对第一个原因:考虑到本项目系统数据不是很大,再加上服务器内存配置不会太低,所以可以暂且不考虑此问题。

针对第二个原因:

由于jvm产生的垃圾是由我们所写的代码产生的,质量好的代码产生的垃圾少,相反就会产生很多垃圾。

由于jvm的最大内存不能无限增大,故增大jvm的最大内存应该是在代码已经达到很优化时才实施的,所以优化程序才是我们最先要做的。

运用javaVisualVM来监控系统的堆和内存使用情况,通过"抽样器"来观察那些类不正常消耗内存。

安照以下几点进行系统优化:

第一,避免死循环。仔细检查程序,防止出现死循环。

查看了代码没有发现这种情况。

第二,应该及时释放各种资源:内存,数据库的各种连接。如置对象为null,关闭数据库连接。

(1).发现在for循环中用到大量的String局部变量,我把它移到for循环外面来做全局变量。

(2).发现Action中的每个方法,有多个或是每个dao被多次实例化,每实例化一次,数据库就开启一次,这样会导致数据

库的开销大。现在修改为在一个Action中对需要的dao做一个全局的实例化,这样就只需要开启一次,多处使用。

(3).数据开启后没有关闭。现在把请求多的地方,加上了手动关闭数据库的方法。

(4).项目中配有延迟加载没有使用,使得项目一次读取大量数据,这也会使系统运行慢,现在改为使用延迟加载的功能。

总结:

此项目运用了struts,hibernate,没有使用spring做管理,这就导致在对数据库操作是经常忘记对数据库关闭,对他的开启操作

也没有控制好。此项目没有运用面向接口编程,所以后期修改也比较麻烦。没有运用现在开发使用比较多的hibernate的annotation,

在数据库的配置修改不是很方便。

个人建议如果有时间,可以重新用SSH搭一个框架。

相关推荐