2009年3月12日星期四

WLS_021:WebLogic Server 工作原理

当WebLogic Server 启动时,实际是在一个JVM中运行了一个weblogic.Server实例,该实例使用线程池处理所有的请求。线程池主要有两个:
(1)Execute threads:执行应用程序任务,默认数量15个。
(2)Socket reader threads:监听请求,默认数量为execute threads的33%。一味增加线程的数量并不能提高服务器的性能,相反,太多不必要的线程会导致消耗内存,以及频繁的上下文切换(Context Switches),从而导致性能下降。

1.
Execute threads
Execute Threads的数量取决于Server可能同时发生的操作,比如。
如果你不能证明增加
Execute Threads的确能够提高性能,就使用默认值。
一个正常的execute Thread的Thread Dump 如下图所示:
2. Execute thread queue
默认情况下,
所有的请求(servlets、JSPs、EJBs、RMI objects)都来自default thread queue。为了保证重要应用的性能可以为这些应用配置独占的 execute thread queues。
3. Socket reader threads
Socket reader threads 接受来自 listen thread queue的请求,并把请求传递到 execute thread queue中。
分配一定比例的execute threads 作为socket reader threads可以提高Server接受请求的速度。
你需要在读取请求信息的线程数和真正执行应用程序任务的线程数之间作一个平衡。
Socket reader threads中有一个用来执行轮询功能(poll),检查listen thread queue中是否有新请求,其余的处理请求。
正常情况下,
Socket reader threads的Thread Dump如下图所示:4. Listen threads
Listen threads负责把最初的请求放到请求Queue中。因此如果该线程发生问题,将导致请求无法放到Queue中,最终导致Server无事可做。
Listen threads始终处在 socketAccept方法中。
正常情况下,Listen thread的Thread Dump如下图所示:


没有评论: