WebLogic 停留在内部日志记录上

WebLogic stuck on internal logging

执行性能测试后,Web Logic 集群中的多个节点卡住,原因相同:

"[ACTIVE] ExecuteThread: '201' for queue: 'weblogic.kernel.Default (self-tuning)'" waiting for lock java.util.WeakHashMap@8632059 BLOCKED

            weblogic.logging.WLLogger.normalizeLogRecord(WLLogger.java:60)

            weblogic.logging.WLLogger.log(WLLogger.java:37)

            weblogic.diagnostics.debug.DebugLogger.log(DebugLogger.java:231)

            weblogic.diagnostics.debug.DebugLogger.debug(DebugLogger.java:204)

            weblogic.jdbc.wrapper.JDBCWrapperImpl.trace(JDBCWrapperImpl.java:169)

            weblogic.jdbc.wrapper.ResultSet.preInvocationHandler(ResultSet.java:83)

            weblogic.jdbc.wrapper.ResultSet_oracle_jdbc_driver_OracleResultSetImpl.getLong(Unknown Source)

共有 126 个线程阻塞在同一个

waiting for lock java.util.WeakHashMap@8632059

我真的很想知道,是什么导致了这种奇怪的行为,我预计会出现数据库性能问题或缺少 jdbc 连接,但不会出现日志记录问题。如果是这样,是否可以以某种方式禁用此日志记录?

其他节点也有

"[STUCK] ExecuteThread: '206' for queue: 'weblogic.kernel.Default (self-tuning)'" waiting for lock weblogic.logging.FileStreamHandler@153405fb BLOCKED

            com.bea.logging.RotatingFileStreamHandler.publish(RotatingFileStreamHandler.java:75)

            java.util.logging.Logger.log(Logger.java:610)

            com.bea.logging.BaseLogger.log(BaseLogger.java:51)

            weblogic.logging.WLLogger.log(WLLogger.java:42)

有 15 个阻塞的线程。 在所有情况下,底层方法都会执行小型 jpa 查询,由于缓存无效,通过登录从数据库中选择用户。

我遇到了完全相同的问题。很少有线程转储表明 Weblogic 卡在了某种内部调试日志记录中:

 - weblogic.diagnostics.debug.DebugLogger.log(java.util.logging.Level, java.lang.String, java.lang.Throwable) @bci=56, line=246 (Compiled frame)
 - weblogic.diagnostics.debug.DebugLogger.debug(java.lang.String) @bci=6, line=211 (Compiled frame)

可以在管理控制台的环境 > 服务器 > MyServer > 调试中配置内部调试级别。就我而言,我发现所有可能的范围都已启用。禁用调试日志记录并重新启动服务器后,问题消失了。