dianping / cat

CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。
Apache License 2.0
18.63k stars 5.41k forks source link

X86架构一次部署成功2280端口出现,ARM架构部署2280没有映射出来,换了几个环境发现x86部署没问题,ARM部署2280端口没出现 #2299

Open tangfan123 opened 1 year ago

tangfan123 commented 1 year ago

X86架构一次部署成功2280端口出现,ARM架构部署2280没有映射出来,换了几个环境发现x86部署没问题,ARM部署2280端口就是没有被监听,netstat 看也没有,关键是tomcat启动一个报错没有!! java8、tomcat8、tdsql,cat-home.war包直接github下载的已经打包好了的war包,3.1版本

---------------- arm服务器启动: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=1024m; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=2048m; support was removed in 8.0 Please use CMSClassUnloadingEnabled in place of CMSPermGenSweepingEnabled in the future Java HotSpot(TM) 64-Bit Server VM warning: ignoring option CMSInitiatingPermOccupancyFraction=70; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release. Java HotSpot(TM) 64-Bit Server VM warning: CMSFullGCsBeforeCompaction is deprecated and will likely be removed in a future release. Java HotSpot(TM) 64-Bit Server VM warning: MaxNewSize (2097152k) is equal to or greater than the entire heap (2097152k). A new max generation size of 2097088k will be used. 17-Jul-2023 10:46:33.334 INFO [main] org.apache.catalina.core.AprLifecycleListener.init The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/aarch64:/lib:/usr/lib 17-Jul-2023 10:46:33.521 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-9000"] 17-Jul-2023 10:46:33.532 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 17-Jul-2023 10:46:33.534 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"] 17-Jul-2023 10:46:33.535 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 17-Jul-2023 10:46:33.535 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 475 ms 17-Jul-2023 10:46:33.557 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina 17-Jul-2023 10:46:33.557 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.5 Logger file /data/appdatas/cat/cat_20230717.log log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory). log4j:WARN Please initialize the log4j system properly. [07-17 10:46:41.041] [INFO] [cat] Cat is lazy initialized! 17-Jul-2023 10:46:42.430 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /tomcat8/webapps/ROOT 17-Jul-2023 10:46:42.453 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /tomcat8/webapps/docs 17-Jul-2023 10:46:42.474 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /tomcat8/webapps/examples 17-Jul-2023 10:46:42.694 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /tomcat8/webapps/host-manager 17-Jul-2023 10:46:42.721 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /tomcat8/webapps/manager 17-Jul-2023 10:46:42.755 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-9000"] 17-Jul-2023 10:46:42.758 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 17-Jul-2023 10:46:42.759 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 9223 ms [INFO] Working directory is /tomcat8/logs [INFO] War root is /tomcat8/webapps/cat

everiu commented 1 year ago

netty 支持arm架构的原生epoll可以看下这个commit

https://github.com/dianping/cat/commit/4684ba7bbbeffe071092e99333f28410d08f18ef

可以尝试master分支编译最新版本的包,看下是否可以在arm架构下部署

tangfan123 commented 1 year ago

netty 支持arm架构的原生epoll可以看下这个commit

4684ba7

可以尝试master分支编译最新版本的包,看下是否可以在arm架构下部署


大佬,新master分支,在arm服务器上跑起来了,2280端口映射了,服务器运行正常,cat WEB端功能使用正常,但是观察运行一会以后报了如下错误,还望解答....

