Служба Jrun ColdFusion периодически не запускается - PullRequest
2 голосов
/ 03 октября 2009

У нас иногда возникает проблема, когда мы пытаемся запустить службу Jrun, и происходит сбой со следующими двумя ошибками:

ошибка: служба именования JRun не может запуститься через порт 2902 java.net.BindException: порт, используемый другой службой или процессом: 2902

info Для этого сервера не настроены источники данных JDBC (см. Jrun-resources.xml) ошибка java.net.BindException: порт используется другим сервисом или процессом: 8300

Затем мы должны перезагрузить машину, и Jrun без проблем встанет. Это очень непостоянно - возможно, один из каждых 10 раз, когда мы перезапускаем службы Jrun.

Я видел еще одну ссылку на StackOverflow, что если Windows Services перезапускается более 30 секунд, Windows завершает процесс запуска. Возможно, это проблема здесь? Журналы действительно указывают, что эти ошибки генерируются примерно через 37 секунд после выполнения команды перезагрузки.

Мы на 64-битной платформе на WinServer 2008.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 октября 2009

Мы сталкивались с подобной проблемой на некоторых наших серверах. К сожалению, netstat никогда не указывал нам фактический конфликт портов. Я подозреваю, что это связано с нашим недавним развертыванием ColdFusion «накопительного исправления» на наших серверах. Мы используем многосерверную редакцию CF 8.0.1 enterprise с большим количеством экземпляров на каждом компьютере - каждый со своей JVM и собственным набором портов. Каждый экземпляр CF подключен к своему собственному веб-сайту IIS и работает как собственная служба Windows.

В течение последних нескольких недель мы начали получать аналогичные исключения «порт используется» при запуске на наших 32-разрядных компьютерах, а также на наших 64-разрядных компьютерах, все из которых работают под управлением Windows Server 2003. Я нашел несколько возможных виновные и попробовали следующее:

  1. В jrun-jms.xml для каждого экземпляра CF есть запись для транспортного уровня RMI, которая читает <port>0</port> - что, согласно документации JRun, означает «выбрать случайный порт». Я сделал это неслучайным и отличным для каждого экземпляра (в диапазоне 2600-2650) и перезапустил каждый экземпляр. Вещи улучшились временно, возможно, по совпадению.
  2. В том же файле, под записью для транспорта TCPIP позже, каждый экземпляр по умолчанию был <port>2522</port> - поэтому я изменил их на отдельные порты для экземпляра в диапазоне 2500-2550 и перезапустил каждый экземпляр. Похоже, это совсем не помогло.
  3. Я попытался выяснить, могут ли порты в диапазоне 2500-3000 использоваться для каких-либо других целей, и я не смог найти ничего очевидного, и, кроме того, netstat не говорил мне, что использовался какой-либо из моих вариантов.
  4. В Интернете я нашел кое-что о том, что Windows называет порты с 1024 по 5000 диапазоном «динамического порта», поэтому я добавил 10000 к номерам портов, которые я установил в jrun-jms.xml, и перезапустил каждый экземпляр снова. Все еще не помогло.
  5. Я попытался изменить порт в jndi.properties, также добавив 10000 к номерам портов. К сожалению, это означало стирание всех моих соединений wsconfig с IIS и создание их заново с нуля. Мне также пришлось отредактировать wsconfig_jvm.config, добавив -DWSConfig.PortScanStartPort=12900 к java.args, чтобы он мог обнаружить мои экземпляры CF. (По умолчанию он сканирует только порты 2900-3000. Подробнее см. bpurcell.org . Это старый пост, но он все еще актуален.) Пока все хорошо!

Мое лучшее предположение заключается в том, что Adobe (или MS Windows) изменила способ, которым часть кода захватывает «случайные» порты. Но пока я точно знаю, что описанные выше шаги, похоже, устранили проблему.

1 голос
/ 08 октября 2009

Подтвердили ли вы, что услуги фактически прекращаются? Диспетчер задач не должен показывать экземпляры jrun.exe. Вы также можете проверить, что связано с этим портом, открыв окно командной строки и запустив

netstat -a -b

В этом списке будут перечислены все ваши открытые порты, а также какая программа их использует. Вы также можете использовать

netstat -a -o

Что делает то же самое, что и выше, но будет содержать идентификатор процесса вместо имени программы. Затем вы можете связать их с помощью диспетчера задач. Вам нужно будет включить отображение PID в диспетчере задач, перейдя в View-> Select Columns и убедившись, что PID отмечен. Я полагаю, что процессы jrun не завершаются своевременно.

...