壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1323|回复: 0

[交流讨论] 记录一下我的性能优化过程

[复制链接]
发表于 2009/11/11 23:38:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 ESK分销ERP 于 2009/11/11 23:40 编辑

最近给一个客户上供应链系统,在全国各地大概有180个门店,加上总部操作的人数,一般在线的都有300-400人,每天的单据量相对来说还是比较大(当然不能和电信比了),实施完成后,将该客户在旧系统中前两年的销售数据一起纳入到新系统里面.
     客户应用的情况是:门店做销售,总部10多人做一些正常的单据(采购,调货),绝大多数的人是在做分析,监控.所以,客户对报表的要求非常高,除了数据准确之外,还要求实时,还有一点就是:它们的报表都是很复杂的,执行时间比较长,很耗资源,数据导入到excel里面,经常是超过了excel的最大行数65535,最大列数256.
     系统的情况是:J2EE架构,B/S结构,JDK6.0,使用开源的tomcat,做为Web服务器.有一点说明一下,tomcat在32位的系统里,最大内存只能是1.5G.
    刚开始的时候,系统试用了15天左右,我们使用了一台服务器,数据库服务器和web服务器都在同一个机器.发现tomcat常常死掉,原因是out of memory,刚开始还以为是,代码哪儿写的不严谨,容易有内存泄露.经仔细检查后,发现这种情况基本不可能,排除到这个以后,我基本可以肯定问题是出在报表里面,因为报表中心是我们自已开发的,所以从哪儿着手还是比较方便,我们先分析每次报表查询后,产生的报表数据,将这些报表数据写成临时文件,真的应了一句话,不看不知道,一看吓一跳。有的报表数据有200多M,只需要不到10个人,如果查这个报表的话,系统就要die掉.(超过了1.5G),没办法,只能进行优化了:

   第一步:将服务器一分为二:报表服务器,开单服务器.。。这样可以保证正常日常开单.虽然物理上是分开,但是界面不分开,对客户操作基本不影响,也不需要登录两次.

   第二步:对excel超行,超列的处理,以前我们是如果超行,分sheet,超列也分sheet,但是这样有的还是不行,java里面的excel操作api jxl不支持,数据超过4w行后,除了速度变慢,还经常out of memory.没有办法,参考了一下国内报表软件的做法,改成超行,分文件,超列分sheet.

   第三步:以前是直接导一个excel文件给客户的,现在改成导一个压缩文件.这样的好处是:响应给用户的生成文件体积大大缩小,降低了多用户并发访问时服务器下载文件的负担,有效减少多个用户导出下载时服务器端的流量,从而达到进一步减轻服务器负载的效果.

   第四步:通过上面三步以后,系统性能明显好转,但是报表服务器,每天还是会死一两次。。终究原因和上面一样,使用jdbc查询到的原始数据占用的内存太多.tomcat吃不消。另外还发现一点,如果一旦出现大量报表查询的话。数据库又吃不消,这就间接造成有时候开单服务器性能下降太快.

   第五步:使用报表计划,所谓计划就是,客户设定好的条件.系统利用晚上空闲时间自动生成.对于有一些不需要强调实时性的报表来说,这样显然是可以的。但是对于一些实时性的来说,客户是不能接受的。所以我们的计划必须支持手工生成.但这里手工生成不再走正常的报表查询思路(只要请求了就进行查询),而是使用队列,谁先请求,谁先生成。如果计划请求多的话,每次只会是一个计划在执行.

   第六步:建历史数据表,将一些已完成的数据分离.基本上,很多的软件都是这个思路.有的是用分区表,大概也差不多.

   注:第五步,我们才刚开发好,具体使用情况还有待观察。目前我们只做了这么多,如果以后还出现性能危机,只能是具体情况具体分析。关于性能问题,欢迎大家讨论
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 10:28 , Processed in 0.011950 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表