
报表并发控制
模板结果缓存与共享
1.问题描述
对报表进行访问时,若模板的数据很大,每次访问都会从服务器端重新读取数据,这样就加大了服务器的压力并且导致访问报表的速度变慢,为此可以设置模板缓存,使访问过模板后再次访问该模板时直接从缓存中读取而不需要从服务器端重新读取以此来减小服务器的压力以及提高报表的访问速度。
1.1读取模板缓存数据的条件
必须是相同模板如该模板有参数则必须输入的参数值是相同的,即模板的展现结果是相同的。
2.原理
下面我们以一个例子看下原理客户端A访问服务器上的报表设计模板,从数据库中读取,生成想要的模板结果文件,缓存到某处,并传回客户端。
而客户B访问服务器此模板时,若返回的结果与客户端A访问放回的结果相同,于是不从数据库中的读取,直接去拿A缓存的那些文件,然后传回客户端。
由此可以看出从缓存取模板结果远快于从数据库中读取数据。
3.设置方法
可以对单个模板进行缓存设置,可以对所有模板进行缓存设置,下面我们分别看下设置方法。
3.1单个模板的缓存设置
缓存设置
在访问报表的路径后加&__cache__=true,表示该报表启用缓存,如:http://localhost:8075/WebReport/ReportServer?reportlet=GettingStarted.cpt &__cache__=true。
注:只有在访问模板的url后加__cache__=true,才会生成缓存数据,并且也只有在url 后加__cache__=true时,才会从缓存中读取数据。
缓存有效时间设置
选择菜单模板>模板web属性即可设置,如下图:
如某报表执行需要5秒中,设置的报表缓存有效时间为10秒,用户A第一次访问该报表时,会将报表结果缓存下来,缓存时间为15秒;
从A刚开始访问报表的15秒内,若用户B同样访问了该报表,将直接获取A访问时的计算结果。
3.2所有模板的缓存设置
进入FR平台系统中,选择管理系统>系统管理>缓存,勾去重新读取模板就可以启用缓存了。
注:是否重新加载报表意味着是否读取缓存,如果不重新加载报表,那么就是读取缓存的同一张模板的信息;如果重新加载报表,就是不读取缓存信息,重新运行报表。
服务器线程数优化
1.服务器线程概念
一般服务器都需要承受较高的访问量,能够同时响应不同用户的请求,在服务器中使用线程来处理接收的每个请求,若能够合理管理线程数,服务器就能够更好的在恶劣环境下保持较高的稳定性和健壮性。
各Web服务器管理线程主要用到如下几个参数:
最小线程数:服务器最少保证的线程数;最大线程数:服务器并发处理的最大任务个数,超过该数时,请求会进入等待,等待空闲线程;
最大等待时间:服务器线程数超过最大线程数,进入等待的请求,超过最大等待时间时,服务器会绝此次请求,返回connection refused。
2.如何设置服务器线程数
一般的服务器操作都包括量方面:计算(主要消耗cpu)、等待(io、数据库等),最重要的参数就是“最大线程数”:
第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要就是cpu 的运算能力,此时最大线程数应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。
第二种极端情况,如果我们的操作是纯粹IO或者数据库,那么响应时间的主要就变为等待外部资源,此时最大线程数应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file。
而现实应用中,我们的操作都会包含以上两种类型(计算、等待),所以最大线程数的配置并没有一个最优值,一定要根据具体情况来配置。
最好的做法是:在不断测试的基础上,不断调整、优化,才能得到最合理的配置。Tomcat服务器并发数查看与修改
1.问题描述用户访问某张报表时,服务器就使用一个线程来处理报表运算。
如果访问的人数太多且报表运算量大的话,同一时间争抢服务器cpu线程的人就会很多。服务器响应能力就会减弱,所以我们需要合理控制服务器线程个数。
2.设置方法
2.1设置方式
我们可以通过修改Tomcat服务器的配置,来控制线程数。
打开%Tomcat_HOME%/conf/server.xml文档,找到 在Connector port="8080"后面加上相应地参数控制线程数,控制参数如下: minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75 acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100 设置完成后如同: web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。 这里的连接数是无法直接给出最佳配置的,需要根据您的实际情况,在不断调整,不断测试的基础上,才能到到最合理配置。 1.问题描述 用户访问某张报表时,服务器就使用一个线程来处理报表运算。 如果访问的人数太多且报表运算量大的话,同一时间争抢服务器cpu线程的人就会很多。服务器响应能力就会减弱,所以我们需要合理控制服务器线程个数。 2.解决方案 2.1修改Weblogic服务器并发 Weblogic服务器不但修改xml文件来达到效果的,另外还要修改一下cmd文件。2.2修改weblogic domain的config.xml文件 在对应位置加入红色标注的两行内容: 2.3在startweblogic.cmd脚本中加入一下java启动参数 -Dweblogic.configuration.schemaValidationEnabled=false修改Websphere服务器并发 Websphere修改方法略有不同,是通过打开控制台,在对应位置进行修改即可;当然也可修改配置文件,控制台比较直观方便,启动服务器打开控制台找到如下位置,修改50和200,200就是最大线程数。 Jboss服务器并发数查看与修改 1.问题描述 用户访问某张报表时,服务器就使用一个线程来处理报表运算。 如果访问的人数太多且报表运算量大的话,同一时间争抢服务器cpu线程的人就会很多。服务器响应能力就会减弱,所以我们需要合理控制服务器线程个数。 2.解决方案 2.1修改Jboss服务器并发 Jboss的版本不一样,对应的修改的位置也不一样,主要分为以下两种情况:Jboss4.0.2与jboss4.2.2.GA。 2.2Jboss4.0.2的连接数修改 打开JBOSS目录jboss-4.0.2>server>default>deploy>jbossweb-tomcat55.sar 下的server.xml文件,修改连接数即可。 例如把250修改为300。 2.3jboss4.2.2.GA的连接数修改 打开JBOSS目录jboss-4.2.2.GA>server>default>deploy>jboss-web.deployer 下的server.xml文件,修改连接数即可。 并发数FAQ address pool is full错误处理 当发生address pool is full这个错误时,一般是由于并发不够的原因,如何来确认是否是这个原因呢?在管理平台|服务器配置|监控下面,看到当前系统在线用户数,然后再比较注册信息页面里的Concurrency,就可以判断是否超过购买的并发数。解决方法就是减少并发人数或者增大最大并发数1.解决方案 1.1查看服务器状态 打开FR管理平台http://localhost:8075/WebReport/ReportServer?op=fr_platform,选择服务器配置|服务器状态,可以看到下图界面 服务器状态显示被访问的报表名,访问用户IP和访问用户名,还有当前系统在线用户数。 现在在浏览器端打开一个新的选项卡,在地址栏里面输入如: http://localhost:8075/WebReport/ReportServer?reportlet=doc/Advanced/ GroupReport/CusGroup_6.cpt 来访问FineReport里自带的模板CusGroup.cpt 然后刷新之前打开的管理平台,选择服务器配置>服务器状态,可以看到当前系统在线用户数为1,如下图 1.2查看注册信息 在管理平台内点击服务器配置>注册信息,查看版本注册信息,如下图 Concurrency为5,Concurrency就是购买的最大并发数,如果最大并发数<当前系统在线用户数,就会发生address pool is full这个错误
