weblogic Server内部结构图:
(一) 原理简单说明
服务器启动,就会绑定到相应的端口,并为一个端口分配一个线程以接受连接请求,一旦服务器接受到连接请求并建立好连接以后,监听线程将处理权交给套接字复用器,套接字复用器进行一定的处理,并会负责选择利用那个执行队列并将请求置入其中。当有一个请求进入执行队列,就会有一个空闲的执行县城从该队列里面取走并向调用者返回结果。
(二) 执行队列和执行线程的相关配置
执行线程数量有一定的限制,在服务器启动的时候,就已经形成了一个含有一定数量执行线程的池,执行线程可能跨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的请求。