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 > 调试中配置内部调试级别。就我而言,我发现所有可能的范围都已启用。禁用调试日志记录并重新启动服务器后,问题消失了。
执行性能测试后,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 > 调试中配置内部调试级别。就我而言,我发现所有可能的范围都已启用。禁用调试日志记录并重新启动服务器后,问题消失了。