首页 > 编程语言 > 详细

Tomcat java.lang.OutOfMemoryError: Direct buffer memory

时间:2021-03-10 23:55:26      阅读:35      评论:0      收藏:0      [点我收藏+]

参考 Tomcat注册成系统服务并修改内存

1、前言

在使用 smartboot.socket 作为socket服务端进行开发时,项目中有多个服务端,在项目启动时,只有前两个服务端启动成功,后几个服务端启动失败,并报以下错误

Exception in thread "Thread-8" java.lang.OutOfMemoryError: Direct buffer memory
	at java.nio.Bits.reserveMemory(Unknown Source)
	at java.nio.DirectByteBuffer.<init>(Unknown Source)
	at java.nio.ByteBuffer.allocateDirect(Unknown Source)
	at org.smartboot.socket.buffer.BufferPage.allocate0(BufferPage.java:54)
	at org.smartboot.socket.buffer.BufferPage.<init>(BufferPage.java:42)
	at org.smartboot.socket.buffer.BufferPagePool.<init>(BufferPagePool.java:24)
	at org.smartboot.socket.transport.AioQuickServer.start0(AioQuickServer.java:151)
	at org.smartboot.socket.transport.AioQuickServer.start(AioQuickServer.java:121)
	at com.ruoyi.project.coal.socket.processor.XXXXXXProcessor.openXXXXXXServer(XXXXXXProcessor.java:109)
	at com.ruoyi.project.coal.socket.processor.socketServer.lambda$start$0(socketServer.java:42)
	at java.lang.Thread.run(Unknown Source)

使用的smartboot的版本如下

	    <dependency>
	        <groupId>org.smartboot.socket</groupId>
	        <artifactId>aio-core</artifactId>
	        <version>1.4.2</version>
	    </dependency>

2、解决

  • 1、在网上多次查找相关解决方案,初步判断是socket的问题,并将aioQuickServer.setReadBufferSize(512);设置小一点,发现并不能解决问题
  • 2、根据报错初步判断是nio的问题,根据搜索结果,修改 catalina.bat 文件,并在头部添加 set JAVA_OPTS= -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=256M ,并未解决问题

3、结果

根据多次查找,点击 Tomcat8080w.exe tomcat工具,修改Java的相关设置,将Initial memory pool设置为512MB,将Maximum memory pool设置为1024MB,成功解决问题

Tomcat java.lang.OutOfMemoryError: Direct buffer memory

原文:https://www.cnblogs.com/kikyoqiang/p/14514284.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!