Os x终端,ssh和太多打开的文件

jay*_*100 11 macos ssh terminal solr

嗨大家好:我有一些代码可以通过ssh转发到AWS机器的连接运行几个休息查询(fyi:这些查询正在点击在这台机器上运行的Solr服务器),并且查询针对我的localhost运行(转发到AWS实例).

代码最初运行时很有必要获取数据,但运行一段时间后,代码停止(在eclipse中).

在这个确切的时刻,终端(即我已经启动了我的ssh隧道)完全冻结,填满了字符串:

"接受:太多打开的文件"

因为这个无限的打印不与bash终端相关联(即我无法告诉ssh连接是否仍然存在,并且没有文本指示哪个shell进入...只是未经破坏,无情的打印语句)我不能告诉他们来自亚马逊,还是来自我的客户终端.

我想找到这种行为的原因并找出导致我的终端爆炸的机器

为了测试这两台机器中的哪一台导致错误的无限打印输出,我在服务器上运行了ulimit命令...并发现允许的最大打开文件数(在aws服务器上)远高于在客户端程序(从我的ide运行)执行时,在任何给定时间打开文件(也使用ulimit确定).

我在我的客户端上进行了相同的测试,发现打开文件的数量没有显着增加.

一些方面的细节:我在一个SOLR服务器上运行了数百个查询,该服务器在短时间内拥有超过100GB的数据.

有关如何确定我的sshd mac os x终端死亡和无限打印此消息的任何提示对我来说可能非常有用.当然,无论有没有,他们都是solr特有的.也就是说,任何有关使用solr服务时会发生这种情况的见解也可能有助于解决这个问题.

nic*_*dos 13

您可以尝试查看ulimit(通过终端类型):

ulimit -a
Run Code Online (Sandbox Code Playgroud)

具体来说,检查值open files.在我的机器(OS X)上,它报告256.您可能想尝试将其增加到512:

ulimit -n 512
Run Code Online (Sandbox Code Playgroud)


eth*_*k3r 6

这似乎对我有用:

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
Run Code Online (Sandbox Code Playgroud)

然后重启OS X.

https://superuser.com/questions/302754/increase-the-maximum-number-of-open-file-descriptors-in-snow-leopard


gee*_*aur 4

这里没有足够的信息可以确定,但听起来在ssh尝试在本地接受与转发的套接字的连接时达到了每个进程的文件描述符限制,这反过来表明已经打开的连接没有及时关闭时尚。您可以运行sshwith-d查看连接和断开的详细信息;您可能希望捕获其 stderr 并使用脚本来跟踪套接字操作,因为它们将隐藏在许多其他调试信息中。

请注意,ssh它本身可能会限制其打开的文件描述符超出默认值,以避免对其转发的端口进行拒绝服务攻击;我在文档中没有看到任何迹象,但这是我所期望的。