亲和力是什么?
亲和力连接:亲和力连接用来请求,它是报表服务进程(BIBusTKServerMain)一部分(可以理解为线程)。亲和力根据一个请求是否分配给特定的服务还是分布式环境中可以分配给另外一个服务。亲和力在请求和服务之间,它负责确保请求会被传递到合适的服务器上去执行。亲和力请求类型分为三种:绝对亲和力、高亲和力、低亲和力。
绝对亲和力请求:每个报表进程中除了高亲和力请求和低亲和力请求,还有绝对亲和力请求。绝对亲和力请求只能在特定的报表服务上执行,不管是否有负载均衡。取消报表操作是最好的例子,只有在运行报表的服务上才能取消它。绝对亲和力请求就像他的名字-绝对存在(By its very nature, absolute affinity requests are just that – absolute),因此针对此类请求的参数没有包含在ReportNet参数中以免冗余。绝对亲和力请求负责为客户端和服务器创建关联,以确保长时间运行的报表不会超时。绝对亲和力请求在下面的操作中会用到:等待、获取输出、释放。例子:当用户取消一个正在运行的报表时,绝对亲和力连接负责将取消请求传递给运行报表所在进程。
低亲和力请求:低亲和力请求在任意报表进程中都能以同样的效率完全执行。低亲和力请求是独立的,在系统处理过程中与其他请求没有任何关联。低亲和力请求包括PDF、HTML报表的第一页。报表:报表查询、报表处理;报表认证:元数据检索、查询验证;管理:测试数据源、添加对象(文件夹、job、计划任务等等)、请求门户页面;
问题产生的背景:
最近公司一个项目搞验收,系统是基于B/S架构,采用了IBM Cognos 10;最近一段时间老是反馈报表打不开,具体错误如下:
Original Error: RSV-BBP-0022 绝对亲和力请求"asynchWait_Request"失败,所请求的会话不存在。 RSV-SRV-0042 回溯: RSReportService.cpp(792): RSException: CCL_CAUGHT: RSReportService::process() RSReportServiceMethod.cpp(241): RSException: CCL_RETHROW: RSReportServiceMethod::process(): asynchWait_Request RSReportServiceHelper.cpp(831): RSException: CCL_THROW: RSReportServiceHelper::absoluteAffinityError()
如图所示:
公司的负责这块技术的同事长时间未解决该问题,也通过搜索网上类似解决办法,均未成功解决;现场项目经理打我电话说用户因为这个问题的存在不肯签字确认功能,影响系统验收进度。
我根据这个问题的现象反馈,找到现场的同事远程检查服务器配置环境和参数,结合网上提供的优化配置方法进行设置,折腾了1个多小时,发现现象依旧;
主要问题现象表现为:
- 在系统内打开报表的时候,经常提升asynchWait_Request错误信息,参见上图;
- 如果关闭浏览器再次打开可能就正常;
- 如果用非IE浏览器打开基本都正常;
- 如果直接用Cognos的报表URL地址打开就正常;
- 在Cognos服务器上打开正常;
这个问题非常的奇怪,唯独用IE,在系统内打开报表就出这样的问题,莫非是技术上存在问题?但是之前的每个项目都是采用同样的技术集成报表页面,几乎不存在这个问题出现,偶尔出现过,都通过修改系统的配置最后解决掉了。
既然配置可以解决,那么马上找出Cognos的优化设置的文档进行参考,
现场的Cognos服务器是IBM的X3850,4颗物理CPU,48核心,16G内存,从性能上来说,可配置的空间很大,打开Cognos的服务设置页面,根据IBM的建议,对进程数进行了设置。
还根据百度的文档(可单击访问)对ReportService进行了多方面的参数设置。但是现象依旧存在!而且现象和之前并无差别!证明设置未影响任何内容,也可能优化了性能,但感觉不出,因为之前的报表每个响应成功的话,都是3秒内显示的,故不明显!既然没有解决问题,只能寻求其他的解决途径,经过本人的分析,认为网络也有可能存在问题;
目前系统的网络情况如下:
- Cognos服务器IP是1.x.x.7
- 应用服务器的IP是1.x.x.6
- 客户机的IP是2.x.x.x
简单的来说,客户机和服务器并非同一个网段;为了检查网络情况,开启了多个工具软件,检查Cognos服务器的网络健康情况,发现一切正常。
既然网络无问题,经过思考后,再重新检查问题现象,考虑到如果是单独新开浏览器访问地址就不报错,并且不用IE也不报错,那么会不是IE的Bug?考虑到以前开发B/S系统的经验,那时候发现iframe会导致Session丢失,会不会是这个原因?
根据分析提供的解决办法:
- 在客户机的IE菜单中选择[工具]à[Internet选项],出现如下窗口:
- 将Cognos服务器的IP地址输入进去
- 关闭,并重新打开系统内的报表
- 随意访问各个报表,无论多次操作,均不再报亲和力错误;
至此,问题已经解决,只需要项目经理安排运维人员把客户机的设置配置好,并且更新下用户手册中的描述;特别提醒:一定要写入"本地Intranet",并不是放入"受信任站点"。
在写本文之前,网络上有太多的人搜索"Cognos 绝对亲和力异常"的问题和相似的处理办法,基本上都是不了了之,也不知是否真正解决问题,解决思路都是说进行系统配置之类的,个别提出了在iframe内出错的线索,也未被深究,问题也未得到解决;竟然还有人以'经验'之谈归结于Cognos的Bug,此等Bug是否可以定位为Bug我也不清楚,但解决问题必须要有发散性思维,多多尝试,不要忽视周边的因素而信口开河;认为错误既然是Cognos报的,那铁定就是它有'问题'了!
本文转自suifei博客园博客,原文链接:http://www.cnblogs.com/Chinasf/archive/2013/05/28/CognosError.html,如需转载请自行联系原作者