【问题标题】:AJP could not acquire lock to page, PageAccessSynchronizer warningAJP 无法获取页面锁定,PageAccessSynchronizer 警告
【发布时间】:2014-06-24 18:48:11
【问题描述】:

我最近在我们的日志中发现了这些警告。我不是线程或 tomcat 方面的专家。有人对如何调试此问题有一些建议吗?

我们正在一个 tomcat 服务器上运行一个 wicket 应用程序。让我知道是否有任何其他信息有用。提前感谢您的帮助。

[Jun 24, 2014 11:28:40] WARN [org.apache.wicket.page.PageAccessSynchronizer]
- Thread 'ajp-   bio-8009-exec-26' failed to acquire lock to page with id '4',
attempted for 1 minute out of allowed 1 minute. The thread that holds the 
lock has name 'ajp-bio-8009-exec-20'.

[Jun 24, 2014 11:28:40] WARN [org.apache.wicket.page.PageAccessSynchronizer]
- "ajp-bio-8009-exec-20" daemon prio=5 tid=40 state=RUNNABLE 

【问题讨论】:

  • 我发现我可以使用 kill -3 转储 ubuntu 中的 tomcat 线程日志,这提供了一些见解。

标签: java tomcat wicket ajp


【解决方案1】:

我曾经在一个数据库查询很长的页面上遇到过同样的问题。该查询预计会很长,因此该页面的加载时间预计会超过 1 分钟。但是,如果我单击另一个页面,该页面将在第一个页面之后加载,如果它在一分钟内没有开始加载,则会超时,在这里我遇到了与您相同的错误。

我通过延迟加载我的长数据库查询页面解决了这个问题。 AjaxLazyLoadPanel 的一个示例是 here

您可以做的第二件事是 svenmeier 建议的操作,并像这样增加超时:

getRequestCycleSettings().setTimeout(Duration.minutes(3));

这仍然会使第二个请求等待第一个请求,但 Wicket 给了它更多时间。

【讨论】:

  • 这正是正在发生的事情。执行查询需要 193 秒。我通过将效率极低的查询重写为 2 秒解决了这个问题。
【解决方案2】:

处理页面时,Wicket 将等待所有进一步的请求。这些将在可配置的 IRequestCycleSettings#timeout() 后放弃。

检查为什么您的页面需要这么长时间才能响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2019-03-25
    • 2014-09-18
    • 2013-02-10
    相关资源
    最近更新 更多