Weblogic服务器尝试抑制当前工作线程并开始处理新请求

时间:2011-06-19 11:00:21

标签: java weblogic threadpool

我在Weblogic 9.2上部署了一个Web应用程序,Apache完成了代理传递负载平衡。我能够观察到当新请求进入时当前请求处理暂停。这仅在峰值负载条件下观察到。等待时间高达6-7秒,然后当前线程开始。此行为是从应用程序日志中得出的。应用程序使用默认工作管理器设置。我们还在应用程序中使用自定义工作管理器。系统参数很好。 CPU,内存,甚至GC循环不到50%的时间不到2秒。在日志中也没有例外。线程监视器未显示任何卡住的线程。可能是什么原因?当前线程是否被推到较低优先级?

2 个答案:

答案 0 :(得分:1)

Weblogic不会将当前线程降级为较低优先级,它会在获取新线程之前始终完成当前线程。

如何确认当前线程在等待6到7秒?理想情况下,在高峰时间进行一些线程转储(在Unix上使用kill -3 <pid>)并看到所有这些等待线程正在做什么?

我不是在调用这些卡住的线程但是在某些资源上可能存在争用(通常数据库是罪魁祸首或外部调用,如Web服务)

您是否有可能正在调用某个下游系统的情况 - 有时该系统无法处理峰值负载。

在每个之间以5秒的间隔进行4或5组线程转储。所以最后你会得到一个日志文件,在app服务器上有大约20-25秒的动作。

然后你应该寻找你想要检查的是一个长时间运行的事务正在发生,所有的线程转储都会显示某个线程id在你的java堆栈跟踪的同一行。简单来说,事务(比如在EJB或数据库中)跨越多个线程转储,因此需要更多调查。

GC需要2秒才能完成的频率?

我怀疑因为某些点存在争用,所以在您看来新请求获得优先权时实际上它们也会在相同的点等待

答案 1 :(得分:0)

终于找到了解决方案。 weblogic应用程序服务器配置了默认的工作管理器设置。根据我们的并发请求将其更改为大小,将100作为初始容量。还要确保数据库连接池具有池中可用的相应连接。一旦设置了这些配置,问题就不再发生了。