请大神指导,JAVA日志输出锁,System.out.println死锁

happy一个世纪 2014-12-16 05:56:42
小弟最近做一个数据上报和下发的程序,使用Spring整合的Quartz定时任务,每隔一分钟调用一次,一共9个task,每个task有具体的不同的逻辑,其中又使用多线程向不同的上下级系统发送数据。其中记录一些关键信息用System.out.println,打印异常使用e.printStackTrace,现在发现,9个task运行一段时间后,有时1个小时,有时12个小时,发现后台tomcat不再输出任何日志,使用visualJVM发现所有线程都卡在System.out.println,具体的dump文件内容如下:请大神指教:



"gdnaJobDetail-1" prio=6 tid=0x0000000007f27000 nid=0x1954 runnable [0x000000000cdee000]
java.lang.Thread.State: RUNNABLE
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:282)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
- locked <0x00000007812cb5b0> (a java.io.BufferedOutputStream)
at java.io.PrintStream.write(PrintStream.java:430)
- locked <0x00000007812cb590> (a java.io.PrintStream)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:85)
- locked <0x00000007812cb6e8> (a java.io.OutputStreamWriter)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:168)
at java.io.PrintStream.write(PrintStream.java:477)
- locked <0x00000007812cb590> (a java.io.PrintStream)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
- locked <0x00000007812cb590> (a java.io.PrintStream)
at org.apache.tomcat.util.log.SystemLogHandler.println(SystemLogHandler.java:238)
at com.highershine.gdna2.fmq.GenerateXmlReSendServiceImpl.getTargetServerDir(GenerateXmlReSendServiceImpl.java:79)
at com.highershine.gdna2.task.CheckFeedbackTask.work(CheckFeedbackTask.java:97)
at sun.reflect.GeneratedMethodAccessor989.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)

Locked ownable synchronizers:
- <0x0000000784346648> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
...全文
1133 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hezheng18 2018-11-06
  • 打赏
  • 举报
回复
我在win208r2上碰到了同样的线程挂住问题,开始以为是log4j-1.2.17的版本低(1.x版本存在多线程并发时卡死问题),但将其升级到2.8.2后问题依旧。
再次查询,发现是服务器的命令行程序cmd问题,命令行在选中状态时,会在cmd标题栏显示“选中 管理员***”这样的标题,这时就会挂住,如果在其中点击一下Enter,标题变为“管理员”,挂住问题就不存在了。
后面在这里找到了类似问题,请自行参阅:https://my.oschina.net/u/1030459/blog/908007
happy一个世纪 2017-05-31
  • 打赏
  • 举报
回复
https://stackoverflow.com/questions/5843809/system-out-println-eventually-blocks#comment6713581_5844136 stackoverflow显示这是eclipse3.6.2之前的一个bug!
syz916 2017-04-21
  • 打赏
  • 举报
回复
我也遇到这问题了 "nioEventLoopGroup-1-7" #35 daemon prio=10 os_prio=2 tid=0x000000001a502800 nid=0x266c runnable [0x000000002244e000] java.lang.Thread.State: RUNNABLE at java.io.FileOutputStream.writeBytes(Native Method) at java.io.FileOutputStream.write(Unknown Source) at java.io.BufferedOutputStream.flushBuffer(Unknown Source) at java.io.BufferedOutputStream.flush(Unknown Source) - locked <0x00000000da156198> (a java.io.BufferedOutputStream) at java.io.PrintStream.write(Unknown Source) - locked <0x00000000da156178> (a java.io.PrintStream) at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source) at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source) at sun.nio.cs.StreamEncoder.flushBuffer(Unknown Source) - locked <0x00000000da1562c0> (a java.io.OutputStreamWriter) at java.io.OutputStreamWriter.flushBuffer(Unknown Source) at java.io.PrintStream.write(Unknown Source) - locked <0x00000000da156178> (a java.io.PrintStream) at java.io.PrintStream.print(Unknown Source) at java.io.PrintStream.println(Unknown Source) - locked <0x00000000da156178> (a java.io.PrintStream) at com.network.http.HttpServerHandler.channelActive(HttpServerHandler.java:100) at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelActiveNow(ChannelHandlerInvokerUtil.java:48) at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelActive(DefaultChannelHandlerInvoker.java:78) at io.netty.channel.PausableChannelEventExecutor.invokeChannelActive(PausableChannelEventExecutor.java:66) at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:359) at io.netty.channel.ChannelHandlerAdapter.channelActive(ChannelHandlerAdapter.java:119) at io.netty.handler.timeout.IdleStateHandler.channelActive(IdleStateHandler.java:241) at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelActiveNow(ChannelHandlerInvokerUtil.java:48) at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelActive(DefaultChannelHandlerInvoker.java:78) at io.netty.channel.PausableChannelEventExecutor.invokeChannelActive(PausableChannelEventExecutor.java:66) at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:359) at io.netty.channel.ChannelHandlerAdapter.channelActive(ChannelHandlerAdapter.java:119) at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelActiveNow(ChannelHandlerInvokerUtil.java:48) at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelActive(DefaultChannelHandlerInvoker.java:78) at io.netty.channel.PausableChannelEventExecutor.invokeChannelActive(PausableChannelEventExecutor.java:66) at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:359) at io.netty.channel.ChannelHandlerAdapter.channelActive(ChannelHandlerAdapter.java:119) at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelActiveNow(ChannelHandlerInvokerUtil.java:48) at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelActive(DefaultChannelHandlerInvoker.java:78) at io.netty.channel.PausableChannelEventExecutor.invokeChannelActive(PausableChannelEventExecutor.java:66) at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:359) at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:927) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:523) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$100(AbstractChannel.java:422) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:492) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:328) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) at io.netty.util.internal.chmv8.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1412) at io.netty.util.internal.chmv8.ForkJoinTask.doExec(ForkJoinTask.java:280) at io.netty.util.internal.chmv8.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:877) at io.netty.util.internal.chmv8.ForkJoinPool.scan(ForkJoinPool.java:1706) at io.netty.util.internal.chmv8.ForkJoinPool.runWorker(ForkJoinPool.java:1661) at io.netty.util.internal.chmv8.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:126) Locked ownable synchronizers: - None
happy一个世纪 2016-06-17
  • 打赏
  • 举报
