- 浏览: 2610340 次
- 性别:
- 来自: 小胖儿的大城
文章分类
最新评论
-
ni4wangba0:
ni4wangba0 写道亲测,算法有问题。对不起,其实是我自 ...
谈谈"求线段交点"的几种算法(js实现,完整版) -
ni4wangba0:
亲测,算法有问题。
谈谈"求线段交点"的几种算法(js实现,完整版) -
kers007:
苹果不让Webapp 在appstore 里发布,我不知道对 ...
苹果真的要在 AppStore 里封杀 WebApp 吗? -
striveandlive:
fins = js大牛
[原创]GT-Template, 一个超轻量级的js模板工具. -
AlwaysYang:
基础扎实的才能行走天下。
关于body的"大小"在ie和ff下的一些基础知识
我们的大数据量查询是数据库分页的,
但是导出和打印功能是基于全部数据的.
系统投入使用后,对于导出和打印功能的使用远远要高于我们的预期.
而我们的系统的硬件设备是有限的 不能再升级了.
抓取内存大对象的时候,常常发现数百个5M以上的collection大对象
我们的这个系统不大,就是一个提供一些信息管理的,页面也不多(不到1000个 其中能有6 7百的页面是查询),但是并发访问量比较大,同时在线能有5000人,而并发的查询操作至少也有500了,其中大数据量(10万以上)的太多了.这个问题怎么办啊
哪位有好的解决办法 (不生成vo 和 vo的collection也许可以,但是这样改动太大了)
而且关键是 系统已经上线了, 不太可能重新开发所有的dao层 :'(
4G内存的机器(当然java只用了2g) websphere 6.0的机器
文件不能追加吗? 如果可以追加的话 还可以解决:创建文件关闭后 再打开追加数据
真要是必须一次创建完整文件的话 那就没什么招了
文件导出xls格式可以用分页的方式, 可以避免一次从数据库中查询出所有对象:
如果可以的再搞一个应用,专门负责打印功能,在was上同时部署这两个应用,两应用访问同一个db,打印的应用只读。
这种打印挺好的,其他方法比如jasperreport生成pdf打印,或者applet打印,但是我觉得js打印是最好的
是很好,可需要DTO填充Collection,生成大对象显示到页面,还是建议使用报表工具,比如jasperreport。
另外,如果查询结果改动频率小,可以考虑查询缓存
这种打印挺好的,其他方法比如jasperreport生成pdf打印,或者applet打印,但是我觉得js打印是最好的
但是导出和打印功能是基于全部数据的.
系统投入使用后,对于导出和打印功能的使用远远要高于我们的预期.
而我们的系统的硬件设备是有限的 不能再升级了.
抓取内存大对象的时候,常常发现数百个5M以上的collection大对象
我们的这个系统不大,就是一个提供一些信息管理的,页面也不多(不到1000个 其中能有6 7百的页面是查询),但是并发访问量比较大,同时在线能有5000人,而并发的查询操作至少也有500了,其中大数据量(10万以上)的太多了.这个问题怎么办啊
哪位有好的解决办法 (不生成vo 和 vo的collection也许可以,但是这样改动太大了)
而且关键是 系统已经上线了, 不太可能重新开发所有的dao层 :'(
4G内存的机器(当然java只用了2g) websphere 6.0的机器
评论
22 楼
fins
2007-04-26
to sorphi:
谢谢你提供的方案
事实上类似的方案我也提了 但是由于系统中根本就没考虑到callback的设计 现在的dao都是写死的
改动比较大 已经被我们老大驳回了 :'(
谢谢你提供的方案
事实上类似的方案我也提了 但是由于系统中根本就没考虑到callback的设计 现在的dao都是写死的
改动比较大 已经被我们老大驳回了 :'(
21 楼
pufan
2007-04-26
内存爆掉很好解决,使用线程池限制生成xls的并发数量不就得了。
20 楼
sorphi
2007-04-26
抛个砖:
先确定几个可行的原则:
1、尽早的释放数据库连接
2、尽可能少的创建对象
3、用临时文件来代替jvm中的临时对象,缩短值对象的生命周期
4、缓存
ResultSet循环取值的时候,调用一个callback接口,该接口负责将各字段值直接放入到临时文件中。
interface ResultSetPersistCallback {
void appendRow(rs);
}
TextPersistCallback的具体实现是将每一行以csv的格式append到临时的文本文件中,这个没啥好说的,直接使用append模式的File即可
XlsPersistCallback的具体实现是每一行附加到临时的Excel中,这个比较麻烦了(POI的实现中,仍然在jvm中构建HSSFWorkbook对象图,最后一次性写入xls文件,并且每个sheet还有65536的最大行限制),貌似没有好的方案能够缩短值对象的生命周期。
rs循环完毕,释放数据库资源,关闭临时文件,维护缓存池,文件流发送到客户端。
缓存池结构:
key: sql key
value: CachedFile
class CachedFile{
String filepath;
long creationTime;
long period;
}
当然还少不了一个scheduler去掉过期的缓存和临时文件。
先确定几个可行的原则:
1、尽早的释放数据库连接
2、尽可能少的创建对象
3、用临时文件来代替jvm中的临时对象,缩短值对象的生命周期
4、缓存
ResultSet循环取值的时候,调用一个callback接口,该接口负责将各字段值直接放入到临时文件中。
interface ResultSetPersistCallback {
void appendRow(rs);
}
TextPersistCallback的具体实现是将每一行以csv的格式append到临时的文本文件中,这个没啥好说的,直接使用append模式的File即可
XlsPersistCallback的具体实现是每一行附加到临时的Excel中,这个比较麻烦了(POI的实现中,仍然在jvm中构建HSSFWorkbook对象图,最后一次性写入xls文件,并且每个sheet还有65536的最大行限制),貌似没有好的方案能够缩短值对象的生命周期。
rs循环完毕,释放数据库资源,关闭临时文件,维护缓存池,文件流发送到客户端。
缓存池结构:
key: sql key
value: CachedFile
class CachedFile{
String filepath;
long creationTime;
long period;
}
当然还少不了一个scheduler去掉过期的缓存和临时文件。
19 楼
yeshucheng
2007-04-26
难道大对象都要一并的打印出来吗?
如果不是的话,我想还是要把大对象给单独提出来和你现有的表做个分割处理,毕竟大对象并不是大家所见既所得的东西,所以我的意见是把大对象单独做一个表来存储,可以和你现有的表做个一对一的关联而已,在不需要的时候并不需要带出来,这样可以很好的减轻服务端的负担
如果不是的话,我想还是要把大对象给单独提出来和你现有的表做个分割处理,毕竟大对象并不是大家所见既所得的东西,所以我的意见是把大对象单独做一个表来存储,可以和你现有的表做个一对一的关联而已,在不需要的时候并不需要带出来,这样可以很好的减轻服务端的负担
18 楼
xly_971223
2007-04-26
fins 写道
瓶颈在
写xls文件 那里
由于xls文件的特殊性 他必须要在内存中形成一个完整的对象 然后再输出
分页只解决了 大的collection问题 但是解决不了jxl的问题
写xls文件 那里
由于xls文件的特殊性 他必须要在内存中形成一个完整的对象 然后再输出
分页只解决了 大的collection问题 但是解决不了jxl的问题
文件不能追加吗? 如果可以追加的话 还可以解决:创建文件关闭后 再打开追加数据
真要是必须一次创建完整文件的话 那就没什么招了
17 楼
yiqing1982
2007-04-26
呵呵,其实也就是要么你苦一点,在你这边尽量优化;要么让用户麻烦点,让他们做点事情,腾出时间来给你们!
16 楼
fins
2007-04-26
瓶颈在
写xls文件 那里
由于xls文件的特殊性 他必须要在内存中形成一个完整的对象 然后再输出
分页只解决了 大的collection问题 但是解决不了jxl的问题
写xls文件 那里
由于xls文件的特殊性 他必须要在内存中形成一个完整的对象 然后再输出
分页只解决了 大的collection问题 但是解决不了jxl的问题
15 楼
xly_971223
2007-04-26
fins 写道
谢谢大家的回复 我再详细说说我的情况.
数据库使用 jdbc
现象就是内存耗尽
导出的文件格式 有xls csv
确实是所有结果都放入collection
打印就是用的浏览器的,但是也是打印全部(在隐藏帧里显示一个简单的表格,然后调用window.print 我也知道这方案不好,但是还有别的方法吗?)
数据库使用 jdbc
现象就是内存耗尽
导出的文件格式 有xls csv
确实是所有结果都放入collection
打印就是用的浏览器的,但是也是打印全部(在隐藏帧里显示一个简单的表格,然后调用window.print 我也知道这方案不好,但是还有别的方法吗?)
文件导出xls格式可以用分页的方式, 可以避免一次从数据库中查询出所有对象:
int pages = computePages();//查出页数 for(int i = 0; i < pages; i++){ //循环查询每页数据 List records = findRecordByPageNo(i); //查询某页记录 for(int j = 0; i < records.size(); i++){ //写xls文件 } }
14 楼
ahuaxuan
2007-04-26
fins 写道
预生成 和 分页打印都不太可行
业务比较特殊
简单点说吧
假设某省联通客户数有1000万
就一个业务 查询 导出 打印 详单(就是这个客户呼出或接收的所有的电话短信),时间段分别是入网至今所有的 本月 上月 或者历史上的某一月
打印是使用的那种 特殊的连打的打印机,就是不接受换页指令的 放入的纸是那种一个筒的
业务比较特殊
简单点说吧
假设某省联通客户数有1000万
就一个业务 查询 导出 打印 详单(就是这个客户呼出或接收的所有的电话短信),时间段分别是入网至今所有的 本月 上月 或者历史上的某一月
打印是使用的那种 特殊的连打的打印机,就是不接受换页指令的 放入的纸是那种一个筒的
如果可以的再搞一个应用,专门负责打印功能,在was上同时部署这两个应用,两应用访问同一个db,打印的应用只读。
13 楼
fins
2007-04-26
预生成 和 分页打印都不太可行
业务比较特殊
简单点说吧
假设某省联通客户数有1000万
就一个业务 查询 导出 打印 详单(就是这个客户呼出或接收的所有的电话短信),时间段分别是入网至今所有的 本月 上月 或者历史上的某一月
打印是使用的那种 特殊的连打的打印机,就是不接受换页指令的 放入的纸是那种一个筒的
业务比较特殊
简单点说吧
假设某省联通客户数有1000万
就一个业务 查询 导出 打印 详单(就是这个客户呼出或接收的所有的电话短信),时间段分别是入网至今所有的 本月 上月 或者历史上的某一月
打印是使用的那种 特殊的连打的打印机,就是不接受换页指令的 放入的纸是那种一个筒的
12 楼
myreligion
2007-04-26
打印不可以使用全部的数据吧?一页几十条也就足够了,如果有许多页的话可以考虑打印一页读一次请求一次。
导出的话,如果一下子导出很多的话,楼上楼上的预生成应该是个不错的办法。
业务的逻辑是什么?
导出的话,如果一下子导出很多的话,楼上楼上的预生成应该是个不错的办法。
业务的逻辑是什么?
11 楼
dennis_zane
2007-04-26
ahuaxuan 写道
fins 写道
打印就是用的浏览器的,但是也是打印全部(在隐藏帧里显示一个简单的表格,然后调用window.print 我也知道这方案不好,但是还有别的方法吗?)
这种打印挺好的,其他方法比如jasperreport生成pdf打印,或者applet打印,但是我觉得js打印是最好的
是很好,可需要DTO填充Collection,生成大对象显示到页面,还是建议使用报表工具,比如jasperreport。
另外,如果查询结果改动频率小,可以考虑查询缓存
10 楼
nihongye
2007-04-26
或者考虑是否适合预生成...
9 楼
ahuaxuan
2007-04-26
fins 写道
打印就是用的浏览器的,但是也是打印全部(在隐藏帧里显示一个简单的表格,然后调用window.print 我也知道这方案不好,但是还有别的方法吗?)
这种打印挺好的,其他方法比如jasperreport生成pdf打印,或者applet打印,但是我觉得js打印是最好的
8 楼
winterwolf
2007-04-26
先保证不拓机. 用iptable限定最大并发保护服务器
然后用集群顶顶看,再不行就慢慢改程序吧.
然后用集群顶顶看,再不行就慢慢改程序吧.
7 楼
fins
2007-04-26
谢谢大家的回复 我再详细说说我的情况.
数据库使用 jdbc
现象就是内存耗尽
导出的文件格式 有xls csv
确实是所有结果都放入collection
打印就是用的浏览器的,但是也是打印全部(在隐藏帧里显示一个简单的表格,然后调用window.print 我也知道这方案不好,但是还有别的方法吗?)
数据库使用 jdbc
现象就是内存耗尽
导出的文件格式 有xls csv
确实是所有结果都放入collection
打印就是用的浏览器的,但是也是打印全部(在隐藏帧里显示一个简单的表格,然后调用window.print 我也知道这方案不好,但是还有别的方法吗?)
6 楼
LucasLee
2007-04-26
现在看起来导出和打印是瓶颈?
那么详细描述一下上述功能所用的技术、方法。
比如,导出为什么格式?用什么类库完成?导出的文件一般有多大?
打印是直接用浏览器的功能么?
另,数据库分页是JDBC层面还是SQL层面的?
找准瓶颈,深入细节,办法会有的。
那么详细描述一下上述功能所用的技术、方法。
比如,导出为什么格式?用什么类库完成?导出的文件一般有多大?
打印是直接用浏览器的功能么?
另,数据库分页是JDBC层面还是SQL层面的?
找准瓶颈,深入细节,办法会有的。
5 楼
taya
2007-04-26
我现在的项目也遇到类似问题了,而且情况更为复杂
不仅要导出,有时还需要大数据量(50万以上)的数据库update操作
暂时只能弄个列表将需要执行的部分command记下来,然后晚上没人的时候执行...
不仅要导出,有时还需要大数据量(50万以上)的数据库update操作
暂时只能弄个列表将需要执行的部分command记下来,然后晚上没人的时候执行...
4 楼
bilo
2007-04-26
我也遇到过这种问题,后来的解决办法就是用时间换空间,更改业务算法,让数据分次加载,控制大对象(1M以上)生成。效果还是比较明显的
3 楼
chenqj
2007-04-26
1,查询的时候不要一次加载全部数据
2,对查询的结果进行缓存
3,建立集群
2,对查询的结果进行缓存
3,建立集群
发表评论
-
一个商业公司如果要支持一个开源项目的话,它需要做哪些工作啊?
2009-12-07 16:55 4953一个商业公司如果要支持一个开源项目的话,它需要做哪些工作呢? ... -
如何让jxl (jexcelapi) 支持更多的数据
2009-01-08 23:52 4517jxl (jexcelapi) 一直是我比较喜欢的 java版 ... -
在java中"模拟" XMLHttpRequest
2008-11-03 12:17 13095这里所说的"模拟" 是指 : 在java中 ... -
利用google docs进行"轻量级过程管理".
2008-08-28 13:21 0利用google docs进行" ... -
[请教]jxl生成xls时,支持"合并"或"磁盘缓存"吗(导出大数据量时)
2008-07-28 09:37 6940jxl 由于其小巧 易用的特点, 逐渐已经取代了 POI-ex ... -
不错的国产开源免费的php框架: FleaPHP
2008-07-28 01:58 8518之前用他开发过一个小的网站 开发过程非常轻松愉快 体验也很好 ... -
GT-FrontController, 一个简陋的MVC控制器的设计思路
2008-07-06 23:53 2730在给GT-Grid做前后台结合的例子时, 为了"快速 ... -
h2database 普及系列一: 简介
2008-05-06 19:10 22118这不是一个新东西,但是 ... -
JSF 与 "我的伟大发明" ---- 关于B/S UI开发的胡言乱语
2008-04-10 14:25 14467这篇帖子后面的回复和 ... -
初看JSF后的胡言乱语
2008-04-10 09:31 4583最近看了一点jsf ---- 只 ... -
Help,如何在J2EE环境下使用Sqlite以及如何将sqlite打入war包
2008-03-27 09:46 3785需求是这样的 希望j2ee应用(基于应用 而不是整个服务器) ... -
请记住: i AM SoLiD. (关于View的事件触发顺序)
2007-11-16 04:11 2629View 提供了若干事件. 在渲染 布局 展现 相关事件的触 ... -
Android SDK下, 如何在程序中输出日志 以及如何查看日志.
2007-11-15 22:38 9846Android SDK下, 如何在程序中输出日志 以及如何查看 ... -
小胖加入Android Fans的 大军了 呵呵
2007-11-15 13:30 3136决定开始研究 Android 了. 以前研究过 j2me 对 ... -
老帖: findbugs简介
2007-11-02 10:09 3567这个时候说 findbugs ??? ... -
世上没有B/S系统,只有B系统和S系统.
2007-09-12 13:45 34346先说些与标题貌似无关的话. 随着prototype DWR ... -
[求助]有没有哪个缓存组件支持 基于访问频率的清理策略
2007-08-29 18:30 2404目前缓存清理策略几乎都是基于 存活期 和 活跃期 还有缓存队列 ... -
[发布2007-08-06]Ajax向导组件 WebWizard Component Beta1
2007-08-06 15:55 4995/****************************** ... -
寻求一个eclipse下更好的snippet插件(或代码模板管理插件 或代码生成器)
2007-07-26 11:12 4258eclipse自带一个snippet插件,但是功能有限. 只支 ... -
让Struts 1焕发青春----小议对Struts的改造.
2007-06-25 15:27 7598目前流行的新型的MVC框架 几乎都在"增强单元测试能 ...
相关推荐
这是因为PermGen空间主要用于存储类元数据,如果该空间设置过小,可能会导致频繁的垃圾回收甚至内存溢出。 - 更深入地分析内存使用情况,识别出内存泄漏的具体位置并进行修复。 - 使用工具如VisualVM或JConsole等...
这可能意味着数据读取效率低下,频繁地从磁盘加载数据,从而对系统性能造成影响。为了改善这种情况,我们调整了SGA参数以提高缓冲区的利用率,从而使系统运行更加顺畅。 然而,问题并未就此结束。在一天后,数据库...
在IT行业中,数据库性能优化是至关重要的,尤其是对于高并发、大数据量的网站而言。本文主要探讨了一个由MySQL中的慢SQL查询导致整个网站宕机的问题及其解决方案。 首先,慢SQL查询通常不会直接导致网站宕机,但...
服务器宕机是一种常见的IT灾难,它可能会导致业务中断、数据丢失和经济损失。因此,拥有一个完善的服务器故障应急预案对于企业的正常运营至关重要。本文将讨论服务器宕机的原因、备份和冗余措施、应急预案的实施等...
在IT行业中,"永不宕机的服务器"是一个重要的概念,尤其对于那些依赖高可用性和连续服务的企业来说至关重要。"宕机"是指服务器因为各种原因停止服务,无法响应客户端请求,这对业务连续性和用户体验可能造成严重影响...
本文将深入探讨宕机检测工具的工作原理、功能特性以及如何运用这些工具来提升系统稳定性。 首先,宕机检测工具的核心功能是对多台服务器、多IP地址以及多个业务端口进行健康检查。这种检查通常包括以下几个方面: ...
如发生在 mysql 软件可承受力够但是服务器硬件,或者...宕机 又或者 MYSQL 参数配置过大或者参数配置不合理导致服务器崩溃 ,出现宕机的可能多种多样,本文档主要体现的是宕机后可能出现的问题和后遗症较大的情况是什么
- **问题描述**:某些表数据量大且频繁进行插入、更新操作,影响系统性能。 - **解决方案**: - 对数据表进行分表设计,合理分布数据,减少单个表的数据量。 6. **TCP请求堵塞**: - **问题描述**:过多的请求...
tomcat宕机重启脚本,比较简单的一种设置
### IT知识要点:宕机对企业的影响与IBM POWER7的应对策略 #### 1. 宕机对企业的影响 - **业务中断**:宕机会导致企业工作流程的中断,直接影响业务连续性和客户服务,造成收入损失。 - **经济损失**:包括直接的...
然而,当GitLab服务器遭遇宕机时,可能会导致开发者无法正常进行代码的提交和下载,这对任何依赖GitLab进行日常开发工作的团队来说都是一个重大的挑战。本文将详细解释如何在GitLab服务器宕机后恢复代码仓库,确保...
宕机可以是短暂的,也可以持续较长时间,严重时甚至可能导致数据丢失或服务完全不可用。 #### 二、宕机的不同称谓 在日常交流中,宕机还常被称为“当机”、“死机”,尽管这些称呼不够规范,但它们已经成为了人们...
【银行系统的高并发架构】是针对金融机构如何处理大规模并发交易的一种设计策略,特别是在像双十一这样的高峰期,银行系统需要应对极大的交易量冲击。以下是对这部分内容的详细解释: 1. **业务情况**: - 第三方...
### MySQL 主备机宕机自动切换详解 #### 一、MySQL主备复制机制简介 MySQL复制(Replication)是MySQL数据库系统中一个重要的特性,它允许数据从一台MySQL服务器(称为Master)复制到另一台或多台MySQL服务器...
本文档记录了一次 CentOS 7 服务器因断电导致宕机的修复过程。该服务器的修复过程中遇到了许多问题,包括 fstab 文件的缺失、分区表的损坏、root 分区的损坏等问题。通过对这些问题的解决,最终成功地修复了服务器。...
该宕机事件发生在测试环境中的一台装有ORACLE数据库的AIX小机上,导致数据库宕机。我们将从故障原因分析、故障解决过程、故障后分析和故障总结四个方面对该事件进行详细的分析和讨论。 一、故障原因分析 该宕机...
由于项目需要,编写基于zookeeper集群监测服务器宕机情况,并发邮件通知代码;实现很简单,编写了客户端和服务端,基于maven实现,代码方面修改zookeeper ip地址,需要部署的服务器名和邮件信息即可实现。直接打包...
更重要的是,nginx还提供了宕机自动切换的能力,这确保了在某后端服务器发生故障时,能够快速切换到健康节点继续提供服务,从而保障了服务的连续性和稳定性。 在nginx中进行负载均衡配置,一般会利用到默认安装的...
服务器健康状态,查看服务器是否负载高,内存不够,意外断电等宕机情况。 系统状态 主从同步是否正常,数据备份是否正常。 告知协助判断人员的内容 一线工程师确认ADS服务器健康是否正常。 判断的时间要求 设备...