嗨,大家好:我有一个运行了这是ssh的转发到AWS机连接几个休息查询一些代码(供参考:这些查询都是打这台机器上运行的Solr的服务器),而查询反对我的本地主机上运行(这被转发到AWS实例)。
该代码的初始运行方式越来越大的数据作为必要的,但运行一段时间后,该代码将停止(在Eclipse)。
在这个确切的时刻,(在那里我开始我的SSH隧道IE)的终端变为完全冻结,以字符串填充:
“接受:打开的文件太多”
由于这种无限打印不带一个bash终端关联(即我不能告诉羯羊ssh连接在世与否,并没有文字显示在...只是unpridled,无情的报表打印,其外壳IM)我不能告诉羯羊它是从亚马逊的到来,或者从我的客户端。
我想找到的这种行为的原因,并查明这是造成我的终端爆炸机器
为了测试这两台机器是造成错误的无限打印出来,我跑在服务器上的ulimit命令, 发现允许(AWS的服务器上)打开文件的最大数量远高于量打开文件的客户端程序(从我的IDE中运行)正在执行,而在任何给定的时间(使用的ulimit也确定)。
我做我的客户在相同的测试,发现在打开文件的数量没有显著增加。
一些副作用的细节:我跑几百查询到具有对数据的100GB在很短的时间周期内SOLR服务器。
如何确定为什么我的sshd Mac OS X的终端是死亡和无限打印此消息将可能对我非常有用的任何提示。 当然,用是否他们具体到Solr。 这就是说, 任何见解为什么使用Solr的服务时会发生也可以帮助解决这个问题。
你可以尝试寻找ulimit
(通过终端类型):
ulimit -a
具体来说,检查值open files
。 在我的机器(OS X)它报告256你可能想尝试一下提高到512:
ulimit -n 512
这似乎已经为我工作:
echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile
然后,重新启动OS X.
https://superuser.com/questions/302754/increase-the-maximum-number-of-open-file-descriptors-in-snow-leopard
没有足够的信息,这里是一定的,但它听起来像ssh
是创下了每进程文件描述符限制,而试图接受转发的套接字连接本地,这反过来又意味着已经打开的连接没有被在一个封闭及时。 您可以运行ssh
与-d
看到的连接和断开的细节; 你可能想捕捉它的标准错误,并使用脚本来跟踪套接字操作,因为他们会被葬在很多其他的调试信息。
需要注意的是ssh
本身可能会限制其打开的文件描述符超过默认以避免其转发端口上的拒绝服务攻击; 我没有看到文档中的这个任何迹象,但它是我所期待的那种东西。
sudo launchctl limit maxfiles 1000000 unlimited
要么
sudo sysctl -w kern.maxfilesperproc=1000000
sudo sysctl -w kern.maxfilesperproc=18000
为了确认修改,使用sudo把你设置/etc/sysctl.conf中(你可能需要创建),就像这样:
kern.maxfiles=20480
kern.maxfilesperproc=18000
注-在您自己的风险选择该号码