2012-04-10 2 views
9

Привет, ребята: У меня есть код, который выполняет несколько запросов на отдых по соединению, которое ssh перенаправлено на машину AWS (fyi: эти запросы попадают на сервер Solr, работающий на этом машина), а запросы выполняются против моего localhost (который перенаправляется на экземпляр AWS).Os x terminal, ssh и слишком много открытых файлов

Вначале код запускает отличное получение данных по мере необходимости, но после запуска какое-то время код останавливается (в затмении).

В этот самый момент, терминал (т.е. там, где я начал свой SSH туннель) проходит полностью заморожен, пополняя строкой:

«Accept: слишком много открытых файлов»

Поскольку эта бесконечная печать не связана с терминалом bash (т. е. я не могу сказать, что ssh-соединение все еще живое или нет, и нет текста, указывающего, в какую оболочку im ... просто незаметные, неумолимые утверждения печати) Я не могу сказать что он исходит от амазонки или от моего клиентского терминала.

Я хочу, чтобы найти причину такого поведения и определить машину, которая вызывает мой терминал, чтобы взорвать

Чтобы проверить, какой из двух машин вызывали бесконечные выходы печати из ошибок, я побежал ulimit на сервере ... и нашел , что максимальное количество разрешенных файлов (на сервере aws) было значительно выше количества открытых файлов (также определяемых с помощью ulimit) в любой момент времени, в то время как клиентская программа (работающая от мой ide) исполняет.

Я сделал тот же тест на моем клиенте и не обнаружил значительного увеличения количества открытых файлов.

Некоторые детали: я запускаю несколько сотен запросов на сервер SOLR с более чем 100 ГБ данных за короткий промежуток времени.

Любые советы о том, как определить, почему мой sshd mac os x terminal умирает и бесконечно печатает это сообщение. потенциально очень полезен для меня. Разумеется, они или не были специфичны для solr. При этом может понять, почему это произошло при использовании службы solr, также может помочь решить эту проблему.

ответ

3

Здесь недостаточно информации, но, по-видимому, ssh поражает свой дескриптор файлового дескриптора процесса при попытке локального подключения соединений к перенаправленному сокету, что, в свою очередь, предполагает, что уже открытые соединения не являются будучи своевременно закрытым. Вы можете запустить ssh с -d, чтобы узнать подробности соединений и отключений; вы можете захотеть захватить его stderr и использовать скрипт для отслеживания операций сокета, поскольку они будут похоронены во множестве других отладочных данных.

Отметьте, что ssh может ограничивать свои открытые файловые дескрипторы за пределами по умолчанию, чтобы избежать атак отказа в обслуживании на его переадресованном порту; Я не вижу никаких указаний на это в документации, но это то, чего я ожидал бы.

12

Вы можете попробовать глядя на ulimit (через терминал типа):

ulimit -a 

В частности, проверьте значение для open files. На моей машине (OS X) он сообщает 256.Вы можете попробовать увеличить его до 512:

ulimit -n 512 
+1

Возможно, вам понадобится сделать это для пользователя, с которым работает SOLR, например как кошка. – nickdos

+0

Это не сработало для меня. – ethicalhack3r

+0

Я должен был сделать это для каждого экземпляра bash, в котором запускались программы, требующие большего количества файлов. – Chris

0
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 

Примечание - выберите номер в ваш собственный риск

Смежные вопросы