0

我正在尝试在(1and1 VPS)上运行jWebSocket服务器。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在我的电脑上运行时,一切正常。我使用全新安装的 CentOS 5.8 制作了自己的虚拟服务器virtualbox,它也在那里工作。

我注意到 1and1 VPS 上的 java 使用大量内存 ~1GB(是我的计算机或 virtualbox 上的 10 倍)。在 1and1 VPS 上,我有 2GB 的 RAM(有一个错误),而在 Virtualbox jWebSocket 上运行得很好,只有 512MB 的 RAM。

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

4

2 回答 2

0

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

于 2012-08-24T05:03:53.007 回答
0

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

编辑

当时 jWebSocket 的设计方式是为每个传入的令牌创建一个线程,并且在不再需要该线程时不销毁它。

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

于 2012-09-06T10:35:53.537 回答