[ERROR] [AlertManager] test java.net.UnknownHostException: test at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:196) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394) at java.net.Socket.connect(Socket.java:606) at sun.net.NetworkClient.doConnect(NetworkClient.java:175) at sun.net.www.http.HttpClient.openServer(HttpClient.java:499) at sun.net.www.http.HttpClient.openServer(HttpClient.java:594) at sun.net.www.http.HttpClient.(HttpClient.java:278) at sun.net.www.http.HttpClient.New(HttpClient.java:375) at sun.net.www.http.HttpClient.New(HttpClient.java:393) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1240) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1167) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1061) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:995) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1354) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1329) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpPostSend(AbstractSender.java:102) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpSend(AbstractSender.java:140) at com.dianping.cat.alarm.spi.sender.MailSender.sendEmail(MailSender.java:76) at com.dianping.cat.alarm.spi.sender.MailSender.send(MailSender.java:48) at com.dianping.cat.alarm.spi.sender.SenderManager.sendAlert(SenderManager.java:58) at com.dianping.cat.alarm.spi.AlertManager.sendRecoveryMessage(AlertManager.java:214) at com.dianping.cat.alarm.spi.AlertManager.access$400(AlertManager.java:51) at com.dianping.cat.alarm.spi.AlertManager$RecoveryAnnouncer.run(AlertManager.java:257) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:344) [07-19 17:21:06.137] [ERROR] [ByteToMessageDecoder] readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1477) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1463) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:896) at com.dianping.cat.message.codec.NativeMetricBagDecoder$Context.readString(NativeMetricBagDecoder.java:92) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decodeMetric(NativeMetricBagDecoder.java:48) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decode(NativeMetricBagDecoder.java:22) at com.dianping.cat.message.CodecHandler.decode(CodecHandler.java:51) at com.dianping.cat.analysis.TcpSocketReceiver$MessageDecoder.decode(TcpSocketReceiver.java:163) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750) [07-19 17:21:10.137] [ERROR] [ByteToMessageDecoder] readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1477) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1463) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:896) at com.dianping.cat.message.codec.NativeMetricBagDecoder$Context.readString(NativeMetricBagDecoder.java:92) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decodeMetric(NativeMetricBagDecoder.java:48) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decode(NativeMetricBagDecoder.java:22) at com.dianping.cat.message.CodecHandler.decode(CodecHandler.java:51) at com.dianping.cat.analysis.TcpSocketReceiver$MessageDecoder.decode(TcpSocketReceiver.java:163) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750)

everiu commented 1 year ago

第一个报错信息 [ERROR] [AlertManager] test java.net.UnknownHostException: test 显示的是告警发送有问题,unknownhost,配置的告警发送链接是 test, 无法解析这个域名,因此报错,可以看下数据库中 config这张表的name=senderConfig这个配置,里面配置了告警应该发送的地址,Cat自身没有实现告警发送的功能,他目前是将告警的内容发送到类似独立的告警中心(实现了具体发送逻辑,认证等信息),由独立的告警中心来完成真正的告警发送功能

everiu commented 1 year ago

第二个报错信息看起来像是解码出了问题,好像是预期读取的字节数跟目前实际读取的字节数匹配不上,感觉是不是客户端上报数据有点问题

tangfan123 commented 1 year ago

第二个报错信息看起来像是解码出了问题,好像是预期读取的字节数跟目前实际读取的字节数匹配不上,感觉是不是客户端上报数据有点问题

客户端的 pom依赖必须跟服务端一致吗,这里服务端用的是最新master编译的cat.war,springboot里面依赖还是以前3.0 3.1的client,有关系吗

everiu commented 1 year ago

第二个报错信息看起来像是解码出了问题,好像是预期读取的字节数跟目前实际读取的字节数匹配不上,感觉是不是客户端上报数据有点问题

客户端的 pom依赖必须跟服务端一致吗,这里服务端用的是最新master编译的cat.war,springboot里面依赖还是以前3.0 3.1的client,有关系吗

应该是不需要的,都是3.x的版本,协议解析应该不影响,目前cat server自身上报的指标可以正常查看吗

tangfan123 commented 1 year ago

第二个报错信息看起来像是解码出了问题,好像是预期读取的字节数跟目前实际读取的字节数匹配不上,感觉是不是客户端上报数据有点问题

客户端的 pom依赖必须跟服务端一致吗,这里服务端用的是最新master编译的cat.war,springboot里面依赖还是以前3.0 3.1的client,有关系吗

应该是不需要的,都是3.x的版本,协议解析应该不影响,目前cat server自身上报的指标可以正常查看吗


会是因为 master分支里面 netty是4.0,cat-home里面的Pom文件里面是4.0的,springboot打的包里面用的是3.x的 会影响吗,server运行一会正常就报那个 溢出的错误了

everiu commented 1 year ago

第二个报错信息看起来像是解码出了问题,好像是预期读取的字节数跟目前实际读取的字节数匹配不上,感觉是不是客户端上报数据有点问题

