Служба Jrun ColdFusion периодически не запускается

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

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

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

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

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

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

Спасибо!


person Community    schedule 03.10.2009    source источник


Ответы (2)


У нас возникла аналогичная проблема на некоторых наших серверах. К сожалению, 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) изменила способ захвата "случайных" портов некоторым кодом своего кода. Но все, что я знаю наверняка, это то, что описанные выше шаги, похоже, устранили проблему.

person Paul Karlin    schedule 09.10.2009

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

netstat -a -b

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

netstat -a -o

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

person Bryan Kaiser    schedule 07.10.2009