默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 求助MobileIMSDK服务端TCP连接超过1000左右出现问题
阅读(36078) | 评论(5 收藏 淘帖
1、服务器配置:
  windows-server 2008 R2 64位 内存:16G
  jdk 1.8

2、服务启动方式:
   wrapper.exe
   主要配置
   wrapper.java.initmemory=500
   wrapper.java.maxmemory=1024

3、问题描述:

  通过腾讯云服务器监控tcp连接超过1000左右的时候,服务不停自动重启(SDK版本固件有点老,不知道在那看)

4、报错代码:

WARN] - [17:00:03.030]Unexpected exception from exceptionCaught handler. | (DefaultIoFilterChain^callNextExceptionCaught:463)
INFO   | jvm 1    | 2021/11/17 17:00:03 | java.lang.OutOfMemoryError: unable to create new native thread
STATUS | wrapper  | 2021/11/17 17:00:03 | The JVM has run out of memory.  Restarting JVM.
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.lang.Thread.start0(Native Method)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.lang.Thread.start(Unknown Source)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.util.concurrent.ThreadPoolExecutor.addWorker(Unknown Source)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source)


即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:[已回复] 求助MobileIMSDK的tcp客户端单次发送100K数据失败下一篇:[已回复] 求教关于MobileIMSDK安卓端的appKey的疑问
推荐方案
评论 5
看你这Log,是OOM了。

你是在服务端增了什么业务逻辑吗?有没有更详细一点的错误栈信息?(也就是能看到具体的业务调用代码的,而不是只有这Java系统API的信息)。

1)MobileIMSDK的版本号是多少记得吗?
2)用的是udp协议还是udp协议?
3)MobileIMSDK的这个版本服务端是基于Netty的还是MINA的?

你把上面的信息统计一下,回复给我,我来帮你评估。
引用:JackJiang 发表于 2021-11-18 12:49
看你这Log,是OOM了。

你是在服务端增了什么业务逻辑吗?有没有更详细一点的错误栈信息?(也就是能看到 ...

这个是以前同事的代码,我逻辑可能不是很清楚
1、应该是mina版本。里面包括有该库mina-core-2.0.7.jar
2、关于版本,我看代码是应该是2016年的(ServerEventListenerImpl.java at 2016-2-20 11:25:05, code by Jack Jiang.)
3、采用udp协议
4、更具体的日志:
[WARN] - [17:00:03.030]Unexpected exception from exceptionCaught handler. | (DefaultIoFilterChain^callNextExceptionCaught:463)
INFO   | jvm 1    | 2021/11/17 17:00:03 | java.lang.OutOfMemoryError: unable to create new native thread
STATUS | wrapper  | 2021/11/17 17:00:03 | The JVM has run out of memory.  Restarting JVM.
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.lang.Thread.start0(Native Method)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.lang.Thread.start(Unknown Source)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.util.concurrent.ThreadPoolExecutor.addWorker(Unknown Source)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.filter.executor.ExecutorFilter.fireEvent(ExecutorFilter.java:513)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.filter.executor.ExecutorFilter.exceptionCaught(ExecutorFilter.java:573)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextExceptionCaught(DefaultIoFilterChain.java:461)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$4(DefaultIoFilterChain.java:454)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.exceptionCaught(DefaultIoFilterChain.java:760)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.IoFilterAdapter.exceptionCaught(IoFilterAdapter.java:102)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextExceptionCaught(DefaultIoFilterChain.java:461)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireExceptionCaught(DefaultIoFilterChain.java:451)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionOpened(DefaultIoFilterChain.java:361)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1(DefaultIoFilterChain.java:355)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionOpened(DefaultIoFilterChain.java:745)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.IoFilterAdapter.sessionOpened(IoFilterAdapter.java:81)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionOpened(DefaultIoFilterChain.java:359)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireSessionOpened(DefaultIoFilterChain.java:352)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.service.IoServiceListenerSupport.fireSessionCreated(IoServiceListenerSupport.java:212)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.polling.AbstractPollingConnectionlessIoAcceptor.newSessionWithoutLock(AbstractPollingConnectionlessIoAcceptor.java:349)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.polling.AbstractPollingConnectionlessIoAcceptor.readHandle(AbstractPollingConnectionlessIoAcceptor.java:697)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.polling.AbstractPollingConnectionlessIoAcceptor.processReadySessions(AbstractPollingConnectionlessIoAcceptor.java:670)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.polling.AbstractPollingConnectionlessIoAcceptor.access$12(AbstractPollingConnectionlessIoAcceptor.java:656)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.core.polling.AbstractPollingConnectionlessIoAcceptor$Acceptor.run(AbstractPollingConnectionlessIoAcceptor.java:607)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
INFO   | jvm 1    | 2021/11/17 17:00:03 |         at java.lang.Thread.run(Unknown Source)
INFO   | jvm 1    | 2021/11/17 17:00:03 | [WARN] - [17:00:03.042]Unexpected exception from exceptionCaught handler. | (DefaultIoFilterChain^callNextExceptionCaught:463)
INFO   | jvm 1    | 2021/11/17 17:00:03 | java.lang.OutOfMemoryError: unable to create new native thread
注:我不知道是由于客户端突然太多登录,导致的崩溃。还是由于登录后,我们代码的逻辑导致崩溃。麻烦帮我看看,从目前的日志能不能判断是im本身的问题,还是我们逻辑的问题。后续我们再排查下是不是代码逻辑导致(以前由于网络原因。客户端登录离线后会不停发登录操作,导致产生很多线程连接服务器,我看你们说明新的sdk已经修复,但是客户端还没有升级sdk),我不知道这个崩溃与我们以前的设备的这个bug有没有关系。
引用:w2plus 发表于 2021-11-18 13:59
这个是以前同事的代码,我逻辑可能不是很清楚
1、应该是mina版本。里面包括有该库mina-core-2.0.7.jar
...

看样子,应该很老的版本。

不过OOM内存溢出这种问题,不太可能像你说的是连接太多导致的,因为老的MobileIMSDK用的是UDP,udp是没有连接这种说法的,何况你JVM设置的最大是1G内存呢,对于udp这种无连接来说已经很大了。

不过你不用担心,我教你怎么排查。

你去想办法观察一下,这种OOM的出现,一般是多长时间之后,或者是有什么规律,找出这个规律,再来分析一下。
引用:JackJiang 发表于 2021-11-18 15:30
看样子,应该很老的版本。

不过OOM内存溢出这种问题,不太可能像你说的是连接太多导致的,因为老的Mob ...

你好,就如我在文中说到的情况,平时是没有问题。当云监控到服务器tcp连接超过1000以上的时候,就出现该错误。我看mina代码,貌似连接登录的时候创建session,而session会创建线程?不知道是不是这个原因?报错代码在DefaultIoFilterChain.java  fireSessionCreated。很奇怪的是服务器配置应该可以建立超过1000的线程。
引用:w2plus 发表于 2021-11-18 15:56
你好,就如我在文中说到的情况,平时是没有问题。当云监控到服务器tcp连接超过1000以上的时候,就出现该 ...

你用过JProfile吗,你去下载并研究一下它,它可以实时挂载到你的JVM实例,可以实时看到JVM的内存增长和回收情况,通过它你可以看到到底是什么在消耗内存,甚至可以定位到具体的代码行。

如果真是有什么代码内存益处,你可以通过它很容易找出来。你一定要用好它,绝对能找出原因的,这是我平时居家必备的神器,你一定试试
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部