【问题标题】:primitive #primSocketSendDone: in Socket failed原始 #primSocketSendDone:在 Socket 中失败
【发布时间】:2015-01-05 14:13:52
【问题描述】:

我正在使用 Mongotalk 和 Pharo 进行大量分析。

对于每次分析,我都会使用相同的图像运行一个新的 Pharo 实例,并且一切正常,直到在随机点,我得到一个 PrimitiveFailed,如下所示:

^[[31mPrimitiveFailed: primitive #primSocketSendDone: in Socket failed
^[[0mSocket(Object)>>primitiveFailed:
Socket(Object)>>primitiveFailed
Socket>>primSocketSendDone:
Socket>>waitForSendDoneFor:
Socket>>sendSomeData:startIndex:count:for:
Socket>>sendSomeData:startIndex:count:
Socket>>sendData:count:
SocketStream>>flush in Block: [ socket sendData: outBuffer count: outNextToWrite...etc...
BlockClosure>>on:do:
SocketStream>>flush
LittleEndianStream>>flush
InsertOperation(MongoOperation)>>flush
InsertOperation(MongoOperation)>>write
Mongo>>insert:collection:
MongoDatabase>>insert:collection:
MongoCollection>>insert:
MongoCollection>>add:
MyClass>>methodThatCallsAddOnMongoCollection

之后,即使我为每个分析运行一个新的 Pharo 进程,我的所有分析都失败了。

有人知道这里出了什么问题,为什么?

干杯,

【问题讨论】:

  • 你在谈论多少个分析,你是在并行运行它们吗?
  • 在哪个平台上?
  • 如果您在 *nix 系统上,您可能希望使用 ulimit -n 检查打开文件的最大数量以及当前打开的文件数量(例如 lsof | wc -l)。
  • 在 Linux 上按顺序运行,所以我怀疑打开的文件或连接太多,但我会调查一下
  • 您是从 shell 脚本启动它们吗?然后你应该检查你的 mongodb 连接设置

标签: mongodb smalltalk pharo


【解决方案1】:

过去 somewhere 的某个地方有 1024 个套接字限制。 vm list 可能是最好的询问地点

【讨论】:

【解决方案2】:

通过修改我的客户端代码以减少存储更多数据的频率(即在内存中缓存更多数据)解决了这个问题,问题消失了,现在我什至可以并行运行 16 个 Pharo 实例。

【讨论】:

  • 感谢您在本次跟进中分享您的经验
猜你喜欢
  • 2022-10-24
  • 2020-03-29
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多