undertow自动关闭

服务环境:jfinal-undertow1.6 系统中有个交流模块使用了websocket 实现在线聊天

近日突然出现服务登录不上,查看日志发现如下报错:

[ERROR]-[Thread: XNIO-1 I/O-3]-[org.xnio.ChannelListeners.invokeChannelListener()]: XNIO001007: A channel event listener threw an exception
java.util.concurrent.RejectedExecutionException: XNIO007007: Thread is terminating
    at org.xnio.nio.WorkerThread.execute(WorkerThread.java:590)
    at io.undertow.websockets.jsr.UndertowSession$3.handleEvent(UndertowSession.java:396)
    at io.undertow.websockets.jsr.UndertowSession$3.handleEvent(UndertowSession.java:388)
    at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
    at io.undertow.server.protocol.framed.AbstractFramedChannel$FrameCloseListener.handleEvent(AbstractFramedChannel.java:1061)
    at io.undertow.server.protocol.framed.AbstractFramedChannel$FrameCloseListener.handleEvent(AbstractFramedChannel.java:975)
    at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
    at org.xnio.conduits.WriteReadyHandler$ChannelListenerHandler.terminated(WriteReadyHandler.java:70)
    at org.xnio.nio.NioSocketConduit.writeTerminated(NioSocketConduit.java:234)
    at org.xnio.nio.NioSocketConduit.terminateWrites(NioSocketConduit.java:223)
    at org.xnio.nio.NioSocketConduit.truncateWrites(NioSocketConduit.java:228)
    at io.undertow.conduits.IdleTimeoutConduit.truncateWrites(IdleTimeoutConduit.java:387)
    at org.xnio.conduits.ConduitStreamSinkChannel.close(ConduitStreamSinkChannel.java:186)
    at org.xnio.IoUtils.safeClose(IoUtils.java:134)
    at org.xnio.conduits.WriteReadyHandler$ChannelListenerHandler.forceTermination(WriteReadyHandler.java:57)
    at org.xnio.nio.NioSocketConduit.forceTermination(NioSocketConduit.java:107)
    at org.xnio.nio.WorkerThread.run(WorkerThread.java:494)

没看出来所以然,系统中也再无更多其他日志

更换端口 更换系统部署路径 卸载杀毒软件 现象依旧

请教大家有无遇到类似问题,可能是哪方面原因?

ps:现阶段是将jfinal-undertow 升级为1.7

暂时未出现突然关闭的问题。原问题为找到根源略感不快,请各位大神指点一二。


评论区

JFinal

2020-05-01 15:17

从来没有碰到过这个问题,建议先升级到 jfinal undertow 2.0
因为较高的 jfinal undertow 对于线程数量有更智能的配置

jfinal undertow 是不挑 jfinal 版本的,可以随时升级到最新版本, 2.0 版本我自己用了很久了,十分好用

JFinal

2020-05-01 15:18

至于你碰到的这个 RejectedExecutionException 异常,可能是并发量太大了,服务端拒绝处理

124653847atqq.com

2020-05-01 15:42

多谢波总神速回复!近期计划调整为最新版本。后续找到根源再来反馈。

JFinal

2020-05-01 15:49

@124653847atqq.com 你碰到的问题从来没有碰到过,所以很重要

一定要回来反馈

你的这个项目并发量大不大? 如果并发大,要检查是不是服务端处理不过来造成的 RejectedExecutionException

而且,出现这个问题以后,是不是 undertow 被停掉了?

124653847atqq.com

2020-05-01 18:55

@JFinal 并发不大,一共不超过100人。出现问题以后 undertow 被停掉了,提示undertow shutdown in 0 second,see you later. 然后cmd窗口(系统部署在window上)被关闭了。继续跟进看看 有眉目再来反馈

JFinal

2020-05-01 22:06

@124653847atqq.com 期待你的反馈,这个问题相当重要

强烈建议升到 jfinal undertow 2.0

124653847atqq.com

2020-05-02 00:28

@JFinal 已极速升级至 jfinal-undertow 2.0 暂时无问题。

果汁仔

2020-10-14 18:56

我也碰到这个问题了,同样也是有用到websocket

果汁仔

2020-10-14 19:04

jfinal-undertow版本是1.9
websocket 依赖:

io.undertow
undertow-websockets-jsr
2.0.25.Final


这个跟服务器性能有没有关系的?

北流家园网

2021-02-19 19:53

楼主,我这个问题你遇到过没?https://jfinal.com/feedback/8015

zzutligang

2021-03-01 14:12

@JFinal,我的也有这个问题,用到undertow的websocket。正常使用环境的时候有几百个用户在线,后台用3个实例做分布式websocket,如果服务器端用jfinal.sh stop停止的时候,该实例会抛这个异常。因为我的前端做了故障重连机制,所以客户端会自动重连到其他服务器端。只是这个异常看起来很别扭。下面提示贴图:


截屏2021-03-01 下午2.01.57.jpg

JFinal

2021-03-01 14:27

@zzutligang 检查一下你的 jfinal.sh 中的 kill 命令是不是带上了 -9 这个参数

这个参数是强制退出 JVM,那么正在通信的 websocket 会有异常,这个应该是正常现象

zzutligang

2021-03-01 15:06

@JFinal 没有带-9参数,带-9参数,就没有onStop的回调了。我刚才考虑是不是因为有客户端已经连上到这个服务器端实例,然后我退出服务,websocket服务器还在和客户端连接着,然后就会抛这个异常。我刚才在onStop里把该服务实例里所有创建的websocket的session都close掉。就没有这个异常抛出了。对强迫症来说,看起来清爽多了。

JFinal

2021-03-02 00:04

@zzutligang 我说反了,不带 -9 可能会出现异常