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

标签 java weblogic threadpool

我在 Weblogic 9.2 上部署了一个 Web 应用程序,并通过 Apache 完成了代理传递负载平衡。我能够观察到,每当新请求到来时,当前请求处理都会暂停。这种情况仅在峰值负载条件下观察到。等待时间高达 6-7 秒,然后当前线程启动。此行为是从应用程序日志中得出的结论。该应用程序使用默认的工作管理器设置。我们还在我们的应用程序中使用自定义工作管理器。系统参数没问题。不到 50% 的 CPU、内存甚至 GC 周期都花费不到 2 秒。日志中也没有观察到异常。线程监视器没有显示任何卡住的线程。可能是什么原因?当前线程是否被推至较低优先级?

最佳答案

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

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

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

您是否遇到过这样的情况:您正在调用某个下游系统 - 有时该系统无法处理峰值负载。

进行 4 或 5 组线程转储,每组之间的间隔为 5 秒。因此,最后您将得到一个日志文件,其中包含应用服务器上大约 20 - 25 秒的操作。

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

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

我怀疑,由于在某个点上存在争用,因此在您看来,新请求会获得优先级,而实际上它们也会在该同一点上等待.

关于java - Weblogic服务器尝试抑制当前工作线程并开始处理新请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401976/

相关文章:

Java Combo Box 和 MySql 数据库

java - NullPointerException 尝试加载文件

c++ - 创建的事件数量有限制吗?

java - 使用 spring 设置 jooq 数据源

java - 未捕获异常对 Quartz 的 SimpleThreadPool 线程的影响

java - 将可调用内的可调用提交给执行程序服务会导致程序挂起

java - 字节和日期字段的 Genson 序列化问题

java - Thread.interrupt 上的 IllegalThreadStateException

java - 在 .Net 和 Java 之间共享数据(非对象)的最快(性能方面)方式

java - weblogic 上的 ClassCastException