【问题标题】:Boot2Docker Hazelcast and ulimitBoot2Docker Hazelcast 和 ulimit
【发布时间】:2014-12-24 15:32:37
【问题描述】:

我尝试为我们开发的软件创建一个开发环境。为此,我使用 Docker 和 Boot2docker,因为我在 mac (Yosemite) 上工作。 我们在产品中使用 Hazelcast,但是当我“dockerize”它时我遇到了问题。 在第一次连接到 Hazelcast 时会发生以下情况:

INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Hazelcast Community Edition 3.2.2 (20140527) starting at Address[172.17.0.2]:5601
déc. 24, 2014 2:11:27 PM com.hazelcast.system
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Copyright (C) 2008-2014 Hazelcast.com
déc. 24, 2014 2:11:27 PM com.hazelcast.core.LifecycleService
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Address[172.17.0.2]:5601 is STARTING
déc. 24, 2014 2:11:27 PM com.hazelcast.instance.Node
AVERTISSEMENT: [172.17.0.2]:5601 [akio] [3.2.2] No join method is enabled! Starting standalone.
déc. 24, 2014 2:11:27 PM com.hazelcast.core.LifecycleService
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Address[172.17.0.2]:5601 is STARTED
déc. 24, 2014 2:12:30 PM com.hazelcast.nio.SocketAcceptor
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Accepting socket connection from /127.0.0.1:55736
déc. 24, 2014 2:12:30 PM com.hazelcast.nio.TcpIpConnectionManager
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] 5601 accepted socket connection from /127.0.0.1:55736
déc. 24, 2014 2:12:30 PM com.hazelcast.client.AuthenticationRequest
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Received auth from Connection [/127.0.0.1:55736 -> null] live=true, client=true, type=JAVA_CLIENT, successfully authenticated
déc. 24, 2014 2:12:30 PM com.hazelcast.nio.SocketAcceptor
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Accepting socket connection from /172.17.0.2:57088
déc. 24, 2014 2:12:30 PM com.hazelcast.nio.TcpIpConnectionManager
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] 5601 accepted socket connection from /172.17.0.2:57088
déc. 24, 2014 2:12:30 PM com.hazelcast.client.AuthenticationRequest
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Received auth from Connection [/172.17.0.2:57088 -> null] live=true, client=true, type=JAVA_CLIENT, successfully authenticated
déc. 24, 2014 2:12:31 PM com.hazelcast.partition.InternalPartitionService
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Initializing cluster partition table first arrangement...
déc. 24, 2014 2:13:42 PM com.hazelcast.nio.TcpIpConnection
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Connection [Address[172.17.0.2]:57088] lost. Reason: Socket explicitly closed
déc. 24, 2014 2:13:42 PM com.hazelcast.nio.TcpIpConnection
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Connection [Address[127.0.0.1]:55736] lost. Reason: Socket explicitly closed
déc. 24, 2014 2:13:42 PM com.hazelcast.initializer
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Destroying node initializer.
déc. 24, 2014 2:13:42 PM com.hazelcast.instance.Node
INFOS: [172.17.0.2]:5601 [akio] [3.2.2] Hazelcast Shutdown is completed in 111 ms.
java.lang.OutOfMemoryError: unable to create new native thread
déc. 24, 2014 2:13:42 PM com.hazelcast.concurrent.lock.operations.LockOperation
GRAVE: [172.17.0.2]:5601 [akio] [3.2.2] unable to create new native thread
java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:714)
    at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:949)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1360)
    at com.hazelcast.spi.impl.BasicInvocation$InvocationFuture.runAsynchronous(BasicInvocation.java:617)
    at com.hazelcast.spi.impl.BasicInvocation$InvocationFuture.set(BasicInvocation.java:668)
    at com.hazelcast.spi.impl.BasicInvocation.notify(BasicInvocation.java:303)
    at com.hazelcast.spi.impl.BasicPartitionInvocation.notify(BasicPartitionInvocation.java:28)
    at com.hazelcast.spi.impl.ResponseHandlerFactory$LocalInvocationResponseHandler.sendResponse(ResponseHandlerFactory.java:144)
    at com.hazelcast.spi.impl.BasicOperationService.processOperation(BasicOperationService.java:385)
    at com.hazelcast.spi.impl.BasicOperationService.access$300(BasicOperationService.java:102)
    at com.hazelcast.spi.impl.BasicOperationService$BasicOperationProcessorImpl.process(BasicOperationService.java:754)
    at com.hazelcast.spi.impl.BasicOperationScheduler$PartitionThread.process(BasicOperationScheduler.java:276)
    at com.hazelcast.spi.impl.BasicOperationScheduler$PartitionThread.doRun(BasicOperationScheduler.java:270)
    at com.hazelcast.spi.impl.BasicOperationScheduler$PartitionThread.run(BasicOperationScheduler.java:245)

