【问题标题】:Why CouldNotLockPageException occured on production server but not on local system?为什么在生产服务器上发生了 CouldNotLockPage 异常,但在本地系统上却没有?
【发布时间】:2021-09-14 23:08:08
【问题描述】:

我们面临CouldNotLockPageException 如果这个异常发生在我们的生产环境中,我们必须重启tomcat。 当我尝试在本地系统和演示服务器上生成相同的异常时。但它无法重现。为了重现该异常,我们尝试通过增加演示服务器上的负载在下载和上传大文件时点击多个 url,但我仍然无法重现它。 在CouldNotLockPageException的堆栈跟踪下面,在这个异常之后我们必须重新启动tomcat

堆栈跟踪

[WARN] 2021-03-24 04:26:56.355 [http-nio-8080-exec-68] PageAccessSynchronizer - 线程 'http-nio-8080-exec-68' 未能获得对 id 为页面的锁定1',在允许的 1 分钟内尝试了 1 分钟。持有锁的线程名为“http-nio-8080-exec-66”。 [警告] 2021-03-24 04:26:56.357 [http-nio-8080-exec-68] PageAccessSynchronizer -“http-nio-8080-exec-66”守护进程 prio=5 tid=368 state=BLOCKED org.apache.wicket.util.lang.Threads$ThreadDump:空 在 biz.smart360.elastic.app.DefaultAppCache$DefaultUserCache.bizRepository(AppCache.scala:146) ~[elastic-app.jar:?] 在 biz.smart360.biz.repository.BizUserSession.repositoryOperations(BizUserSession.scala:73) ~[smart360.jar:0.1.0-SNAPSHOT] 在 biz.smart360.biz.repository.BizRepositoryOperationsDirectResolver.repositoryOperations(BizRepositoryOperationsDirectResolver.scala:21) ~[smart360.jar:0.1.0-SNAPSHOT] 在 biz.smart360.biz.repository.BizRepositoryOperationsDirectResolver.openedTabularViewpointsMenu(BizRepositoryOperationsDirectResolver.scala:47) ~[smart360.jar:0.1.0-SNAPSHOT] 在 biz.smart360.biz.repository.BizRepositoryOperationsResolverTransientProxyBase.openedTabularViewpointsMenu(BizRepositoryOperationsResolverTransientProxyBase.java:62) ~[smart360.jar:0.1.0-SNAPSHOT] 在 biz.smart360.webapp.ui.component.navigation.RepositoryNavigationActionsPanel.onInitialize(RepositoryNavigationActionsPanel.java:101) ~[smart360.jar:0.1.0-SNAPSHOT] 在 org.apache.wicket.Component.fireInitialize(Component.java:878) ~[wicket-core-7.9.0.jar:7.9.0] 在 org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:1070) ~[wicket-core-7.9.0.jar:7.9.0] 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [catalina.jar:9.0.41] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) [catalina.jar:9.0.41] 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.41] 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) [catalina.jar:9.0.41] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [catalina.jar:9.0.41] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [catalina.jar:9.0.41] 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) [tomcat-coyote.jar:9.0.41] 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-coyote.jar:9.0.41] 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) [tomcat-coyote.jar:9.0.41] 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) [tomcat-coyote.jar:9.0.41] 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.41] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?] 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.41] 在 java.lang.Thread.run(Thread.java:834) [?:?] [ERROR] 2021-03-24 04:26:56.359 [http-nio-8080-exec-68] InMemoryErrorReporting - 为用户 jiwon.lim1 注册的 id 为 19bbb439-e89f-40ad-89c3-a05a6805e53e 的错误@yk.co.kr: org.apache.wicket.page.CouldNotLockPageException:无法锁定页面 1。尝试持续了 1 分钟 在 org.apache.wicket.page.PageAccessSynchronizer.lockPage(PageAccessSynchronizer.java:167) 在 org.apache.wicket.page.PageAccessSynchronizer$2.getPage(PageAccessSynchronizer.java:245) 在 org.apache.wicket.DefaultMapperContext.getPageInstance(DefaultMapperContext.java:113) 在 org.apache.wicket.core.request.handler.PageProvider.getStoredPage(PageProvider.java:299) 在 org.apache.wicket.core.request.handler.PageProvider.isNewPageInstance(PageProvider.java:211) 在 org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper.checkExpiration(AbstractBookmarkableMapper.java:335) 在 org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper.processHybrid(AbstractBookmarkableMapper.java:258) 在 org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper.mapRequest(AbstractBookmarkableMapper.java:364) 在 org.apache.wicket.request.mapper.CompoundRequestMapper.mapRequest(CompoundRequestMapper.java:147) 在 org.apache.wicket.protocol.https.HttpsMapper.mapRequest(HttpsMapper.java:101) 在 org.apache.wicket.request.cycle.RequestCycle.resolveRequestHandler(RequestCycle.java:189) 在 org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:219) 在 org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293) 在 org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261)

【问题讨论】:

  • 您应该检查为什么DefaultUserCache.bizRepository 在一分钟内没有返回结果。为什么你'必须重新启动tomcat'?您的所有网络服务器线程是否都停留在调用“bizRepository”中?
  • 相同的代码库在另一台服务器上运行良好,并且没有此类异常 " org.apache.wicket.page.CouldNotLockPageException:无法锁定页面 1。尝试持续了 1 分钟" 但我已经检查并尝试在我的本地和演示服务器上创建相同的异常,但直到我无法重现它。

标签: java spring apache2 wicket tomcat9


【解决方案1】:

当 HTTP 请求在一段时间内(默认为 1 分钟)无法锁定页面实例时,Wicket 会抛出 CouldNotLockPageException

在您的特定情况下,HTTP 工作线程已获得该页面实例上的锁定并等待:

biz.smart360.elastic.app.DefaultAppCache$DefaultUserCache.bizRepository(AppCache.scala:146)

由于某种原因,此方法需要一分钟以上的时间。 您需要调试为什么需要这么长时间。

要在本地复制它,您可以在RepositoryNavigationActionsPanel.onInitialize(RepositoryNavigationActionsPanel.java:101) 添加TimeUnit.SECONDS(90).sleep(),然后加载页面并单击其中的一些Ajax 链接。

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多