`

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

阅读更多
我们的大数据量查询是数据库分页的,
但是导出和打印功能是基于全部数据的.

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

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

抓取内存大对象的时候,常常发现数百个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都是写死的
改动比较大 已经被我们老大驳回了  :'(
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去掉过期的缓存和临时文件。


19 楼 yeshucheng 2007-04-26  
难道大对象都要一并的打印出来吗?
如果不是的话,我想还是要把大对象给单独提出来和你现有的表做个分割处理,毕竟大对象并不是大家所见既所得的东西,所以我的意见是把大对象单独做一个表来存储,可以和你现有的表做个一对一的关联而已,在不需要的时候并不需要带出来,这样可以很好的减轻服务端的负担
18 楼 xly_971223 2007-04-26  
fins 写道
瓶颈在
写xls文件 那里
由于xls文件的特殊性 他必须要在内存中形成一个完整的对象 然后再输出

分页只解决了 大的collection问题 但是解决不了jxl的问题

文件不能追加吗? 如果可以追加的话 还可以解决:创建文件关闭后 再打开追加数据
真要是必须一次创建完整文件的话 那就没什么招了
17 楼 yiqing1982 2007-04-26  
呵呵,其实也就是要么你苦一点,在你这边尽量优化;要么让用户麻烦点,让他们做点事情,腾出时间来给你们!
16 楼 fins 2007-04-26  
瓶颈在
写xls文件 那里
由于xls文件的特殊性 他必须要在内存中形成一个完整的对象 然后再输出

分页只解决了 大的collection问题 但是解决不了jxl的问题
15 楼 xly_971223 2007-04-26  
fins 写道
谢谢大家的回复 我再详细说说我的情况.

数据库使用 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万
就一个业务 查询 导出 打印 详单(就是这个客户呼出或接收的所有的电话短信),时间段分别是入网至今所有的 本月 上月 或者历史上的某一月

打印是使用的那种 特殊的连打的打印机,就是不接受换页指令的 放入的纸是那种一个筒的

如果可以的再搞一个应用,专门负责打印功能,在was上同时部署这两个应用,两应用访问同一个db,打印的应用只读。
13 楼 fins 2007-04-26  
预生成 和 分页打印都不太可行
业务比较特殊

简单点说吧

假设某省联通客户数有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 我也知道这方案不好,但是还有别的方法吗?)
6 楼 LucasLee 2007-04-26  
现在看起来导出和打印是瓶颈?
那么详细描述一下上述功能所用的技术、方法。
比如,导出为什么格式?用什么类库完成?导出的文件一般有多大?
打印是直接用浏览器的功能么?

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

找准瓶颈,深入细节,办法会有的。
5 楼 taya 2007-04-26  
我现在的项目也遇到类似问题了,而且情况更为复杂
不仅要导出,有时还需要大数据量(50万以上)的数据库update操作 
暂时只能弄个列表将需要执行的部分command记下来,然后晚上没人的时候执行... 
4 楼 bilo 2007-04-26  
我也遇到过这种问题,后来的解决办法就是用时间换空间,更改业务算法,让数据分次加载,控制大对象(1M以上)生成。效果还是比较明显的
3 楼 chenqj 2007-04-26  
1,查询的时候不要一次加载全部数据
2,对查询的结果进行缓存
3,建立集群

相关推荐

    WebLogic宕机大全总结

    这是因为PermGen空间主要用于存储类元数据,如果该空间设置过小,可能会导致频繁的垃圾回收甚至内存溢出。 - 更深入地分析内存使用情况,识别出内存泄漏的具体位置并进行修复。 - 使用工具如VisualVM或JConsole等...

    weblogic宕机处理文档

    这可能意味着数据读取效率低下,频繁地从磁盘加载数据,从而对系统性能造成影响。为了改善这种情况,我们调整了SGA参数以提高缓冲区的利用率,从而使系统运行更加顺畅。 然而,问题并未就此结束。在一天后,数据库...

    MySQL的一条慢SQL查询导致整个网站宕机的解决方法

    在IT行业中,数据库性能优化是至关重要的,尤其是对于高并发、大数据量的网站而言。本文主要探讨了一个由MySQL中的慢SQL查询导致整个网站宕机的问题及其解决方案。 首先,慢SQL查询通常不会直接导致网站宕机,但...

    服务器宕机怎么办?服务器故障应急预案.docx

    服务器宕机是一种常见的IT灾难,它可能会导致业务中断、数据丢失和经济损失。因此,拥有一个完善的服务器故障应急预案对于企业的正常运营至关重要。本文将讨论服务器宕机的原因、备份和冗余措施、应急预案的实施等...

    永不宕机的服务器

    在IT行业中,"永不宕机的服务器"是一个重要的概念,尤其对于那些依赖高可用性和连续服务的企业来说至关重要。"宕机"是指服务器因为各种原因停止服务,无法响应客户端请求,这对业务连续性和用户体验可能造成严重影响...

    宕机检测工具

    本文将深入探讨宕机检测工具的工作原理、功能特性以及如何运用这些工具来提升系统稳定性。 首先,宕机检测工具的核心功能是对多台服务器、多IP地址以及多个业务端口进行健康检查。这种检查通常包括以下几个方面: ...

    mysql宕机恢复经典问题解决

    如发生在 mysql 软件可承受力够但是服务器硬件,或者...宕机 又或者 MYSQL 参数配置过大或者参数配置不合理导致服务器崩溃 ,出现宕机的可能多种多样,本文档主要体现的是宕机后可能出现的问题和后遗症较大的情况是什么

    信息系统运行卡顿、宕机的原因分析与初步解决方案

    - **问题描述**:某些表数据量大且频繁进行插入、更新操作,影响系统性能。 - **解决方案**: - 对数据表进行分表设计,合理分布数据,减少单个表的数据量。 6. **TCP请求堵塞**: - **问题描述**:过多的请求...

    tomcat宕机重启脚本

    tomcat宕机重启脚本,比较简单的一种设置

    宕机没有任何好处——POWER7 能够确保宕机不影响您的业务

    ### IT知识要点:宕机对企业的影响与IBM POWER7的应对策略 #### 1. 宕机对企业的影响 - **业务中断**:宕机会导致企业工作流程的中断,直接影响业务连续性和客户服务,造成收入损失。 - **经济损失**:包括直接的...

    gitlab服务器宕机,如何恢复.doc

    然而,当GitLab服务器遭遇宕机时,可能会导致开发者无法正常进行代码的提交和下载,这对任何依赖GitLab进行日常开发工作的团队来说都是一个重大的挑战。本文将详细解释如何在GitLab服务器宕机后恢复代码仓库,确保...

    宕机是什么意思?.docx

    宕机可以是短暂的,也可以持续较长时间,严重时甚至可能导致数据丢失或服务完全不可用。 #### 二、宕机的不同称谓 在日常交流中,宕机还常被称为“当机”、“死机”,尽管这些称呼不够规范,但它们已经成为了人们...

    银行系统的高并发架构.pptx

    【银行系统的高并发架构】是针对金融机构如何处理大规模并发交易的一种设计策略,特别是在像双十一这样的高峰期,银行系统需要应对极大的交易量冲击。以下是对这部分内容的详细解释: 1. **业务情况**: - 第三方...

    mysql主备机宕机自动切换

    ### MySQL 主备机宕机自动切换详解 #### 一、MySQL主备复制机制简介 MySQL复制(Replication)是MySQL数据库系统中一个重要的特性,它允许数据从一台MySQL服务器(称为Master)复制到另一台或多台MySQL服务器...

    记录一次CentOS7因断电导致宕机的修复过程.pdf

    本文档记录了一次 CentOS 7 服务器因断电导致宕机的修复过程。该服务器的修复过程中遇到了许多问题,包括 fstab 文件的缺失、分区表的损坏、root 分区的损坏等问题。通过对这些问题的解决,最终成功地修复了服务器。...

    ORACLE数据库一次意外宕机的分析处理实记(ora-1578)[文].pdf

    该宕机事件发生在测试环境中的一台装有ORACLE数据库的AIX小机上,导致数据库宕机。我们将从故障原因分析、故障解决过程、故障后分析和故障总结四个方面对该事件进行详细的分析和讨论。 一、故障原因分析 该宕机...

    基于zookeeper集群监测服务器宕机情况,并发邮件通知

    由于项目需要,编写基于zookeeper集群监测服务器宕机情况,并发邮件通知代码;实现很简单,编写了客户端和服务端,基于maven实现,代码方面修改zookeeper ip地址,需要部署的服务器名和邮件信息即可实现。直接打包...

    nginx负载均衡配置,宕机自动切换方式

    更重要的是,nginx还提供了宕机自动切换的能力,这确保了在某后端服务器发生故障时,能够快速切换到健康节点继续提供服务,从而保障了服务的连续性和稳定性。 在nginx中进行负载均衡配置,一般会利用到默认安装的...

    主数据库服务器宕机应急预案(正式篇)

    服务器健康状态,查看服务器是否负载高,内存不够,意外断电等宕机情况。 系统状态 主从同步是否正常,数据备份是否正常。 告知协助判断人员的内容 一线工程师确认ADS服务器健康是否正常。 判断的时间要求 设备...

Global site tag (gtag.js) - Google Analytics