déc. 24, 2014 2:13:42 PM com.hazelcast.spi.OperationService
AVERTISSEMENT: [172.17.0.2]:5601 [akio] [3.2.2] While sending op error... op: com.hazelcast.concurrent.lock.operations.LockOperation@4ff5ed2a, error: java.lang.OutOfMemoryError: unable to create new native thread
com.hazelcast.spi.exception.ResponseAlreadySentException: NormalResponse already sent for callback: BasicInvocation{ serviceName='hz:impl:lockService', op=com.hazelcast.concurrent.lock.operations.LockOperation@4ff5ed2a, partitionId=50, replicaIndex=0, tryCount=100, tryPauseMillis=500, invokeCount=1, callTimeout=10000, target=Address[172.17.0.2]:5601}, current-response: : com.hazelcast.core.HazelcastInstanceNotActiveException: Hazelcast instance is not active!
    at com.hazelcast.spi.impl.ResponseHandlerFactory$LocalInvocationResponseHandler.sendResponse(ResponseHandlerFactory.java:141)
    at com.hazelcast.spi.impl.BasicOperationService.handleOperationError(BasicOperationService.java:531)
    at com.hazelcast.spi.impl.BasicOperationService.processOperation(BasicOperationService.java:404)
    at com.hazelcast.spi.impl.BasicOperationService.access$300(BasicOperationService.java:102)
    at com.hazelcast.spi.impl.BasicOperationService$BasicOperationProcessorImpl.process(BasicOperationService.java:754)
    at com.hazelcast.spi.impl.BasicOperationScheduler$PartitionThread.process(BasicOperationScheduler.java:276)
    at com.hazelcast.spi.impl.BasicOperationScheduler$PartitionThread.doRun(BasicOperationScheduler.java:270)
    at com.hazelcast.spi.impl.BasicOperationScheduler$PartitionThread.run(BasicOperationScheduler.java:245)

在 google 上搜索后,此错误可能是由于用户可以控制的边界过程引起的。在我研究之后,应该在主机(Boot2Docker)上使用“ulimit -u”,但它不提供选项。

有人已经遇到过这个问题吗?如果是这样,你能绕过它吗?

PS: Docker 主机 = 最终的 CentOS 6.6 java版本“1.7.0_60” Hazelcast = 3.2.2

【问题讨论】:

  • 内存不足异常是否相关? java.lang.OutOfMemoryError: 无法创建新的本地线程
  • 事实上,这是我找到的解释服务停止的唯一线索

标签: docker hazelcast boot2docker ulimit


【解决方案1】:

我不确定什么不提供“ulimit -u”选项,但通常你在 linux shell 上运行它。您必须为 docker 容器内以及主机上的打开文件配置软硬限制。我自己从未使用过 docker,但这是一个常见的 linux 问题,没有任何 docker 不是 Hazelcast 特有的。

【讨论】:

  • 使用 docker,必须在主机上设置限制(不可能在 contenair 本身中进行)。 Docker 在 Mac 下无法原生运行,必须从 boot2docker(基于 Tiny Core Linux 的 VM)启动。但是 boot2docker 中的 ulimit 不提供 -u 选项来设置每个用户的最大线程数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多