客户端的 pom依赖必须跟服务端一致吗,这里服务端用的是最新master编译的cat.war,springboot里面依赖还是以前3.0 3.1的client,有关系吗

应该是不需要的,都是3.x的版本,协议解析应该不影响,目前cat server自身上报的指标可以正常查看吗

会是因为 master分支里面 netty是4.0,cat-home里面的Pom文件里面是4.0的,springboot打的包里面用的是3.x的 会影响吗,server运行一会正常就报那个 溢出的错误了

那有可能,我看了下,报错来源于下面这个 NM1 协议解析,这个协议我这边还没有了解过,感觉可以尝试用本地编译的4.0的client包,替换掉springboot中的3.x的client依赖; 另外服务端报错会崩溃吗,还是可以正常运行,只是会一直有报错日志

            if ("PT1".equals(hint)) {
        tree = m_plainTextCodec.decode(buf);
    } else if ("NT1".equals(hint)) {
        tree = m_nativeCodec.decode(buf);
    } else if ("NM1".equals(hint)) {
        MetricBag bag = m_metricBagDecoder.decode(buf);
        tree = new DefaultMessageTree();
        tree.setDomain(bag.getDomain());
        tree.setIpAddress(bag.getIpAddress());
        tree.setHostName(bag.getHostName());
        tree.getMetrics().addAll(bag.getMetrics());
    } else {
        throw new RuntimeException("Error message type : " + hint);
    }
tangfan123 commented 1 year ago

第二个报错信息看起来像是解码出了问题,好像是预期读取的字节数跟目前实际读取的字节数匹配不上,感觉是不是客户端上报数据有点问题

客户端的 pom依赖必须跟服务端一致吗,这里服务端用的是最新master编译的cat.war,springboot里面依赖还是以前3.0 3.1的client,有关系吗

应该是不需要的,都是3.x的版本,协议解析应该不影响,目前cat server自身上报的指标可以正常查看吗

会是因为 master分支里面 netty是4.0,cat-home里面的Pom文件里面是4.0的,springboot打的包里面用的是3.x的 会影响吗,server运行一会正常就报那个 溢出的错误了

那有可能,我看了下,报错来源于下面这个 NM1 协议解析,这个协议我这边还没有了解过,感觉可以尝试用本地编译的4.0的client包,替换掉springboot中的3.x的client依赖; 另外服务端报错会崩溃吗,还是可以正常运行,只是会一直有报错日志

            if ("PT1".equals(hint)) {
      tree = m_plainTextCodec.decode(buf);
  } else if ("NT1".equals(hint)) {
      tree = m_nativeCodec.decode(buf);
  } else if ("NM1".equals(hint)) {
      MetricBag bag = m_metricBagDecoder.decode(buf);
      tree = new DefaultMessageTree();
      tree.setDomain(bag.getDomain());
      tree.setIpAddress(bag.getIpAddress());
      tree.setHostName(bag.getHostName());
      tree.getMetrics().addAll(bag.getMetrics());
  } else {
      throw new RuntimeException("Error message type : " + hint);
  }

我们已经尝试过把spring里面的依赖改为本地编译的4.0的client包,正常启动,但不会上报数据,4.0的client和3.0的client里面的逻辑是有改动对了一下源码,不知道是否是我们改造后没用对,还在排查,服务端启动正常,但是运行一段时间,点几个功能日志里面报:java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) 后,服务端仪表盘显示 "cat服务端正常",但是其他功能如:state、business、cross报500,客服端停止报送数据或者是服务端接收不到了。

tangfan123 commented 1 year ago

netty 支持arm架构的原生epoll可以看下这个commit 4684ba7 可以尝试master分支编译最新版本的包,看下是否可以在arm架构下部署

大佬,新master分支,在arm服务器上跑起来了,2280端口映射了,服务器运行正常,cat WEB端功能使用正常,但是观察运行一会以后报了如下错误,还望解答....

