在hunchentoot中调试请求处理程序

时间:2013-09-14 21:22:01

标签: debugging common-lisp hunchentoot

在我的webapp启动后的某个时刻,我开始从hunchentoot收到Can't handle a new request, too many request threads already警告,并在浏览器中显示相应的http-service-unavailable响应。问题是,这永远不会返回到正常的请求处理,即好像某个请求处理程序“挂起”而没有返回,所以当调用足够的那些处理程序时,最大线程数被命中并保持这种状态。如何获取当前线程列表并检查其中一个线程的当前调用堆栈,以便我可以检查问题出在哪里?这甚至有意义吗?我没有得到任何其他警告。关于如何开始调查的任何建议?

1 个答案:

答案 0 :(得分:2)

我在SBCL上看到了相同的行为(在Windows上)。问题似乎是客户端正在发送Keep-Alive标头,通过在处理请求后保持工作线程运行来实现hunchentoot。它处于空闲状态等待进一步输入但不幸的是,似乎套接字永远不会超时并且线程永远不会被终止,因此我很快就遇到了无法运行的服务器。这似乎是特定于Windows的问题,因为相同的代码在(Ubuntu)Linux下运行良好。

@Paralife你可以暂停一个线程并用

检查它的调用堆栈

(bt:interrupt-thread thread#' break)

你可以使用你想要的线程(bt:all-threads)。