大家帮我看看这个项目这样做哪里出了问题?适合用EJB不?

06-03-25 nelson1983
系统经常被访问的实际上只有两个表,以前的版本用简单的jsp加servlet做的,Resin做服务器,运行的一直不错

后来改为CMP做持久层,JBoss做服务器,结果老出问题

开发的时候想因为经常被访问的表也就两个,性能几乎没有什么考虑的地方,分页的时候是把记录全部取出来放到Collection里面再分页,结果时不时就OutOfMemory.

今天我把分页优化了一下,把记录的key先取出来分页,然后findByKey取记录.结果发现JBoss占用的内存几乎没有什么变化,用JMeter进行压力测试,有时候报:java.net.SocketException: Connection reset by peer

搞的我现在很郁闷,怀疑用EJB到底是提高了系统性能还是相反.以前用简单的jsp+servlet从来都没有出现过OutOfMemory.用了EJB反而更糟,郁闷!

系统的日访问量大概在1万次左右,服务器CPU 3G,内存1 G .

到底是机子的配置不行还是EJB确实不是个好玩意,又或者是我程序性能太菜了?顺便请各位参考一下用CMP怎样分页比较好,现在除了把记录全部取出来外实在我想不出什么好办法.EJB-QL实在苯的我没得话说.

         

njava
2006-03-27 18:37

不知道为什么要改用EJB?晕

banq
2006-03-28 21:09
>的时候是把记录全部取出来放到Collection里面再分页,结果时不时就OutOfMemory.

使用EJB需要注意配合EJB模式,这是用EJB的一个注意点,特别是CMP/Hibernate这类数据表映射技术,非常耗费内存,特别是在大量读取的情况下。

介绍你两个解决办法:

1.批量读取不使用CMP,使用slsb+dao+jdbc方式

2.如果觉得性能不够好,使用JF的批量查询功能,具体可见JdonNews演示。

irouse
2006-04-03 17:48
分页的时候为什么一定要把记录全部取出来放到Collection里面再分页??

为什么只读取当前页面的记录?那样最多也才几十条记录而已。

猜你喜欢