weblogic Server内部结构和相关的配置
Weblogic Server内部结构和相关的配置
?
Weblogic Server内部结构图:
http://soft.zdnet.com.cn/software_zone/2007/1004/535404.shtml
(一) ?原理简单说明
?
服务器启动,就会绑定到相应的端口,并为一个端口分配一个线程以接受连接请求,一旦服务器接受到连接请求并建立好连接以后,监听线程将处理权交给套接字复用器,套接字复用器进行一定的处理,并会负责选择利用那个执行队列并将请求置入其中。当有一个请求进入执行队列,就会有一个空闲的执行县城从该队列里面取走并向调用者返回结果。
?
(二) ?执行队列和执行线程的相关配置
?
执行线程数量有一定的限制,在服务器启动的时候,就已经形成了一个含有一定数量执行线程的池,执行线程可能跨servlet,ejb和jdbc等,由于执行线程仅当程序成功结束或者出现异常才能被释放继续处理其他请求,所以如果执行线程执行的不够快,而请求又多的情况下,就会造成执行队列的阻塞。
?
相关的配置信息有:
?
server菜单―〉configuration页---〉高级配置---〉Config Execute Queues中的配置项如下:
?
1、Queue Length队列长度,执行队列的长度
?
2、Queue Length Threshold Percent 一个百分数,当request的数量达到队列长度的这个比例的时候,Weblogic会发出overflow的标志信息。
?
3、Thread Count 服务器初始创建的执行线程的数量
?
4、Thread Increase 如果Weblogic发出overflow的标志信息,Weblogic会尝试增加这个数量的执行线程,以解决处理矛盾。
?
5、Threads Maximum最大执行线程数
?
6、Threads Minimum最小执行线程数
?
7、Thread Priority线程优先级
?
另外server菜单―〉configuration页---〉tuning子页中还有一些相关的配置:
?
1、 ?Stuck Thread Max Time 黏联线程时间,超过这个时间没有返回的执行线程,系统将认为是黏联线程。
?
2、 ?Stuck Thread Timer Interval 系统检查黏联线程的时间间隔
?
如果Weblogic认为某个队列中的所有的线程全部黏联的话,Weblogic将会增加执行线程的数量。
?
注意:执行线程的数量一旦增加,目前Weblogic不会去减少他,如果增加了一些线程以后再次出现overflow的警告,Weblogic会继续增加执行线程的数量,一直到达到上限为止。
?
(三) ?套接字复用器的相关配置
?
Weblogic 带有两个版本的套接字复用器,纯java版和本地接口版(jni),一般来说在访问量小的情况下,java版比jni版性能要好一些,因为jni的API 调用会损失一部分性能,但是访问量大的情况,一般都是jni版的性能比较好,所以尽量保证Weblogic实用本地接口版的套接字复用器。
?
相关的配置参数有两个,在server菜单―〉configuration页---〉tuning子页中的第一个和第二个配置项。
?
Enable Native IO :启用本地IO,勾选这个配置以后,Weblogic就会启用本地接口版的套接字复用器
?
Socket Readers :如果不选上一个选项,则这个选项可用,也就是说java版的套接字复用器会被启用,并且,java版的复用器会从执行线程中抽出这个比例的线程用于处理socket的请求。(和java客户端访问有关?)
?
web应用程序的相关配置
?
?
1、单线程模式servlet
?
默认情况下,一个servlet实例将会产生多个线程来同时响应多个请求。
?
如果某个servlet实现SingleThreadMod旗标接口,那么这个servlet将会自动拒绝多路并行请求的模式。在这种情况下,Weblogic会产生一个servlet实例池来满足单线程的要求。
?
目前,应该尽量避免使用单线程模式的servlet,如果需要在大容量的系统中使用单线程模式的servlet,那么应该调整如下的参数:
?
Single Threaded Servlet Pool Size 这个参数可在Weblogic.xml或者在Weblogic控制台上webapplication菜单---〉configuration页---〉Descriptor ?子页中进行设置。
?
默认为5。
?
2、Weblogic生产模式下会自动监测servlet和jsp的更改情况,在产品模式下,不需要这些检查,可以通过下面的参数更改:
?
JSPPage Check Secs和Servlet Reload Check Secs均设为-1这两项是Weblogic检查jsp和servlet的时间间隔。设置为-1,Weblogic将不再检查。
?
关闭JSPKeep Generated和JSPVerbose,产品模式下也不需要这两个选项。
?
Enable JSP Line Numbers 这个选项是启用jsp行号的选项,启用行号的目的是用来支持调试,有些IDE可以在jsp生成的java源代码中设置断点用于调试。生产模式中也不需要。
?
注意:在产品发布模式下,请禁止对servlet和jsp的变更检查,这样除了能提高效率以外,还可以防止用上传文件的方式对服务器的攻击。如果需要更改servlet和jsp,可以重新部署应用。
?
3、Session和cookie的相关配置
?
概念会话cookie:如果不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的 cookie被称为会话cookie。
?
Session Cookie Max Age Secs 就是会话cookie的超时时间,设置小于0表示不限制。
?
Session Invalidation Interval Secs 检查过期session的周期
?
Session Timeout Secs session的超时时间
?
4、Jdbc连接池的配置
?
URL 连接池地址
?
Driver Classname :jdbc驱动类名
?
Properties :属性,例如user=examples
?
Password :密码
?
Initial Capacity :初始连接数
?
Maximum Capacity :最大连接数
?
Capacity Increment :连接池每次增加连接的数量
?
?
?
Statement Cache Type :prepared statements缓存的策略,LRU算法在有新的语句到来时,将最不经常被用得语句调整出缓存。FIXED算法为先进先出的算法
Statement Cache Size :缓存中语句的最大数量,调整这个数值的大小,有利于提高系统的效率。?
?
java虚拟机配置
?
JRockit 是BEA公司开发的Intel平台之上的高性能以及高可管理性的jvm产品,在Intel平台上使用JRockit无疑会大大的提高效率。使用向导建立 server的配置的时候,可以选择JRockit作为该server的虚拟机,另外,也可以在域的startWeblogic.cmd或者 startWeblogic.sh脚本中配置使用JRockit。
?
?
?
使用JRockit:
?
set JAVA_VENDOR=BEA
?
set JAVA_HOME=c:beajrockit81sp4_142_05
?
使用Sun的jvm:
?
set JAVA_VENDOR=Sun
?
set JAVA_HOME=c:beajdk142_05
?
?
?
u ? ? ? 与java虚拟机相关的参数配置可在startWeblogic.cmd或者startWeblogic.sh脚本中设置,在其执行java命令之前一行加入如下指令:
?
set JAVA_VM=%JAVA_VM% “这里加入虚拟机参数”
?
JRockit上的一些参数解释如下:
?
选项
? ??
?
描述
?
-X
? ??
?
显示扩展Java选项
?
-Xallotype
?
-Xallocationtype
? ??
?
可取值global和local,定义使用本地线程还是全局线程。
?
global,在最大堆尺寸比较小时(小于128M)或者应用程序大量使用了线程时使用。
local,在最大堆尺寸比较大时(大于128M)或者应用程序少量使用了线程时使用。
?
每个本地线程区都要消耗大约2K的内存,如果大量地使用了线程,本地线程不但会造成内存空间浪费,而且还会造成堆碎片。使用全局线程机制会减少堆碎片,但在内存分配方面速度要慢一些。
?
-Xbootclasspath
? ??
?
指定类搜索路径,可以是ZIP和JAR文件,以;或:分隔
?
-Xcleartype
? ??
?
定义内存清理时机,可取值gc, local, alloc。gc表示在垃圾回收时清理内存;local表示时分配一块local线程区时清理;alloc表示内存区要被分配给其它对象时清理
?
-Xgc
? ??
?
选择要使用的垃圾回收器的类型,可取值:
?
gencopy:分代复制收集(默认)适合调试期间使用
?
singlecon:单空间并发,无中断并发
?
gencon:世代并发,暂停时间最短
?
parallel:parallel并行回收器,会导致应用程序间歇暂停,但会带来最大吞吐量。
?
如果-Xmx小于128M,缺省使用gencopy,否则使用gencon
?
-Xgcpause
? ??
?
打印由垃圾回收器造成的停顿时间
?
-Xgcreport
? ??
?
打印垃圾回收报表
?
-Xjvmpi
? ??
?
是否允许JVMPI事件,这些事件有:
?
entryexit(缺省ON)
?
allocs(缺省ON)
?
monitors(缺省ON)
?
arenasdelete(缺省OFF)
?
例如:-Xjvmpi:allocs=off,monitors=off,entryexit=off
?
-Xmanagement
? ??
?
激活JVM中的管理服务器,在JVM的管理控制台能连接到它之前,必须先激活。
?
-Xms
? ??
?
设置初始堆大小,单位有K、M、G
?
-Xmx
? ??
?
设置最大堆大小,单位有K、M、G
?
建议:应设置-Xms=-Xmx以免去分配堆的时间
?
-Xnativethreads
? ??
?
使用本地线程系统,这是缺省选项
?
-Xnoclassgc
? ??
?
禁止对类作垃圾回收
?
-Xnohup
? ??
?
告诉JRockit,忽略CTRL_LOGOFF_EVENT和SIGHUP事件
?
-Xns
? ??
?
设置nursery尺寸,单位有K、M、G
?
Nursery是垃圾回收器用来存放临时对象的地方,应该在保证垃圾回收暂停时间最短的情况下,尽量大的调整nursery的值。
?
对于-Xgc:gencopy,缺省的Nursery大小为320KB/CPU,对于10个CPU的系统来说,Nursery大小为3200KB (3.2M)对于-Xgc:gencon,缺省的Nursery大小为10M/CPU,对于10个CPU的系统来说,Nursery大小为100M
?
-Xss
? ??
?
设置线程栈尺寸,单位有K、M、G
?
-Xthinthreads
? ??
?
使用JRockit的高性能线程系统,在IA64上不可用。
?
注意:瘦线程系统目前还没有全面推广,不建议使用
?
-Xverbose
? ??
?
让JRockit打印更多的信息,可选的参数有:
?
codegen、cpuinfo、gc、load、memory、Opt
?
-Xverify
? ??
?
作完整的bytecode一级的校验
?
?
?
u ? ? ? JRockit的管理控制台的使用
?
在JRockit的启动参数中加入-Xmanagement,以便启动JRockit的时候同时启动其Management Server。
?
在JRockit的bin目录下,运行console.exe程序
?
建立一个新的连接,连接需要监视的JRockit(监视端口默认为7090)
?
在JRockit Management Console中,将Tools/Preferences菜单中的Mode of operation属性设为developer
?
在Method Profiler属性页中添加你所需要观察的类的成员方法
按Start按钮让Method Profiler开始进行统计