我已經編寫了一個應用程序,使用Gearman向一個或多個工作人員提交作業(客戶端),尤其是java-gearman-service 0.6.2。java-gearman-client - 生產越來越多的線程
現在我運行一個無限循環來檢查每10秒是否需要將新Job提交給Jobserver。這背後有一些邏輯。請注意,我只是想提交它們,沒有得到結果或回調。
基本上我做的是:
Gearman gearman = Gearman.createGearman();
GearmanClient client = gearman.createGearmanClient();
client.addServer(gearman.createGearmanServer("someip",somePort);
while(true) {
// get the jobs to submit from the application logic
client.submitBackgroundJob("functionname","dataBytes");
// sleep for a few seconds.
}
這將產生越來越多的線程,直到這麼多的內存消耗,一個OutOfMemory
將引發異常。
我試圖實例化的循環Gearman
和GearmanClient
- 和關閉它們具有:
client.shutdown();
gearman.shutdown();
所有作業提交後,但這會導致:
28的Gearman-1 ] INFO gearman - [127.0.1.1:4730]:連接
634 [main] FATAL main - Exception!
java.lang.NullPointerExce ption
在org.gearman.impl.util.GearmanUtils.toString(未知來源)
在org.gearman.impl.serverpool.AbstractConnectionController.onDisconnect(未知來源)
在org.gearman。 impl.server.remote.GearmanServerRemote $ InnerGearmanConnectionHandler.onDisconnect(來源不明)
在org.gearman.impl.core.GearmanConnectionManager $ SocketHandlerImpl.onDisconnect(來源不明)
在org.gearman.impl.re actor.SocketImpl.closeConnection(來源不明)
在org.gearman.impl.reactor.SocketImpl.close(來源不明)
在org.gearman.impl.core.GearmanConnectionManager $ SocketHandlerImpl $的Connection.close(未知源)
在org.gearman.impl.server.remote.GearmanServerRemote.shutdown(來源不明)
在org.gearman.impl.GearmanImpl.shutdown(來源不明)
在所有MyApplication。啓動(ClientManager.java:c lientShutdownLine)
31 [Gearman的-1] INFO的Gearman - [127.0.1.1:4730]:斷開
java.lang.IllegalStateException
在org.gearman.impl.client.GearmanJobReturnImpl.eof(未知源)
在org.gearman.impl.client.ClientImpl.failTo(來源不明)
在org.gearman.impl.client。ClientImpl.onClose(來源不明)
在org.gearman.impl.client.ClientImpl.access $ 700(來源不明)
在org.gearman.impl.client.ClientImpl $ InnerConnectionController.onClose(來源不明)
在org.gearman.impl.serverpool.AbstractConnectionController.closeServer(未知來源)
在org.gearman.impl.serverpool.AbstractConnectionController.onDisconnect(未知來源)
在org.gearman.impl 。服務r.remote.GearmanServerRemote $ InnerGearmanConnectionHandler.onDisconnect(來源不明)
在org.gearman.impl.core.GearmanConnectionManager $ SocketHandlerImpl.onAccept(來源不明)
在org.gearman.impl.reactor.NioReactor $ 1 .completed(來源不明)
在org.gearman.impl.reactor.NioReactor $ 1.completed(來源不明)
在sun.nio.ch.Invoker.invokeUnchecked(來源不明)
在sun.nio.ch.Invoker $ 2.run(來源不明)
在sun.nio.ch.AsynchronousChannelGroupImpl $ 1.run(來源不明)
在java.util.concurrent.ThreadPoolExecutor.runWorker(來源不明)
我如何避免Gearman-Java-Service在一段時間後產生如此多的線程?