记录一下我的性能优化过程

09年的时候给当时公司上供应链系统,公司在全国各地大概有180个门店,加上总部操作的人数,一般在线的都有300-400人,每天的单据量相对来说还是比较大(当然不能和电信比了),实施完成后,将该客户在旧系统中
前两年的销售数据一起纳入到新系统里面.
    
公司应用的情况是:门店做销售,总部10多人做一些正常的单据(采购,调货),绝大多数的人是在做分析,监控.所以,客户对报表的要求非常高,除了数据准确之外,还要求实时,还有一点就是:它们的报表都是

很复杂的,执行时间比较长,很耗资源,数据导入到excel里面,经常是超过了excel的最大行数65535,最大列数256.
    
系统的情况是:J2EE架构,B/S结构,JDK6.0,使用开源的tomcat,做为Web服务器.有一点说明一下,tomcat32位的系统里,最大内存只能是
1.5G.
   
刚开始的时候,系统试用了15天左右,我们使用了一台服务器,数据库服务器和web服务器都在同一个机器.发现tomcat常常死掉,原因是out of memory,刚开始还以为是,代码哪儿写的不严谨,容易有内存泄露.经仔细

检查后,发现这种情况基本不可能,排除到这个以后,我基本可以肯定问题是出在报表里面,因为报表中心是我们自已开发的,所以从哪儿着手还是比较方便,我们先分析每次报表查询后,产生的报表数据,将这些报表数据写成临时文件,真的应了一句话,不看不知道,一看吓一跳。有的报表数据有200M,只需要不到10个人,如果查这个报表的话,系统就要die.(超过了1.5G),没办法,只能进行优化了:
  
第一步:将服务器一分为二:报表服务器,开单服务器.。。这样可以保证正常日常开单.虽然物理上是分开,但是界面不分开,对客户操作基本不影响,也不需要登录两次.
  
第二步:对excel超行,超列的处理,以前我们是如果超行,分sheet,超列也分sheet,但是这样有的还是不行,java里面的excel操作api jxl不支持,数据超过4w行后,除了速度变慢,还经常out of memory.没有办法,参考

了一下国内报表软件的做法,改成超行,分文件,超列分sheet.
  
第三步:以前是直接导一个excel文件给客户的,现在改成导一个压缩文件.这样的好处是:响应给用户的生成文件体积大大缩小,降低了多用户并发访问时服务器下载文件的负担,有效减少多个用户导出下载时服务器端

的流量,从而达到进一步减轻服务器负载的效果.
  
第四步:通过上面三步以后,系统性能明显好转,但是报表服务器,每天还是会死一两次。。终究原因和上面一样,使用jdbc查询到的原始数据占用的内存太多.tomcat吃不消。另外还发现一点,如果一旦出现大量报表

查询的话。数据库又吃不消,这就间接造成有时候开单服务器性能下降太快.
  
第五步:使用报表计划,所谓计划就是,客户设定好的条件.系统利用晚上空闲时间自动生成.对于有一些不需要强调实时性的报表来说,这样显然是可以的。但是对于一些实时性的来说,客户是不能接受的。所以我们的计划必须支持手工生成.但这里手工生成不再走正常的报表查询思路(只要请求了就进行查询),而是使用队列,谁先请求,谁先生成。如果计划请求多的话,每次只会是一个计划在执行
.
  
第六步:建历史数据表,将一些已完成的数据分离.基本上,很多的软件都是这个思路.有的是用分区表,大概也差不多.

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/660744/viewspace-696895/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/660744/viewspace-696895/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值