-
Notifications
You must be signed in to change notification settings - Fork 7.5k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Arthas实践--快速排查Spring Boot应用404/401问题 #429
Labels
Comments
stack -E javax.servlet.http.HttpServletResponse sendError|setStatus params[0]==404 |
有赞 |
感觉你把这个系列放在wiki更好一些 issue是提问题的地方..... |
wiki没有办法评论交流,issue打上tag,做为区分就可以了。 |
挺强大的工具 |
想知道小问题的答案是什么
难道是request和response都触发了一次 "trace javax.servlet.Servlet" ? |
浏览器访问网站时,会尝试获取网站图标,比如访问当前页面会有下面的请求: 所以会拦截到两次请求。 |
参考这里: https://github.com/hengyunabc/arthas-mybatis-demo |
# for free
to join this conversation on GitHub.
Already have an account?
# to comment
背景
在Java Web/Spring Boot开发时,很常见的问题是:
碰到这种问题时,通常很头痛,特别是在线上环境时。
本文介绍使用Alibaba开源的Java诊断利器Arthas,来快速定位这类Web请求404/401问题。
Java Web里一个请求被处理的流程
在进入正题之前,先温习下知识。一个普通的Java Web请求处理流程大概是这样子的:
Demo
本文的介绍基于一个很简单的Demo:https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-404-401
是哪个Servlet返回了404?
Demo启动后,访问:http://localhost:8080/a.txt ,返回404:
我们知道一个HTTP Request,大部分情况下都是由一个Servlet处理的,那么到底是哪个Servlet返回了404?
我们使用Arthas的
trace
命令来定位:然后访问 http://localhost:8080/a.txt ,Arthas会打印出整个请求树,完整的输出太长,这里只截取关键的一输出:
可以看出请求经过Spring MVC的
DispatcherServlet
处理,最终由ViewResolver
分派给FreeMarkerView$GenericServletAdapter
处理。所以我们可以知道这个请求最终是被FreeMarker
处理的。后面再排查
FreeMarker
的配置就可以了。这个神奇的
trace javax.servlet.Servlet *
到底是怎样工作的呢?实际上Arthas会匹配到JVM里所有实现了
javax.servlet.Servlet
的类,然后trace
它们的所有函数,所以HTTP请求会被打印出来。是哪个Filter返回了401?
在Demo里,访问 http://localhost:8080/admin ,会返回401,即没有权限。那么是哪个Filter拦截了请求?
我们还是使用Arthas的
trace
命令来定位,不过这次trace
的是javax.servlet.Filter
:再次访问admin,在Arthas里,把整个请求经过哪些Filter处理,都打印为树。这里截取关键部分:
可以看到HTTP Request最终是被
com.example.demo404401.AdminFilterConfig$AdminFilter
处理的。总结
链接
打个广告,Arthas正在征集使用者,您的使用是对我们最大的支持。
如果Arthas对您排查问题有帮助,请到这个Issue登记下,并在30分钟内成为Arthas Contributor:
#395
The text was updated successfully, but these errors were encountered: