报表知识库
我要提问

润乾报表独有的动态并发控制

并发技术,使得服务器的吞吐量大为增加,设置一个合理的值来控制最大的并发量,可以使得资源合理分配,性能提高到最优。润乾报表提供了并发控制的策略来有效控制最大的并发量,使性能得到最优化。

润乾报表在传统的静态并发控制技术上,引入了动态并发控制的概念,使得能更加灵活合理地根据用户硬件的配置和条件的设置来动态控制并发数,使性能达到最优。下面我们先介绍润乾报表的静态并发控制,并在此基础上进一步重点介绍润乾报表独有的动态并发控制。

静态并发控制

润乾报表提供的静态并发控制手段,其基本思路是:在服务器端预先配置允许并发的最大线程数,当请求线程超出了这个数,就被迫进行等待,直到有算完的线程退出,等待的线程才能进来计算。此外,润乾报表还提供了最大等待数和等待时间属性来避免太多的等待线程导致的资源占用。具体来说,在WEB-INF/reportConfig.xml文件中提供了有关属性的配置。

2009-07-17_111351.png

maxConcurrentForReport 表示报表WEB应用中服务器可以同时计算报表的最大个数,以便有效控制服务器的内存使用量,来最大程度的降低性能瓶颈。

maxWaitForReport 表示报表WEB应用中服务器可以等待计算的报表的最大个数,对于溢出的报表,或者超时的报表,系统自动在队列中清除。

maxWaitTimeForReport 表示报表等待计算的最大时间,以秒为单位。

润乾报表独有的动态并发控制

任务背景:

举个例子说明,如服务器限定了允许最大50个线程访问,平均每个线程占用内存10M,总计服务器可以接受500M内存的耗用。可是,当正好每个线程访问的报表数据量都非常小时,也许50个线程加起来耗用的内存不足100M,此时多余的400M内存就浪费了;如果正好50个线程中某几个线程访问的报表数据量非常大,有可能一个线程占用的内存就超过100M,此时50个线程加起来占用内存可能远远超过500M,直接导致服务器内存溢出。相同的道理也适用于对CPU资源的访问。

可以看出,当服务器对性能要求比较高的时候,光有静态并发控制是不够的,这时,润乾报表在结合简单并发数控制的基础上,同时引入了动态并发控制的概念,来更加灵活合理地控制并发数,充分利用硬件资源。

基本思路:

通过上述背景举例也可以看出,我们在实际的性能调优过程中,单一的限制访问线程数并不是并发控制的最优方法,只有在此基础上动态的调整并发数的访问,才能大大提高性能。润乾报表是这样实现动态并发控制的:由用户根据服务器硬件的配置,预先设置一个允许并发运算的最大格子数,然后由服务器运算的过程中,动态的智能判断当前并发访问的格子数是否达到预设值,如果达到,则控制新进访问线程,使之等待,等有空闲时接着计算。如果没有达到,则继续进行运算。这样,便能使资源访问不局限于所允许的线程访问的个数,突破资源占用的瓶颈,达到动态灵活控制。

具体解决办法:

  • 首先,同静态并发控制一样,我们可以在WEB-INF/reportConfig.xml文件中添加有关属性的配置。

3.png

maxCellNum 动态并发配置的主要指标,用来表示在同一时刻,所能计算的最大的单元格数量。服务器在运算过程中,动态的智能判断当前并发访问的格子数是否达到预设值。

  • 然后,为了让报表引擎在计算报表之前就能够智能地判断报表的格子数,报表属性里还提供了报表格数属性,如图:

4.png

  • 最后,报表引擎在计算任何一个报表之前,都会先读取报表格数属性,计算出该报表可能的格子数,将该值叠加到内存中的一个存放当前所有格格数的变量中,利用这个变量和reportConfig.xml文件中的maxCellNum进行对比,如果大于maxCellNum的值,就不允许这个报表计算,如果不大于,就继续进行计算。从而达到了动态控制并发数的目的。

引自:润乾报表知识库
相关文章:一种实现类似excel把负数显示成红色且去掉负号的方法 ; 导入带公式excel的问题web报表的扩展功能润乾报表出了新版统计图解决行式填报导入excel发生错位的问题