使用WebLogic搭建企业应用需要注意的一些问题2

上一篇 / 下一篇  2008-07-10 21:49:39 / 个人分类:Weblogic

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP

以下提到的一些问题,是我在我们的企业应用中碰到的一些WebLogic方面的问题,现在整理出来,供大家参考,希望对大家在使用过程中能有所帮助,少走弯路,那就“善莫大焉”了!51Testing软件测试网8oyCrOY

WebLogic的连接池配置好以后,为什么Test不能通过?

x8@t8P^&E0

这个问题可能是比较常见的问题,我们可能会有需要进入WebLogic的控制台测试当前配置的数据库连接池是否可用,也就是说,测试通过WebLogic是否能连接到数据库服务器上去。但是,明明WebLogic控制台中关于Connection Pool的页面上提供了一个Testing的功能,点击Testing就是不能测试成功。你也许会怀疑是数据库宕机了,其实不一定,也许可能是你的关于Connection Pool的配置没有设置正确。请打开控制台,在窗口的左边点击Services进入JDBC下的Connection Pools,然后点击你设置的连接池,窗口的右边出现了一些配置信息,点击Configuration下面的Connections,点击下面Advanced Options的SHOW链接,看看其中的Test Reserved Connections属性前面是否被选中,同时,确定最下面的Test Table Name是否正确(默认情况下都是访问Oracle的dual表,应该没有问题)。OK如果都没有问题,那可能就是连接池的基本设置有问题。基本设置有问题,就不详细讲解了吧!如果这些都没有问题,那就需要检查你的数据库服务器了,希望不要出现这种问题才好!

O/]u%z+o xY n0

所以,一定要设置Test Reserved Connections才能使Connection Pool的Testing功能正常运作。51Testing软件测试网`/k5B.do A5{Nx zs9i

同时,关于连接池配置中的最大数量和最小数量的问题,据Bea的工程师介绍说,最好是把最小值最大值设置成一样。原因是WebLogic在给连接池分配连接或者回收多余的不需要的连接的时候,需要消耗部分系统资源。我最开始就听了Bea工程师的话,设置成都是50个连接。可是后来在RAC的应用中就发现了问题,这在下面的问题中会提到。(不听不行啊,人家毕竟是工程师,又在给我们解决问题,要是不按照他的要求来做,他就咬死了说是这个问题,我可承担不起这个责任!)51Testing软件测试网"Sh`K_N

WebLogic如何连接Oracle RAC?51Testing软件测试网 v ZWxJ

WebLogic8.1.3以前的版本都不支持连接Oracle的RAC应用,如果是WebLogic的以前的版本,企业应用又需要连接RAC,只能通过WebLogic的Cluster来实现,每一个Cluster的Client连接一个RAC的节点。这种方式是不能体现出Oracle RAC的在多个Oracle节点之间分摊负载的优势。51Testing软件测试网Q+u,m;gs9N

从WebLogic8.1.3版本之后,WebLogic开始支持连接Oracle的RAC,不过配置起来有点麻烦,具体的技术资料可以参考
http://e-docs.bea.com/wls/docs81/jdbc/oracle_rac.html.51Testing软件测试网/nPf.gw y

举例说明:如果你通过两台机器安装Oracle的RAC,其中一台机器的节点sid名字叫db1,ip地址是10.1.1.1,另外一台节点的sid名字是db2,IP地址是10.1.1.2,对外提供的统一的sid名字是db,那么我们配置WebLogic的基于RAC的连接的服务器地址就是

!Py#`\%AI4R$Qj0

jdbc:oracle:thin:@(DEscrīptION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.2)(PORT=1521)))(FAILOVER=yes)(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db))) 

K U!z5c5k]0

(这个,在Bea网站上提供的文档中的例子都是错误的!少了一个括号!害我为此花了一天的时间去找问题,我就奇了怪了,按照他们技术文档提供的内容一步一步来做都会错,TNND!)51Testing软件测试网3TB I@q