回复
日志全部改用log4j,输出到文件中即可!输出到控制台为啥不行,具体原因未再追踪。
新IT民工 2015-08-17
  • 打赏
  • 举报
回复
没能理解卡住的意思,是不是内存问题。
tianfang 2015-08-17
  • 打赏
  • 举报
回复
磁盘满 也会出现此情况
thisisnew 2015-08-17
  • 打赏
  • 举报
回复
我怎么看的不是卡在输出位了,而是文件流那一块,应该读取xml的出错了,catch异常后没有释放资源或者close或者是每一次使用后没有释放资源,就会导致竞争,所以卡住的
好名字给猪了 2015-08-17
  • 打赏
  • 举报
回复
卡住了,?? 用到了多线程,那么有没有用锁,会不会是死锁
xjulibo 2015-08-16
  • 打赏
  • 举报
回复
楼主解决了吗? 我也碰到了 在线等,挺急的~~
missMeyo 2014-12-18
  • 打赏
  • 举报
回复
什么叫卡主?
  • 打赏
  • 举报
回复
引用 2 楼 tstcylq 的回复:
]一开始用的是log4j,发现总是卡住在log.info语句,怀疑是log4j的问题,后来全都换成System.out.println,发现现在卡住的总是在System.out.println上。
好吧,都是卡在输出位上~ 还有,你的异常为啥是找不到指定文件啊
happy一个世纪 2014-12-16
  • 打赏
  • 举报
回复
引用 1 楼 shijing266 的回复:
为啥不用logger记录
一开始用的是log4j,发现总是卡住在log.info语句,怀疑是log4j的问题,后来全都换成System.out.println,发现现在卡住的总是在System.out.println上。
  • 打赏
  • 举报
回复
为啥不用logger记录
​ 博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌项目名称基于Web的酒店客房管理系统的设计与实现系统说明3.2.1  用户模块功能分析前台模块应主要包括用户登录模块、用户注册模块、查看客房信息模块、客房预定 模块、用户留言模块、充值模块和个人信息维护模块。用户登录模块:用户通过输入注册的的账号和密码,然后进行身份验证,匹配成功 后实现登录功能。用户注册模块:用户输入合法的账号和密码可以实现注册功能。 查看客房信息模块:用户可以通过首页查看客房的价格,图片,详情等信息,从而   可以选择想要预定的房间。 客房预定模块:用户选择自己想要预定的客房后,可以通过输入相关信息进行订房操作。用户留言模块:用户可以向管理员发送留言。 充值模块:用户可以通过添加银行卡再为自己进行充值操作。 个人信息维护模块:用户可以修改自己的姓名、密码、身份证号等信息,还可以查看自己的订单。3.2.2  管理员模块功能分析对于管理员而言,一个好的管理系统总是能让酒店的管理工作事半功倍[7]。管理员 能够通过这个系统对自己的酒店情况一目了然,应该包括客户留言模块、客房管理模 块、订房信息管理模块、入住信息管理模块、统计分析模块、酒店新闻管理模块、会 员信息管理模块、员工信息管理模块、系统用户管理模块、个人信息维护模块。客户留言模块:管理员可以查看并回复用户的留言。客房管理模块:管理员可以管理客房信息,可以添加新的客房,删除已经停用的客房信息,还可以修改现有的客房信息。订房信息管理模块:管理员可以处理用户的订房求,为用户办理入住手续。入住信息管理模块:对于没有注册的线下客户,也可以办理入住手续。统计分析模块:可以对酒店所有的入住信息进行记录和总结分析。酒店新闻管理模块:管理员可以更新网站上的新闻公告,展示图片等信息。会员信息管理模块:管理员可以查看到所有的注册会员信息,可以对会员信息进行删除,修改,添加操作。员工信息管理模块:管理员可以查看到自己公司所有的员工信息,而且还可以对员工的相关信息进行管理。系统用户管理模块:管理员可以查看到所有的系统管理员信息并对管理员信息进行管理。个人信息维护模块:管理员可以更改自己的登录密码或者是姓名、性别、手机号等 相关个人信息。​编辑 环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本;6.是否Maven项目:否;技术栈1. 后端:Spring+SpringMVC+Mybatis2. 前端:JSP+CSS+JavaScript+jQuery使用说明1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目选择maven;若为maven项目,导入成功后执行maven clean;maven install命令,然后运行;3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;4. 运行项目,在浏览器中输入http://localhost:8080/ 登录运行截图​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑 用户管理控制层:package com.houserss.controller;import javax.servlet.http.HttpSession;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.houserss.common.Const;import com.houserss.common.Const.Role;import com.houserss.common.ServerResponse;import com.houserss.pojo.User;import com.houserss.service.IUserService;import com.houserss.service.impl.UserServiceImpl;import com.houserss.util.MD5Util;import com.houserss.util.TimeUtils;import com.houserss.vo.DeleteHouseVo;import com.houserss.vo.PageInfoVo;/** * Created by admin */@Controller@RequestMapping(/user/)public class UserController if (ip != null && ip.length() > 0) String[] ips = ip.split(,);for (int i = 0; i  

67,513

社区成员

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

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