日期:2014-05-20  浏览次数:20826 次

mina多并发实时传输问题!急!急!急!-- 请高手帮忙
说一下需求:
1、客户端1000多个,需要同时向服务器发送数据;
2、每个客户端每秒发送一次数据,并且是不间断地发送至少24小时;
3、服务器接收到数据后存储到数据库,我们目前用的是postgresql

服务器用到了mina框架,当接收到数据后先把数据缓存到一个list里,有另外一个线程对该list进行检测,当数据量达到500
条时批量写入数据库。

开始每个客户端每秒发送数据量大约1k,同时开启3000个并发都可以支持,但是现在数据量上升到10k左右的时候性能急剧下降,
并发超过300个的时候就报错:
java.lang.OutOfMemoryError: Java heap space
  at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:39)
  at java.nio.ByteBuffer.allocate(ByteBuffer.java:312)
  at org.apache.mina.common.SimpleByteBufferAllocator.allocate(SimpleByteBufferAllocator.java:45)
  at org.apache.mina.common.ByteBuffer.allocate(ByteBuffer.java:225)
  at org.apache.mina.common.ByteBuffer.allocate(ByteBuffer.java:214)
  at org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:210)
  at org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:198)
  at org.apache.mina.transport.socket.nio.SocketIoProcessor.access$400(SocketIoProcessor.java:45)
  at org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:485)
  at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
  at java.lang.Thread.run(Thread.java:595)

整了几天了,始终没弄清楚。小弟也是才接触mina以及java nio,开始以为是java虚拟机内存不够,可是调大了以后还是同样出错。
郁闷阿,大家给帮帮忙吧。



------解决方案--------------------
哎,不会啊,帮你顶吧
------解决方案--------------------
java.lang.OutOfMemoryError: Java heap space 

多开几个selector看看 应该不至于的
nima可以配置他的线程数、selector数 你把这几个数提高一定看看。