Какие инструменты использовать и как найти файловые дескрипторы, вытекающие из Glassfish? - PullRequest
3 голосов
/ 26 апреля 2010

Мы выпускаем новый код в производство каждую неделю, и у Glassfish не было никаких проблем.В эти выходные нам пришлось перенести стойки у нашего хостинг-провайдера.Не было никаких изменений кода (они просто выключались, перемещались, переставлялись и включались), но мы находимся в новой сетевой инфраструктуре, и внезапно мы просачиваем файловые дескрипторы как сито.Поэтому я предполагаю, что существует какое-то соединение, пытающееся установить соединение, которое сейчас не удается из-за изменения сети.

Я использую Glassfish v2ur2-b04 / AS9.1_02 на RHEL4 со встроенным экземпляром IMQ.После переезда я начал видеть:

[# | 2010-04-25T05: 34: 02.783 + 0000 | SEVERE | sun-appserver9.1 | javax.enterprise.system.container.web | _ThreadID= 33; _ThreadName = SelectorThread-? 4848; _RequestID = c4de6f6d-c1d6-416d-ac6e-49750b1a36ff; | WEB0756: Обнаружено исключение при обработке HTTP.
java.io.IOException: слишком много открытых файлов
на солнце.nio.ch.ServerSocketChannelImpl.accept0 (собственный метод)
...
[# | 2010-04-25T05: 34: 03.327 + 0000 | ПРЕДУПРЕЖДЕНИЕ | sun-appserver9.1 | javax.enterprise.system.stream.err | _ThreadID = 34; _ThreadName = Timer-1; _RequestID = d27e1b94-d359-4d90-a6e3-c7ec49a0f383; | java.lang..java: 1031)

С помощью lsof я проверяю количество дескрипторов файлов и вижу довольно много записей, которые выглядят так:

java 18510 root 8556u sock 0,4 1555182 не может идентифицировать протокол
java 18510 root 8557u sock 0,4 1555320 не может идентифицировать протокол
jav18510 root 8558u sock 0,4 1555736 не может идентифицировать протокол
java 18510 root 8559u sock 0,4 1555883 не может идентифицировать протокол

Если я выполняю подсчет дескрипторов открытых файлов каждыйминуту, я вижу это растет на 12 каждую минуту.Я понятия не имею, что это за сокеты.

Я удалил свое приложение, поэтому запущен только простой экземпляр Glassfish, и я все еще вижу, что в нем происходит утечка 12 файловых дескрипторов в минуту.Так что я думаю, что эта утечка в Glassfish или, возможно, IMQ.

Какой подход я должен использовать для отслеживания этих сокетов неизвестного протокола?Какие инструменты я могу использовать (или флаги, которые я могу передать lsof), чтобы получить больше информации о том, где искать?

спасибо,

chuck

1 Ответ

0 голосов
/ 28 апреля 2011

Я нашел это решение;

при условии, что GlassFish работает как пользователь "GlassFish"

Добавьте следующие строки в /etc/security/limits.conf увеличить максимальное количество открытых файлов для пользователь, которого Glassfish запускает как:

стеклянная рыба мягкий нофил 32768
стеклянная рыба жесткий нофил 65536

...