• 博客访问: 10672
  • 博文数量: 10
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-01 15:56
个人简介

暂无介绍

文章分类

全部博文(10)

文章存档

2011年(10)

我的朋友

分类: Linux操作系统

2011-06-01 16:05:53

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吃不消。另外还发现一点,如果一旦出现大量报表

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

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

上一篇:没有了

下一篇:多级组织架构间的软件业务流程讨论

给主人留下些什么吧!~~

hwayw2011-06-07 09:36:03

记录一下我的性能优化过程这篇文章已被推荐到oracle管理性能调优圈子中。

〇〇2011-06-02 08:56:38

现在改成导一个压缩文件.nice

评论热议
请登录后评论。

登录 注册