架构师

您现在的位置是:首页 > 技术博客 > 爱运维

爱运维

Windows系统启动springboot项目黑窗口卡主不动问题

架构师小跟班 2019-08-29爱运维
背景介绍一般项目开发完毕就要部署到服务器上,很多公司的服务器采用的是Linux系统,但也有一些公司用的是Windows系统。最近有个项目,使用Springboot开发,项目打成jar后,部署在win

背景介绍

一般项目开发完毕就要部署到服务器上,很多公司的服务器采用的是Linux系统,但也有一些公司用的是Windows系统。最近有个项目,使用Springboot开发,项目打成jar后,部署在windows环境下,通过命令:java -jar scss.jar的方式启动运行。运行一段时间后,发现CMD黑窗口卡主不动,日志不再刷新,而系统内存、CPU占用等关键指标并没有异常。

原因分析

关闭黑窗口,重新启动应用,当应用无法访问时,找到Java安装目录/bin路径下的jvisualvm.exe ,双击运行,然后在左侧打开我们的应用:GuardApplication,

然后点击右侧的“线程Dump”,保存当前所有线程信息,保存为dump文件,可在左侧点击查看保存内容。


在CMD窗口输入:Ctrl+C,强制结束应用线程,然后重复上面的操作,获得新的线程快照。

比较dump文件内容

执行Ctrl+C线程状态变化的是第二个线程挂起,在等待第一个线程,但是第一个线程在写日志,但一直处在Runnable状态。
结论:一个线程执行时,导致另一个线程IO阻塞,从而导致应用后台卡住。

解决办法

1)将springboot日志输出改为异步方式,避免同步输出引起线程阻塞。

2)windows系统中cmd存在日志输出bug,经常导致日志卡住,具体表现为:命令行卡死不动,但是进程和线程依然再运行。此时敲一下回车键,命令行会马上打印卡死期间输出的信息。

这种情况,只需要对cmd窗口进行设置即可:右键窗口标题,属性,把快速编辑模式关掉就可以了。

文章评论