AWS EC2部署的Spring Boot服务突发卡顿超时,求排查建议
解决建议
1. 排查异常请求来源
日志里的MGLNDD_3.38.211.169_80800x0a是明显不符合HTTP规范的非法请求,大概率是恶意扫描或异常客户端发起的:
- 登录AWS EC2控制台,检查安全组规则,只将信任的IP(比如你的本地测试IP)加入8080端口的访问白名单,关闭对未知IP的开放。
- 在EC2实例上执行
netstat -anp | grep 8080,查看当前连接到8080端口的IP,排查是否有大量异常连接占用服务资源。
2. 配置Tomcat过滤非法请求
通过Spring Boot配置Tomcat的请求解析规则,过滤非法请求避免线程被无效占用:
- 在
application.properties中添加以下配置:
server.tomcat.max-http-header-size=8192 server.tomcat.relaxed-path-chars=[]|{}^\`"<> server.tomcat.relaxed-query-chars=[]|{}^\`"<> server.tomcat.strict-query-chars=
- 或者自定义Tomcat配置类,强制拦截不符合规范的请求:
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TomcatConfig { @Bean public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() { return factory -> factory.addConnectorCustomizers(connector -> { connector.setProperty("relaxedPathChars", "[]|{}^\`"<>"); connector.setProperty("relaxedQueryChars", "[]|{}^\`"<>"); connector.setProperty("strictQueryChars", ""); }); } }
3. 检查服务资源占用
服务缓慢可能和资源耗尽直接相关:
- 执行
top命令查看CPU、内存占用情况,确认是否是Java进程资源过载,或其他进程抢占资源。 - 用
jstack <Java进程PID>导出线程栈,检查是否有大量阻塞线程,排查数据库连接池是否耗尽、是否存在IO阻塞等问题。 - 关联数据库(如AWS RDS)查看性能指标,检查是否有慢查询、连接数已满等情况。
4. 重启服务并实时监控
先重启Spring Boot服务释放异常连接,然后执行以下命令实时监控日志:
tail -f /home/ec2-user/apps/deploy/application.log
观察是否有新的非法请求产生,同时验证服务响应速度是否恢复正常。
内容的提问来源于stack exchange,提问作者Lucy Back
相关产品推荐
相关产品推荐

