开发者社区 > 云原生 > 微服务 > 正文

Nacos版本2.2.3 naming-server.log报错,怎么办?

Nacos版本2.2.3 naming-server.log报?
2024-04-15 03:47:59,355 ERROR [TASK-FAILED] java.lang.OutOfMemoryError: Cannot reserve 2097152 bytes of direct buffer memory (allocated: 2145506066, limit: 2147483648)

java.lang.OutOfMemoryError: Cannot reserve 2097152 bytes of direct buffer memory (allocated: 2145506066, limit: 2147483648)
at java.base/java.nio.Bits.reserveMemory(Bits.java:178)
at java.base/java.nio.DirectByteBuffer.(DirectByteBuffer.java:111)
at java.base/java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:360)
at io.grpc.netty.shaded.io.netty.buffer.PoolArena$DirectArena.allocateDirect(PoolArena.java:649)
at io.grpc.netty.shaded.io.netty.buffer.PoolArena$DirectArena.newChunk(PoolArena.java:624)
at io.grpc.netty.shaded.io.netty.buffer.PoolArena.allocateNormal(PoolArena.java:203)
at io.grpc.netty.shaded.io.netty.buffer.PoolArena.tcacheAllocateSmall(PoolArena.java:173)
at io.grpc.netty.shaded.io.netty.buffer.PoolArena.allocate(PoolArena.java:134)
at io.grpc.netty.shaded.io.netty.buffer.PoolArena.allocate(PoolArena.java:126)
at io.grpc.netty.shaded.io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:396)
at io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:188)
at io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:124)
at io.grpc.netty.shaded.io.grpc.netty.NettyWritableBufferAllocator.allocate(NettyWritableBufferAllocator.java:51)
at io.grpc.internal.MessageFramer.writeKnownLengthUncompressed(MessageFramer.java:230)
at io.grpc.internal.MessageFramer.writeUncompressed(MessageFramer.java:169)
at io.grpc.internal.MessageFramer.writePayload(MessageFramer.java:142)
at io.grpc.internal.AbstractStream.writeMessage(AbstractStream.java:65)
at io.grpc.internal.ServerCallImpl.sendMessageInternal(ServerCallImpl.java:172)
at io.grpc.internal.ServerCallImpl.sendMessage(ServerCallImpl.java:154)
at io.grpc.stub.ServerCalls$ServerCallStreamObserverImpl.onNext(ServerCalls.java:380)
at com.alibaba.nacos.core.remote.grpc.GrpcConnection.sendRequestNoAck(GrpcConnection.java:62)
at com.alibaba.nacos.core.remote.grpc.GrpcConnection.sendRequestInner(GrpcConnection.java:94)
at com.alibaba.nacos.core.remote.grpc.GrpcConnection.asyncRequest(GrpcConnection.java:117)
at com.alibaba.nacos.core.remote.RpcPushService.pushWithCallback(RpcPushService.java:55)
at com.alibaba.nacos.naming.push.v2.executor.PushExecutorRpcImpl.doPushWithCallback(PushExecutorRpcImpl.java:54)
at com.alibaba.nacos.naming.push.v2.executor.PushExecutorDelegate.doPushWithCallback(PushExecutorDelegate.java:53)
at com.alibaba.nacos.naming.push.v2.task.PushExecuteTask.run(PushExecuteTask.java:68)
at com.alibaba.nacos.common.task.engine.TaskExecuteWorker$InnerWorker.run(TaskExecuteWorker.java:120)
2024-04-15 03:50:01,058 INFO Client connection 1713011868557_192.168.1.208_41494 disconnect, remove instances and subscribers

展开
收起
真的很搞笑 2024-04-23 12:32:22 55 0
1 条回答
写回答
取消 提交回答
  • Nacos内存占用过大的问题主要涉及以下几个方面:

    JVM堆内存占用:应确保其设置不超过物理内存的70%。

    NIO堆外内存:应检查是否设置了最大值(-XX:MaxDirectMemorySize=),通常建议设为堆内存的1/4。

    Metaspace区:默认为128M,最大值为256M,可根据实际情况适当调整,但最小不应低于100M,以避免类加载问题。

    Rocksdb直接内存:默认为128M,当前无法调整,但实际占用较小,可忽略不计。

    针对您提供的{{{问题}}}中Nacos版本2.2.3命名服务器日志中出现的java.lang.OutOfMemoryError: Cannot reserve 2097152 bytes of direct buffer memory (allocated: 2145506066, limit: 2147483648)错误,这表明Nacos在尝试分配2MB的直接缓冲区时,已分配的直接内存(2145506066 bytes)接近了最大限制(2147483648 bytes,即约2GB)。根据上述我了解的知识中的分析,这种情况很可能是由于NIO堆外内存未设置最大值或设置不合理导致的。
    解决步骤如下:

    检查并调整Nacos服务启动脚本中的JVM参数,确保已添加了对NIO堆外内存的最大值限制。具体操作是在JVM启动参数中增加-XX:MaxDirectMemorySize=<期望值>,其中<期望值>应根据实际物理内存大小和堆内存设置来设定,通常设为堆内存的1/4。例如,若堆内存设置为1.¾GB(即1717986918字节),则NIO堆外内存最大值可设为:
    -XX:MaxDirectMemorySize=429496729

    重启Nacos服务,使新的JVM参数配置生效。

    通过以上步骤,应该能有效限制NIO堆外内存的使用,避免直接内存溢出(OutOfMemoryError)的问题。这样做的目的是确保Nacos在运行过程中不会因为直接内存分配超出系统限制而崩溃,同时保持合理的内存资源分配,以保证服务的稳定性和性能。 ,此回答整理自钉群“Nacos社区群4”

    2024-04-23 17:02:21
    赞同 展开评论 打赏

为微服务建设降本增效,为微服务落地保驾护航。

相关电子书

更多
Python第四讲——使用IPython/Jupyter Notebook与日志服务玩转超大规模数据分析与可视化 立即下载
大规模日志数据平台架构面临的问题与挑战 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载