[ERROR] [AlertManager] test java.net.UnknownHostException: test at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:196) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394) at java.net.Socket.connect(Socket.java:606) at sun.net.NetworkClient.doConnect(NetworkClient.java:175) at sun.net.www.http.HttpClient.openServer(HttpClient.java:499) at sun.net.www.http.HttpClient.openServer(HttpClient.java:594) at sun.net.www.http.HttpClient.(HttpClient.java:278) at sun.net.www.http.HttpClient.New(HttpClient.java:375) at sun.net.www.http.HttpClient.New(HttpClient.java:393) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1240) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1167) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1061) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:995) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1354) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1329) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpPostSend(AbstractSender.java:102) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpSend(AbstractSender.java:140) at com.dianping.cat.alarm.spi.sender.MailSender.sendEmail(MailSender.java:76) at com.dianping.cat.alarm.spi.sender.MailSender.send(MailSender.java:48) at com.dianping.cat.alarm.spi.sender.SenderManager.sendAlert(SenderManager.java:58) at com.dianping.cat.alarm.spi.AlertManager.sendRecoveryMessage(AlertManager.java:214) at com.dianping.cat.alarm.spi.AlertManager.access$400(AlertManager.java:51) at com.dianping.cat.alarm.spi.AlertManager$RecoveryAnnouncer.run(AlertManager.java:257) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:344) [07-19 17:21:06.137] [ERROR] [ByteToMessageDecoder] readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1477) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1463) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:896) at com.dianping.cat.message.codec.NativeMetricBagDecoder$Context.readString(NativeMetricBagDecoder.java:92) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decodeMetric(NativeMetricBagDecoder.java:48) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decode(NativeMetricBagDecoder.java:22) at com.dianping.cat.message.CodecHandler.decode(CodecHandler.java:51) at com.dianping.cat.analysis.TcpSocketReceiver$MessageDecoder.decode(TcpSocketReceiver.java:163) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750) [07-19 17:21:10.137] [ERROR] [ByteToMessageDecoder] readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1477) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1463) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:896) at com.dianping.cat.message.codec.NativeMetricBagDecoder$Context.readString(NativeMetricBagDecoder.java:92) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decodeMetric(NativeMetricBagDecoder.java:48) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decode(NativeMetricBagDecoder.java:22) at com.dianping.cat.message.CodecHandler.decode(CodecHandler.java:51) at com.dianping.cat.analysis.TcpSocketReceiver$MessageDecoder.decode(TcpSocketReceiver.java:163) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750)


尝试使用 releases V3.1.0 服务端源码,把里面的client 依赖的netty更改为最新master分支里面的版本,发现catalina.out 没有报错了,但使用一会以后发现服务端又出毛病了,application 点击直接报错500,发现cat服务端日志启动时候报错: [07-25 14:20:13.132] [INFO] [MVC] MVC started at /cat [07-25 14:20:13.372] [ERROR] [CatClientModule$CatThreadListener] Uncaught exception thrown out of thread(Cat-DefaultMessageProcessor 2023-07-25 14:00:00-19) org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Linux and os.arch=aarch64 at org.xerial.snappy.SnappyLoader.findNativeLibrary(SnappyLoader.java:331) at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:171) at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152) at org.xerial.snappy.Snappy.(Snappy.java:46) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:97) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:89) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:79) at org.unidal.cat.message.storage.internals.DefaultBlock.createOutputSteam(DefaultBlock.java:92) at org.unidal.cat.message.storage.internals.DefaultBlock.(DefaultBlock.java:68) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.processMessage(DefaultMessageProcessor.java:119) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.run(DefaultMessageProcessor.java:159) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:294) [07-25 14:20:13.424] [WARN] [DefaultClientConfigManager] error when connect cat server config url http://172.15.244.240:9000/cat/s/router?domain=cat&ip=172.15.244.240&op=json [07-25 14:20:13.425] [INFO] [ChannelManager] start connect server/172.15.244.240:2280 [07-25 14:20:13.427] [INFO] [ChannelManager] Connected to CAT server at /172.15.244.240:2280 [07-25 14:20:13.435] [ERROR] [CatClientModule$CatThreadListener] Uncaught exception thrown out of thread(Cat-DefaultMessageProcessor 2023-07-25 14:00:00-8) java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:97) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:89) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:79) at org.unidal.cat.message.storage.internals.DefaultBlock.createOutputSteam(DefaultBlock.java:92) at org.unidal.cat.message.storage.internals.DefaultBlock.(DefaultBlock.java:68) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.processMessage(DefaultMessageProcessor.java:119) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.run(DefaultMessageProcessor.java:159) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:294) [07-25 14:20:23.444] [INFO] [ChannelManager] router config changed :172.15.244.240:2280;

