论坛首页 Java企业应用论坛

[求助]高并发的大数据量查询导致系统频繁宕机,咋办啊

浏览 48035 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-04-26  
我们的大数据量查询是数据库分页的,
但是导出和打印功能是基于全部数据的.

系统投入使用后,对于导出和打印功能的使用远远要高于我们的预期.

而我们的系统的硬件设备是有限的 不能再升级了.

抓取内存大对象的时候,常常发现数百个5M以上的collection大对象

我们的这个系统不大,就是一个提供一些信息管理的,页面也不多(不到1000个 其中能有6 7百的页面是查询),但是并发访问量比较大,同时在线能有5000人,而并发的查询操作至少也有500了,其中大数据量(10万以上)的太多了.这个问题怎么办啊

哪位有好的解决办法 (不生成vo 和 vo的collection也许可以,但是这样改动太大了)
而且关键是 系统已经上线了, 不太可能重新开发所有的dao层 :'(

4G内存的机器(当然java只用了2g) websphere 6.0的机器

   发表时间:2007-04-26  
某些业务操作做人工的并发控制,不能同时多人访问一个业务模块?大的业务模块在每次做完以后都强制GC?

都是一些不成熟的想法,这种问题的确很头痛。
0 请登录后投票
   发表时间:2007-04-26  
导出和打印的操作是怎么进行的?从数据库里面先全部抓出对象塞到某个collection,然后再丢给处理导出/打印的功能?
数据库交互用的是什么工具?hibernate? ibatis? jdbc?
宕机时候的现象是什么?out of memory?

补充一些具体信息吧,要不然,在论坛上这种问题没有人能解的...
0 请登录后投票
   发表时间:2007-04-26  
1,查询的时候不要一次加载全部数据
2,对查询的结果进行缓存
3,建立集群
1 请登录后投票
   发表时间:2007-04-26  
我也遇到过这种问题,后来的解决办法就是用时间换空间,更改业务算法,让数据分次加载,控制大对象(1M以上)生成。效果还是比较明显的
0 请登录后投票
   发表时间:2007-04-26  
我现在的项目也遇到类似问题了,而且情况更为复杂
不仅要导出,有时还需要大数据量(50万以上)的数据库update操作 
暂时只能弄个列表将需要执行的部分command记下来,然后晚上没人的时候执行... 
0 请登录后投票
   发表时间:2007-04-26  
现在看起来导出和打印是瓶颈?
那么详细描述一下上述功能所用的技术、方法。
比如,导出为什么格式?用什么类库完成?导出的文件一般有多大?
打印是直接用浏览器的功能么?

另,数据库分页是JDBC层面还是SQL层面的?

找准瓶颈,深入细节,办法会有的。
0 请登录后投票
   发表时间:2007-04-26  
谢谢大家的回复 我再详细说说我的情况.

数据库使用 jdbc
现象就是内存耗尽
导出的文件格式 有xls csv
确实是所有结果都放入collection
打印就是用的浏览器的,但是也是打印全部(在隐藏帧里显示一个简单的表格,然后调用window.print 我也知道这方案不好,但是还有别的方法吗?)
0 请登录后投票
   发表时间:2007-04-26  
先保证不拓机. 用iptable限定最大并发保护服务器

然后用集群顶顶看,再不行就慢慢改程序吧.



0 请登录后投票
   发表时间:2007-04-26  
fins 写道
打印就是用的浏览器的,但是也是打印全部(在隐藏帧里显示一个简单的表格,然后调用window.print 我也知道这方案不好,但是还有别的方法吗?)

这种打印挺好的,其他方法比如jasperreport生成pdf打印,或者applet打印,但是我觉得js打印是最好的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics