I have an app that will create and stop ActorSystems many times during the lifetime of the app. It is currently using Akka 2.0.4. After about 20 or 30 cycles of actor system creation and stoppage, we start getting these errors when creating a new ActorSystem:
Uncaught error from thread [JobServer-akka.actor.default-dispatcher-6774] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[JobServer]
java.lang.OutOfMemoryError: Direct buffer memory
at java.nio.Bits.reserveMemory(Bits.java:632)
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:97)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:288)
at org.jboss.netty.channel.socket.nio.SocketSendBufferPool$Preallocation.<init>(SocketSendBufferPool.java:158)
at org.jboss.netty.channel.socket.nio.SocketSendBufferPool.<init>(SocketSendBufferPool.java:40)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.<init>(AbstractNioWorker.java:123)
at org.jboss.netty.channel.socket.nio.NioWorker.<init>(NioWorker.java:49)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.createWorker(NioWorkerPool.java:42)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.createWorker(NioWorkerPool.java:26)
at org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool.createWorker(AbstractNioWorkerPool.java:98)
at org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool.<init>(AbstractNioWorkerPool.java:60)
at org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool.<init>(AbstractNioWorkerPool.java:74)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.<init>(NioWorkerPool.java:37)
at org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory.<init>(NioServerSocketChannelFactory.java:131)
at akka.remote.netty.NettyRemoteServer.<init>(Server.scala:30)
at akka.remote.netty.NettyRemoteTransport.liftedTree1$1(NettyRemoteSupport.scala:72)
at akka.remote.netty.NettyRemoteTransport.<init>(NettyRemoteSupport.scala:72)
at sun.reflect.GeneratedConstructorAccessor18.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3$$anonfun$apply$1.apply(DynamicAccess.scala:108)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3$$anonfun$apply$1.apply(DynamicAccess.scala:105)
at akka.actor.DynamicAccess$class.withErrorHandling(DynamicAccess.scala:72)
at akka.actor.ReflectiveDynamicAccess.withErrorHandling(DynamicAccess.scala:90)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.apply(DynamicAccess.scala:105)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.apply(DynamicAccess.scala:102)
at scala.Either.fold(Either.scala:96)
at akka.actor.ReflectiveDynamicAccess.createInstanceFor(DynamicAccess.scala:102)
at akka.remote.RemoteActorRefProvider.init(RemoteActorRefProvider.scala:85)
at akka.actor.ActorSystemImpl._start(ActorSystem.scala:588)
at akka.actor.ActorSystemImpl.start(ActorSystem.scala:595)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:111)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:104)
at spark.util.AkkaUtils$.createActorSystem(AkkaUtils.scala:64)