everiu commented 1 year ago

netty 支持arm架构的原生epoll可以看下这个commit 4684ba7 可以尝试master分支编译最新版本的包,看下是否可以在arm架构下部署

大佬,新master分支,在arm服务器上跑起来了,2280端口映射了,服务器运行正常,cat WEB端功能使用正常,但是观察运行一会以后报了如下错误,还望解答.... [ERROR] [AlertManager] test java.net.UnknownHostException: test at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:196) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394) at java.net.Socket.connect(Socket.java:606) at sun.net.NetworkClient.doConnect(NetworkClient.java:175) at sun.net.www.http.HttpClient.openServer(HttpClient.java:499) at sun.net.www.http.HttpClient.openServer(HttpClient.java:594) at sun.net.www.http.HttpClient.(HttpClient.java:278) at sun.net.www.http.HttpClient.New(HttpClient.java:375) at sun.net.www.http.HttpClient.New(HttpClient.java:393) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1240) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1167) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1061) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:995) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1354) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1329) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpPostSend(AbstractSender.java:102) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpSend(AbstractSender.java:140) at com.dianping.cat.alarm.spi.sender.MailSender.sendEmail(MailSender.java:76) at com.dianping.cat.alarm.spi.sender.MailSender.send(MailSender.java:48) at com.dianping.cat.alarm.spi.sender.SenderManager.sendAlert(SenderManager.java:58) at com.dianping.cat.alarm.spi.AlertManager.sendRecoveryMessage(AlertManager.java:214) at com.dianping.cat.alarm.spi.AlertManager.access$400(AlertManager.java:51) at com.dianping.cat.alarm.spi.AlertManager$RecoveryAnnouncer.run(AlertManager.java:257) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:344) [07-19 17:21:06.137] [ERROR] [ByteToMessageDecoder] readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1477) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1463) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:896) at com.dianping.cat.message.codec.NativeMetricBagDecoder$Context.readString(NativeMetricBagDecoder.java:92) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decodeMetric(NativeMetricBagDecoder.java:48) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decode(NativeMetricBagDecoder.java:22) at com.dianping.cat.message.CodecHandler.decode(CodecHandler.java:51) at com.dianping.cat.analysis.TcpSocketReceiver$MessageDecoder.decode(TcpSocketReceiver.java:163) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750) [07-19 17:21:10.137] [ERROR] [ByteToMessageDecoder] readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1477) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1463) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:896) at com.dianping.cat.message.codec.NativeMetricBagDecoder$Context.readString(NativeMetricBagDecoder.java:92) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decodeMetric(NativeMetricBagDecoder.java:48) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decode(NativeMetricBagDecoder.java:22) at com.dianping.cat.message.CodecHandler.decode(CodecHandler.java:51) at com.dianping.cat.analysis.TcpSocketReceiver$MessageDecoder.decode(TcpSocketReceiver.java:163) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750)

