jWebSocket java.lang.OutOfMemoryError:无法创建新的本机线程

时间:2012-08-24 04:14:15

标签: java websocket out-of-memory

我正在尝试在jWebSocket(1和1 VPS)上运行CentOS 5.8服务器。刚刚启动服务器和客户端的几个请求(重新加载网页)后,我收到此错误:

Exception in thread "jWebSocket TCP-Connector 01.33719.16" java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:691)
        at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:943)
        at java.util.concurrent.ThreadPoolExecutor.ensurePrestart(ThreadPoolExecutor.java:1555)
        at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:333)
        at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:546)
        at java.util.concurrent.ScheduledThreadPoolExecutor.submit(ScheduledThreadPoolExecutor.java:646)
        at org.jwebsocket.tcp.TimeoutOutputStreamNIOWriter.sendPacket(TimeoutOutputStreamNIOWriter.java:215)
        at org.jwebsocket.tcp.TCPConnector.sendPacket(TCPConnector.java:279)
        at org.jwebsocket.server.BaseServer.sendPacket(BaseServer.java:186)
        at org.jwebsocket.server.TokenServer.sendPacketData(TokenServer.java:405)
        at org.jwebsocket.server.TokenServer.sendTokenData(TokenServer.java:388)
        at org.jwebsocket.server.TokenServer.sendToken(TokenServer.java:312)
        at org.jwebsocket.plugins.TokenPlugIn.sendToken(TokenPlugIn.java:174)
        at org.jwebsocket.plugins.system.SystemPlugIn.sendWelcome(SystemPlugIn.java:397)
        at org.jwebsocket.plugins.system.SystemPlugIn.connectorStarted(SystemPlugIn.java:261)
        at org.jwebsocket.plugins.BasePlugInChain.connectorStarted(BasePlugInChain.java:126)
        at org.jwebsocket.server.TokenServer.connectorStarted(TokenServer.java:170)
        at org.jwebsocket.engines.BaseEngine.connectorStarted(BaseEngine.java:93)
        at org.jwebsocket.tcp.TCPEngine.connectorStarted(TCPEngine.java:320)
        at org.jwebsocket.tcp.TCPConnector$ClientProcessor.run(TCPConnector.java:502)
        at java.lang.Thread.run(Thread.java:722)

但是当我在电脑上运行jWebSocket时,一切正常。我使用virtualbox和CentOS 5.8全新安装创建了自己的虚拟服务器,它也在那里工作。

我注意到1和1 VPS上的java使用了大量内存~1GB(比我的计算机或虚拟机上多10倍)。在1和1 VPS上,我有2GB的RAM(有一个错误),而在Virtualbox上,jWebSocket运行正常,只有512MB的RAM。

导致内存不足错误的原因是什么?如果您有任何建议,请分享。我不知道该怎么办了。

2 个答案:

答案 0 :(得分:0)

检查链接:http://devgrok.blogspot.sk/2012/03/resolving-outofmemoryerror-unable-to.html
听起来他们必须增加每个用户限制的linux max进程 至少与我遇到的问题的相似之处在于你得到了同样的异常+两者都运行linux:)

答案 1 :(得分:0)

这是1and1(http://www.1and1.pl/)虚拟主机问题。他们使用Parallels Virtuozzo Containers和所谓的User Beancounters或UBC参数。这是一系列限制,女巫是我的问题的原因。您可以在/ proc / user_beancounters中看到此限制。当达到一个名为“numproc”的限制时,我的应用程序无法创建新线程。

修改

那时jWebSocket的设计方式是为每个传入的令牌创建一个线程,而不再需要这个线程时就销毁它。

我不再使用jWebSocket,我用用PHP编写的websocket serwer替换它。