背景:
BIEE服务器虽然搞了两台,但是只是作为冷备。大部分情况下,如果白天需要发布rpd,我可以切换机器提供服务进行发布。
问题来了:
单机经常挂的情况(现象是:用户无法登陆,提示“正在登录,请稍候...”)。
一般重启下BIEE的几个server进程,可以恢复。但是过不了一会,又会出现这种情况。
中间有一个插曲就是我把机器重启过,导致哈勃的监控客户端程序没有起来,导致对BIEE的监控是失效了,导致了都是用户来反馈我才知道系统挂了,导致老大对我们的系统那几天倍加关心,每天都担心着会挂,也影响了工作。所以得赶紧去优化解决啊。
问题分析:
根据观察,出现这种情况发生在周一,周四的概率比较大。周一一般用户上班会查数据,周四的话,是很多小二要出周报,也会用到数据。
在分析问题的过程中,注意到TCP的连接数在涨,到200或者300多,系统就会无法登陆。
查看TCP连接数的命令如下:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
访问量一大,连接如果未释放,导致新的请求进来无法再处理,所以就想到去调高一些参数。
因为TCP连接发生在多个环节,apache httpd->oc4j->presentation service->BI Server->(mysql DB|infobright DB)
所以看到每个环节都有连接,我就去改了好几个地方的配置。
尝试性的修改了诸多参数。
1,修改登录时初始化变量块对应的数据库连接池的最大连接数,从10改为200。
2,修改了报表访问的底层mysql数据库的最大连接,从100改为500(因为DBA总共开了1000),怀疑查询性能的问题,去找了部分慢sql进行优化,发现对解决系统问题没有什么影响。
3,修改NQConfig.ini里面的配置。比如增大缓存文件的大小
DATA_STORAGE_PATHS = "/usr/local/OracleBIData/cache" 5000 MB; MAX_ROWS_PER_CACHE_ENTRY = 100000; // 0 is unlimited size MAX_CACHE_ENTRY_SIZE = 10 MB; MAX_CACHE_ENTRIES = 5000;
以上配置都没能改变服务器会挂的命运。
4,配置集群
考虑到一台扛不住,那么搞成两台,即使不能根本解决问题,也至少能撑的久一点吧。
所以周五开搞,周六加个班。首先在自己和同事的windows机器上进行测试。按照网上的例子,进行了参数的配置。
需要配置NQSConfig.ini以及NQClusterConfig.INI文件中的参数。
NQSConfig.ini需要修改的参数如下:
CLUSTER_PARTICIPANT = YES; # If this is set to "YES", comment out # SERVER_HOSTNAME_OR_IP_ADDRESSES. No specific NIC support # for the cluster participant yet. // Following required if CLUSTER_PARTICIPANT = YES REPOSITORY_PUBLISHING_DIRECTORY = "\\TAOBAO-A742DB61\shared"; REQUIRE_PUBLISHING_DIRECTORY = YES; // Don't join cluster if directory not accessible
表名该机器要加入集群,以及rpd的共享目录,效果就是,如果在线编辑rpd是,会在该贡献目录下产生新版本号的文件(test.rpd.000001).这样当slave的biee进程重启后,会从该共享目录里去加载rpd。
需要注释掉如下的配置:
#SERVER_HOSTNAME_OR_IP_ADDRESSES = "ALLNICS"; # Example: "hostname" or "hostname":port
还要设置共享缓存:
// Cluster-aware cache GLOBAL_CACHE_STORAGE_PATH = "\\TAOBAO-A742DB61\shared" 1000 MB; MAX_GLOBAL_CACHE_ENTRIES = 1000; CACHE_POLL_SECONDS = 300; CLUSTER_AWARE_CACHE_LOGGING = NO;
NQClusterConfig.INI文件的主要设置加入集群的机器以及master和slave的配置。主要是配置前面的几个参数。
ENABLE_CONTROLLER = YES; // Is Cluster Controller on this node enabled? (note that Analytics Server clustering is enabled via NQSConfig.INI) PRIMARY_CONTROLLER = "TAOBAO-A742DB61"; // DNS name of Primary Cluster Controller SECONDARY_CONTROLLER = "TAOBAO-BE66DF29"; // Secondary Cluster Controller; Must be distinct from PRIMARY_CONTROLLER SERVERS = "TAOBAO-A742DB61","TAOBAO-BE66DF29"; // [,""]... Oracle BI Servers - up to 16 unique machines in list MASTER_SERVER = "TAOBAO-A742DB61"; // DNS name of machine with Oracle BI Server that holds master copies of repositories (must be in SERVERS list)
设置Presentation service的配置instanceConfig.xml
因为是多台机器的集群,所以需要将catalog作为共享的东西,让两台机器都可以向其写入和读取。所以要将catalog所在目录设置成共享的。然后单击的话,DSN可以配置成本机的,集群就要修改下了重新配置下。
在windows图形界面的配置如下:
在linux下,配置如下(下面的server1,server2对应机器的主机名即可。我这里只是举个例子):
[Cluster] Driver=/usr/local/OracleBI/server/Bin/libnqsodbc.so Description=Oracle BI Server ServerMachine=local Repository=Star1 FinalTimeOutForContactingCCS=60 InitialTimeOutForContactingPrimaryCCS=5 IsClusteredDSN=Yes Catalog= UID=Administrator PWD= Port=9703 PrimaryCCS=server1 PrimaryCCSPort=9706 SecondaryCCS=server2 SecondaryCCSPort=9706 Regional=No
然后针对oc4j也要修改下配置,支持oc4j支持转发请求到其他机器上去。修改web.xml文件
SAWBridge com.siebel.analytics.web.SAWBridge oracle.bi.presentation.Sawservers server1:9710;server2:9710
其他的javahost的集群配置就没弄了,因为感觉到瓶颈不在javahost上。
加入集群的机器的配置基本一样,所以在同事的机器上也做了类似的动作。如果参数配置有误的话,用admin tool打开rpd文件时会报错。出错信息会在server的Log目录下,根据这些日志信息,可以定位到哪里的配置出现了错误。
配置都OK后,开始测试集群是否生效。将本机的几个基础进程都起来后,还有启动集群服务这个进程(Oracle BI Cluster Controller)。进程启动都正常,没有报错。但是查看NQCluster.log日志,发现与同事的机器建立连接失败。
[71021] 尝试与 Oracle BI Server TAOBAO-BE66DF29:9703 建立连接失败。
2012-06-15 21:28:13
[71031] 尝试建立与 Cluster Controller TAOBAO-BE66DF29:9706 的连接失败。
打开rpd查看集群的情况,图如下:
一开始一直怀疑是配置的问题,后来纠结了一会后,想到应该是进程建通信的问题。ping机器能ping通。后来telnet对应的端口发现无法连接,所以想到了防火墙的问题。两台机器都把9700,9703,9706几个端口加入了例外。修改后,两台机器就可以发现对方了。
访问报表页面,可以看到两台机器的NQQuery.log上都有日志打出来,说明访问时,集群的根据负载分配请求到BI Server上了。
线下测试OK后,在线上的linux环境下配置总体还是顺利的,就是在配置NFS共享目录的时候遇到了点问题,也是自己没搞过,不了解需要改对应的配置文件增加共享目录以及允许访问的机器ip信息,向师兄咨询后,还是解决了。
顺便这里列下使用NFS服务的话,需要启动如下几个服务:
# service portmap start # service nfs start
然后就是在/etc/exports里增加配置,例如:
/home/admin/shared 172.23.179.109(rw,sync)
mount对应的目录即可。
mount -t nfs 172.23.178.189:/usr/local/OracleBIData/web/catalog /home/jianchen/netcatalog
备注:/home/jianchen/netcatalog在172.23.179.109机器上。它要挂载172.23.178.189机器的共享目录。
But配置集群后依然不能抗住。影响的用户面为50%。有些可以正常访问,有些就提示登陆不了了。
虽然没能抗住,但是也趁这次机会将集群搭建成功也是一个意外的收获吧。之前一直觉得一台机器能抗住,所以一直就没有配置成真正的集群。现在有点压力还是能把想做的事情做了的,呵呵。
5,甚至怀疑是不是oc4j的session内存空间无法再承载了。想去修改session的相关配置,只不过在网上没找到相关的资料,所以没改成。
6,尝试修改过presentation service的参数。想法是,控制每个用户连接的时长,不用了的话,就断开,好提供给新的用户使用。
参考的文章如下:http://obiee-blog.info/security/how-to-setup-session-timeout-in-oracle-biee/
List the three parameters which affects session timeout for BIEE user. There are three types of timeout settings controls the user session : BI Presentation User Server - (Link 1) -> Server -> (Link 2) -> Browser Link 1: The time of connection between the OracleBI Presentation Server and OracleBI Services can be configured using the following steps: 1. Edit the file instanceconfig.xml 2. Add the following line in the block3 3. Restart services OracleBI Presentation Services Notes: 1. The value of default is 3 minutes. 2. The connection between the OracleBI Server and OracleBI Presentation Services is closed and removed. 3. This setting does not affect the connection established between the OracleBI Presentation Services and the WebBrowser, which remains intact pending an activity from the user. Link 2: The time of connection between the OracleBI Presentation Services and the WebBrowser can be configured using the following steps: 1. Edit the file instanceconfig.xml 2. Add the following line in the block ServerInstance) ((/) ServerInstance1440 3. Restart services OracleBI Presentation Services Notes: 1. The internal default value is 1440 minutes (24 hours). 2. The connection between the OracleBI Presentation Services and the WebBrowser is closed and removed. 3. This configuration forces logoff user outside the application, which should make logging into an application to work again. 4. All information and statements in it are lost. Log User Off: Then we can set the property to force the user out of the Logoff OracleBI Presentation Services. This setting only applies to users who have not selected the option “remember my ID and password. 1. Edit the file instanceconfig.xml 2. Add the following line in the block180 3. Restart services OracleBI Presentation Services Notes: 1. The internal default value is 180 minutes (3 hours). 2. To disable this feature using a value larger than the value of ClientSessionExpireMinutes
7,修改[server]的参数
关于第四点,本来我SERVER_THREAD_RANGE,DB_GATEWAY_THREAD_RANGE默认参数值为40-200,后来我把值稍微调整了下,改成了40-1000,发现没有效果。后者咨询其他同事,建议将参数修改成如下:
SERVER_THREAD_RANGE=500-500 DB_GATEWAY_THREAD_RANGE =400-3000
因为真正的原因不在于此,所以我改成这个参数后,也是没能解决问题。
最终修改后的参数调整如下(如下的参数是按照对于在IBM System x3755 Server 机器,red hat linux系统 上BIEE的一篇评测进行修改的,我想评测支持的用户级别为4000,我每天支持的UV为300多,肯定能抗住了):
SERVER_NAME = Oracle_BI_Server ; READ_ONLY_MODE = NO; // default is "NO". That is, repositories can be edited online. MAX_SESSION_LIMIT = 6000 ; MAX_REQUEST_PER_SESSION_LIMIT = 3000 ; SERVER_THREAD_RANGE = 2000-2000; SERVER_THREAD_STACK_SIZE = 0; // default is 256 KB, 0 for default DB_GATEWAY_THREAD_RANGE = 2000-5000; DB_GATEWAY_THREAD_STACK_SIZE = 0; // default is 256 KB, 0 for default MAX_EXPANDED_SUBQUERY_PREDICATES = 8192; // default is 8192 MAX_QUERY_PLAN_CACHE_ENTRIES = 1024; // default is 1024 MAX_DRILLDOWN_INFO_CACHE_ENTRIES = 1024; // default is 1024 MAX_DRILLDOWN_QUERY_CACHE_ENTRIES = 1024; // default is 1024 INIT_BLOCK_CACHE_ENTRIES = 5000; // default is 20
8,同时根据用户的反馈,系统的有一个功能的访问量比较大,涉及到TOP计算,该功能是利用了amoeba程序改写的一个代理程序去访问infobright库和mysql拼装结果后返回结果。发现tcp下对应端口有10多个的close_wait状态。之前该代理程序仅仅安装在一台机器上。所以也怀疑这个引起的系统整体出现问题。于是将该代理程序在两台机器上都进行了安装,进行分流减压。对应机器上的BI server只访问本机的代理,可以保证这个代理程序的风险降低。
基于第7点和第8点,系统的稳定性提升了不少,在应对周一和周四的的高峰期时都抗住了,也没有出现“正在登录,请稍候”的问题了。
整个系统性能问题处理下来,查阅了不少资料,对很多产生进行了进一步的了解。也是有所收获,希望本文能给读者一些帮助,有类似性能优化经验的请多多交流。
附录:一些查阅文档时,收集的博客链接:
http://docs.oracle.com/cd/E12096_01/books/AnyWebAdm/AnyWebAdm_CustAnyWeb6.html
http://docs.oracle.com/cd/E12096_01/books/AnyInConfig/AnyInConfigNQSConfigFileRef5.html
http://obiee-blog.info/security/how-to-setup-session-timeout-in-oracle-biee/