注意设置WebLogic的Connection Pool的连接池大小的时候,一定要设置为能进行增减。也就是说不要设置连接池的Initial Capacity和Maximum Capacity为一样的数。这可能会导致出现两个Oracle的节点服务器,一个的CPU占用已经达到99%-100%,而另外一个服务器还是10%左右的情况。这个问题也曾经困扰我很长时间,按理说Oracle的RAC安装应该是没有问题,WebLogic配置也没有问题,为什么还会出现两个数据库服务器负载不均衡的现象呢?后来我分析了原因,可能的原因如下(仅供参考):

?C*?-C4ff0

Oracle提供的JDBC驱动程序,在实现RAC的机制上估计采用了某种基于数据库服务器负载的算法,这样,Java应用通过JDBC访问数据库的时候,就能根据当前RAC节点服务器的负载进行评估,选择一个压力较小的数据库节点作为响应的服务器。但是,这里我们采用了WebLogic的连接池,大家都知道连接池的机制,就是初始化一大批的与数据库的连接,放在一起,然后在需要的时候,从中取出一个进行响应。假设这里我们Initial Capacity设置为50,Maximum Capacity也设置为50,那么在WebLogic启动的时候,它就会初始化50个数据库连接。因为WebLogic刚启动的时候,数据库的压力可能基本上不存在,两个Oracle的节点负载都非常小,那么,根据Oracle的JDBC的算法,很有可能是这些连接都连到一个RAC的节点上去了。当这50个连接都正常使用起来,数据库服务器压力增大,因为连接池不会回收和重新分配连接,所以数据库的压力都跑到一个RAC节点上去了,导致一个节点压力非常大,而另一个节点压力基本没有的怪现象。51Testing软件测试网bm s a8n

我不知道我这个解释是不是最终正确的版本,但是我在我们的企业应用中,把相应的设置进行了处理以后(Initial Capacity设置为20,Maximum Capacity设置为50,Capacity Increment设置为5),就没有再出现过这个现象。我估计就是因为在数据库服务器访问用户增多压力大的时候,连接池能生产新的连接供连接池使用,新生产的连接根据压力情况,会连接到新的RAC节点上去,这样就分摊了负载。因为我是通过结论来推测原因的,没准推论过程不正确,但是结论却歪打正着,估计要气死一大批人了。

P!Q~[s[7^8Fg_0

如何修改WebLogic的weblogic.kernel.default参数?51Testing软件测试网iN K9\"wR{t

weblogic.kernel.default其实是一个WebLogic的核心参数,设置的值就是WebLogic用来响应客户端请求的线程数量。也就是说,一个用户登陆应用系统进行某操作,则WebLogic将从weblogic.kernel.default中分配一个线程给该用户。默认情况下,这个参数值是40。比如对大的企业应用,同一时间登陆操作系统的用户非常多,则40个线程就显得太少了。同时,如果你的应用程序设计得不好,造成很多操作速度非常慢,因为WebLogic要等待你一个操作完成之后,才进行线程的回收处理,如果同一时间有很多线程在执行非常慢的操作,这也会引起线程数量不够的问题。

*@o9o[ TXl0@0

具体的表现就是在WebLogic的控制台的myserver中的Monitoring页面下的Performance页面中,Queue Length显示不是等于0,图像可能是一个曲线。Queue Length这个参数的意义就是“在等待队列里的请求数”。正常情况下,应该是0,图像是一个水平的横线。也就是没有客户端的请求会等待,都能及时的得到系统的处理。51Testing软件测试网IOI(^ LwD%y

如果确认是因为用户过多的原因需要增大weblogic.kernel.default参数的值,我们怎么修改?51Testing软件测试网1RIP#S;J$G]2Q/W

进入WebLogic控制台——左边窗口的mydomain——servers——点击myserver——Configuration——General——点击Advanced Options的Show链接——最下面的Configure Execute Queues 链接——weblogic.kernel.Default链接——Thread Count参数。的却是隐藏的比较深。修改Thread Count的值,然后重启WebLogic就可以生效了。

E*qg0Wd0

TAG: Weblogic

 

评分:0

我来说两句

Open Toolbar