我很难调试响应时间较长的问题。我的Web应用程序有时需要很长时间才能做出响应,而我很难确定具体的请求是罪魁祸首。我遇到的麻烦是,tomcat仅在响应请求后才记录访问日志。我想知道是否有一种方法可以记录所有传入的请求(不等待响应),或者告诉tomcat发出当前正在处理的所有请求(类似于jstack,但是显示线程显示我当前/活动的请求网址)?
最佳答案
服务完成后,可以通过使用耗时的令牌激活Extended Log Valve来识别缓慢的请求。正如您想实时看到的那样,这不是您的真正问题,但是尚不清楚您是否已经确定长时间响应请求。
VisualVM将向您显示正在运行的线程,但不足以了解正在发生的事情。可能您再次需要激活扩展日志阀,这次使用x-threadname令牌与VisualVM中看到的进行比较。但是对于调试本身而言,上面的解决方案(花费时间的令牌)通常就足够了。
但是,仅凭应用程序实际上根本没有问题(而且这似乎是一个随机问题),识别瓶颈就不够了。应用程序是否使用数据库?如果是这样,请使用例如MySQL激活慢速查询日志。它是否使用其他任何层(身份验证,NFS / CIFS等)?如果是这样,您需要监视它们的可用性,以防它们在不可用时阻塞任何内容。