尝试使用 releases V3.1.0 服务端源码,把里面的client 依赖的netty更改为最新master分支里面的版本,发现catalina.out 没有报错了,但使用一会以后发现服务端又出毛病了,application 点击直接报错500,发现cat服务端日志启动时候报错: [07-25 14:20:13.132] [INFO] [MVC] MVC started at /cat [07-25 14:20:13.372] [ERROR] [CatClientModule$CatThreadListener] Uncaught exception thrown out of thread(Cat-DefaultMessageProcessor 2023-07-25 14:00:00-19) org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Linux and os.arch=aarch64 at org.xerial.snappy.SnappyLoader.findNativeLibrary(SnappyLoader.java:331) at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:171) at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152) at org.xerial.snappy.Snappy.(Snappy.java:46) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:97) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:89) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:79) at org.unidal.cat.message.storage.internals.DefaultBlock.createOutputSteam(DefaultBlock.java:92) at org.unidal.cat.message.storage.internals.DefaultBlock.(DefaultBlock.java:68) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.processMessage(DefaultMessageProcessor.java:119) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.run(DefaultMessageProcessor.java:159) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:294) [07-25 14:20:13.424] [WARN] [DefaultClientConfigManager] error when connect cat server config url http://172.15.244.240:9000/cat/s/router?domain=cat&ip=172.15.244.240&op=json [07-25 14:20:13.425] [INFO] [ChannelManager] start connect server/172.15.244.240:2280 [07-25 14:20:13.427] [INFO] [ChannelManager] Connected to CAT server at /172.15.244.240:2280 [07-25 14:20:13.435] [ERROR] [CatClientModule$CatThreadListener] Uncaught exception thrown out of thread(Cat-DefaultMessageProcessor 2023-07-25 14:00:00-8) java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:97) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:89) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:79) at org.unidal.cat.message.storage.internals.DefaultBlock.createOutputSteam(DefaultBlock.java:92) at org.unidal.cat.message.storage.internals.DefaultBlock.(DefaultBlock.java:68) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.processMessage(DefaultMessageProcessor.java:119) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.run(DefaultMessageProcessor.java:159) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:294) [07-25 14:20:23.444] [INFO] [ChannelManager] router config changed :172.15.244.240:2280;

org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Linux and os.arch=aarch64 这个报错是snappy这个压缩算法依赖找不到native library对应的系统架构的本地依赖实现

看起来比较奇怪,因为master分支和3.1.0分支,这个snappy依赖的版本都是一样的,都是1.1.2,从他的代码来看 https://github.com/xerial/snappy-java/blob/master/src/main/java/org/xerial/snappy/OSInfo.java

os.arch=aarch64 这个应该很早就添加了,或许可以升级下版本看下,但是不是太确定,相比于x86架构,arm架构可能会存在一些兼容性问题

https://mvnrepository.com/artifact/org.xerial.snappy/snappy-java

tangfan123 commented 1 year ago

netty 支持arm架构的原生epoll可以看下这个commit 4684ba7 可以尝试master分支编译最新版本的包,看下是否可以在arm架构下部署

大佬,新master分支,在arm服务器上跑起来了,2280端口映射了,服务器运行正常,cat WEB端功能使用正常,但是观察运行一会以后报了如下错误,还望解答.... [ERROR] [AlertManager] test java.net.UnknownHostException: test at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:196) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394) at java.net.Socket.connect(Socket.java:606) at sun.net.NetworkClient.doConnect(NetworkClient.java:175) at sun.net.www.http.HttpClient.openServer(HttpClient.java:499) at sun.net.www.http.HttpClient.openServer(HttpClient.java:594) at sun.net.www.http.HttpClient.(HttpClient.java:278) at sun.net.www.http.HttpClient.New(HttpClient.java:375) at sun.net.www.http.HttpClient.New(HttpClient.java:393) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1240) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1167) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1061) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:995) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1354) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1329) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpPostSend(AbstractSender.java:102) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpSend(AbstractSender.java:140) at com.dianping.cat.alarm.spi.sender.MailSender.sendEmail(MailSender.java:76) at com.dianping.cat.alarm.spi.sender.MailSender.send(MailSender.java:48) at com.dianping.cat.alarm.spi.sender.SenderManager.sendAlert(SenderManager.java:58) at com.dianping.cat.alarm.spi.AlertManager.sendRecoveryMessage(AlertManager.java:214) at com.dianping.cat.alarm.spi.AlertManager.access$400(AlertManager.java:51) at com.dianping.cat.alarm.spi.AlertManager$RecoveryAnnouncer.run(AlertManager.java:257) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:344) [07-19 17:21:06.137] [ERROR] [ByteToMessageDecoder] readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1477) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1463) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:896) at com.dianping.cat.message.codec.NativeMetricBagDecoder$Context.readString(NativeMetricBagDecoder.java:92) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decodeMetric(NativeMetricBagDecoder.java:48) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decode(NativeMetricBagDecoder.java:22) at com.dianping.cat.message.CodecHandler.decode(CodecHandler.java:51) at com.dianping.cat.analysis.TcpSocketReceiver$MessageDecoder.decode(TcpSocketReceiver.java:163) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750) [07-19 17:21:10.137] [ERROR] [ByteToMessageDecoder] readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) java.lang.IndexOutOfBoundsException: readerIndex(15) + length(55) exceeds writerIndex(68): PooledUnsafeDirectByteBuf(ridx: 15, widx: 68, cap: 68) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1477) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1463) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:896) at com.dianping.cat.message.codec.NativeMetricBagDecoder$Context.readString(NativeMetricBagDecoder.java:92) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decodeMetric(NativeMetricBagDecoder.java:48) at com.dianping.cat.message.codec.NativeMetricBagDecoder.decode(NativeMetricBagDecoder.java:22) at com.dianping.cat.message.CodecHandler.decode(CodecHandler.java:51) at com.dianping.cat.analysis.TcpSocketReceiver$MessageDecoder.decode(TcpSocketReceiver.java:163) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750)

