web服务请求线程中带有输出语句时,频繁出现线程状态变成了BLOCKED,线程被无限阻塞

alunSemiconductor 2019-01-25 05:47:00

通过Java VisualVM和jconsole等工具查看,发现带有输出语句的请求,线程状态都变成了BLOCKED,都在等待java.io.PrintStream的锁,同时发现有log日志打印到控制台的请求也出现了这个情况,即线程状态都变成了BLOCKED,都在等待java.util.logging.ConsoleHandler
的锁:



从上图可以看出,在等待的锁目前被"http-nio-80-exec-4"拥有:



这个线程一直处于RUNNABLE状态

问题很好解决,不让程序在控制台输出任何东西就好了,日志存文件。
但是究竟是什么原因造成的呢? 查到这里,没有了头绪,希望有知道的能够指点一二,不胜感激。

目前最大的疑问就是像"http-nio-80-exec-4"这种线程处于RUNNABLE状态,但是好像又永远运行不完,导致后面所有带输出的请求线程都成了BLOCKED状态。

...全文
829 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
alunSemiconductor 2019-02-19
  • 打赏
  • 举报
回复
具体问题经过写成博客了:https://blog.csdn.net/ejiao1233/article/details/86678096
alunSemiconductor 2019-01-28
  • 打赏
  • 举报
回复
原因找到了,原来一切问题都是tomcat控制台窗口的“快速编辑模式”导致的,在这个模式下,点击窗口会导致窗口打印暂停,所以涉及到输出到控制台的接口全部表现为阻塞状态,右键点击或者键盘回车键,就会释放这个状态,继续打印。。。
alunSemiconductor 2019-01-26
  • 打赏
  • 举报
回复
引用 1 楼 oldmee 的回复:
这个问题是在哪行代码引起的?


没有固定的位置,现在观察到的如帖子中所描述,输出语句、Log日志打印到控制台,这些地方都有可能发生,但是发生的时机不确定,有时候很久没有发生,有时候启动tomcat就这样了。


对了,需要说明的是,本地测试没有发生过这个情况,服务器(阿里云的轻量服务器,Windows SERVER 2012)上经常出现。
oldmee 2019-01-25
  • 打赏
  • 举报
回复
这个问题是在哪行代码引起的?

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