致访客
感谢各位一年多的陪伴,因内容调整,本站将于近日迁移到新域名并不再更新主要内容。
特此通知。
感谢各位一年多的陪伴,因内容调整,本站将于近日迁移到新域名并不再更新主要内容。
特此通知。
概述
本地部署项目后不知道什么原因,项目在cmd中卡住,没有反应。
日志停止输出且前端发请求也没有响应,一直在等待。
问题分析
首先,项目打包成jar,启动方式是windows cmd,批处理内容如下
java -jar dev.jar
主要考虑的方面是以下几点:
- 是否日志输出超出缓冲区大小导致程序假死
- 是否代码问题,处理数据逻辑错误
- 是否与内嵌tomcat有关
另外很重要的一点是部署项目的另一台机器上执行出现bug前同样的操作并不能被复现,且该bug出现的概率非常小。
问题排查
日志排查
问题发生后,服务端并没有关闭
首先审查日志文件
但日志文件并没有输出任何错误,也并未提供任何有价值的信息
代码排查
初步推测可能是拦截器未做出响应
复查拦截器相关代码发现并非该原因
日志异步
考虑到可能是日志非异步输出的问题,但经过测试并非该问题
关键点
因为bug没法复现,便准备重启,按下Ctrl+C的一瞬间,卡住的日志都刷新了出来,服务器也能正常接收请求了。
再次分析
很明显是cmd中运行的程序进入了阻塞状态,在等待用户操作。检查了cmd的状态,发现了cmd窗口标题上的字样发生改变:
标题栏中的“选择”字样消失了
解决方法
经查,是cmd开启了快速编辑模式导致的。
在 标题栏右键-属性-编辑选项 中取消勾选“快速编辑模式”。
问题解决
总结
项目在Windows上运行的坑总是多于linux。
建议优先使用linux部署项目。