尝试使用 releases V3.1.0 服务端源码,把里面的client 依赖的netty更改为最新master分支里面的版本,发现catalina.out 没有报错了,但使用一会以后发现服务端又出毛病了,application 点击直接报错500,发现cat服务端日志启动时候报错: [07-25 14:20:13.132] [INFO] [MVC] MVC started at /cat [07-25 14:20:13.372] [ERROR] [CatClientModule$CatThreadListener] Uncaught exception thrown out of thread(Cat-DefaultMessageProcessor 2023-07-25 14:00:00-19) org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Linux and os.arch=aarch64 at org.xerial.snappy.SnappyLoader.findNativeLibrary(SnappyLoader.java:331) at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:171) at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152) at org.xerial.snappy.Snappy.(Snappy.java:46) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:97) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:89) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:79) at org.unidal.cat.message.storage.internals.DefaultBlock.createOutputSteam(DefaultBlock.java:92) at org.unidal.cat.message.storage.internals.DefaultBlock.(DefaultBlock.java:68) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.processMessage(DefaultMessageProcessor.java:119) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.run(DefaultMessageProcessor.java:159) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:294) [07-25 14:20:13.424] [WARN] [DefaultClientConfigManager] error when connect cat server config url http://172.15.244.240:9000/cat/s/router?domain=cat&ip=172.15.244.240&op=json [07-25 14:20:13.425] [INFO] [ChannelManager] start connect server/172.15.244.240:2280 [07-25 14:20:13.427] [INFO] [ChannelManager] Connected to CAT server at /172.15.244.240:2280 [07-25 14:20:13.435] [ERROR] [CatClientModule$CatThreadListener] Uncaught exception thrown out of thread(Cat-DefaultMessageProcessor 2023-07-25 14:00:00-8) java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:97) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:89) at org.xerial.snappy.SnappyOutputStream.(SnappyOutputStream.java:79) at org.unidal.cat.message.storage.internals.DefaultBlock.createOutputSteam(DefaultBlock.java:92) at org.unidal.cat.message.storage.internals.DefaultBlock.(DefaultBlock.java:68) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.processMessage(DefaultMessageProcessor.java:119) at org.unidal.cat.message.storage.internals.DefaultMessageProcessor.run(DefaultMessageProcessor.java:159) at java.lang.Thread.run(Thread.java:750) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:294) [07-25 14:20:23.444] [INFO] [ChannelManager] router config changed :172.15.244.240:2280;

org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Linux and os.arch=aarch64 这个报错是snappy这个压缩算法依赖找不到native library对应的系统架构的本地依赖实现

看起来比较奇怪,因为master分支和3.1.0分支,这个snappy依赖的版本都是一样的,都是1.1.2,从他的代码来看 https://github.com/xerial/snappy-java/blob/master/src/main/java/org/xerial/snappy/OSInfo.java

os.arch=aarch64 这个应该很早就添加了,或许可以升级下版本看下,但是不是太确定,相比于x86架构,arm架构可能会存在一些兼容性问题

https://mvnrepository.com/artifact/org.xerial.snappy/snappy-java


问题已经解决 升级了 3.1源码包里面的netty依赖,和org.xerial.snappy.SnappyError 这个报错包的依赖,服务端问题跑了一晚上,数据报送也正常,感谢回复!!!!!!!!!1