Служба Jrun ColdFusion периодически не запускается
У нас иногда возникает проблема, когда мы пытаемся запустить службу Jrun, и она завершается с двумя следующими ошибками:
ошибка Служба имен JRun не может запуститься через порт 2902 java.net.BindException: Порт используется другой службой или процессом: 2902
info Для этого сервера не настроены источники данных JDBC (см. jrun-resources.xml) error java.net.BindException: Порт используется другой службой или процессом: 8300
Затем мы должны перезагрузить машину, и Jrun без проблем придет. Это очень непостоянно - случается, возможно, один из каждых 10 раз, когда мы перезапускаем сервисы Jrun.
Я видел еще одну ссылку на Stackru, что если Windows Services требуется более 30 секунд для перезапуска, Windows завершает процесс запуска. Возможно, это проблема здесь? Журналы действительно указывают, что эти ошибки генерируются приблизительно через 37 секунд после выполнения команды перезагрузки.
Мы на 64-битной платформе на WinServer 2008.
Спасибо!
2 ответа
Мы сталкивались с подобной проблемой на некоторых наших серверах. К сожалению, netstat никогда не указывал нам фактический конфликт портов. Я подозреваю, что это связано с нашим недавним развертыванием ColdFusion "накопительного исправления" на наших серверах. Мы используем многосерверную редакцию CF 8.0.1 enterprise с большим количеством экземпляров на каждом компьютере - каждый со своей JVM и собственным набором портов. Каждый экземпляр CF привязан к своему веб-сайту IIS и работает как собственная служба Windows.
В течение последних нескольких недель мы начали получать аналогичные исключения "порт используется" при запуске на наших 32-разрядных компьютерах, а также на наших 64-разрядных компьютерах, все из которых работают под управлением Windows Server 2003. Я нашел несколько возможных виновников и попробовал следующие:
- В jrun-jms.xml для каждого экземпляра CF есть запись для транспортного уровня RMI, которая читает
<port>0</port>
- что, согласно документации JRun, означает "выбрать случайный порт". Я сделал это неслучайным и отличным для каждого экземпляра (в диапазоне 2600-2650) и перезапустил каждый экземпляр. Вещи улучшились временно, возможно, по совпадению. - В том же файле, под записью для транспорта TCPIP позже, каждый экземпляр по умолчанию
<port>2522</port>
- поэтому я изменил эти порты на отдельные порты в диапазоне 2500-2550 и перезапустил каждый экземпляр. Похоже, это совсем не помогло. - Я попытался выяснить, могут ли порты в диапазоне 2500-3000 использоваться для каких-либо других целей, и я не смог найти ничего очевидного, и, кроме того, netstat не говорил мне, что какой-либо из моих вариантов использовался.
- В Интернете я нашел кое-что о том, что Windows определяет порты от 1024 до 5000 в качестве диапазона "динамического порта", поэтому я добавил 10000 к номерам портов, которые я установил в jrun-jms.xml, и перезапустил каждый экземпляр снова. Все еще не помогло.
- Я попытался изменить порт в jndi.properties, также добавив 10000 к номерам портов. К сожалению, это означало стирание всех моих подключений wsconfig к IIS и создание их заново с нуля. Я должен был также отредактировать wsconfig_jvm.config, добавив
-DWSConfig.PortScanStartPort=12900
на java.args, чтобы он мог обнаружить мои экземпляры CF. (По умолчанию он сканирует только порты 2900-3000. Подробности см. На bpurcell.org. Это старый пост, но он все еще актуален.) Пока все хорошо!
Мое лучшее предположение - то, что Adobe (или MS Windows) изменила способ, которым некоторый код захватывает "случайные" порты. Но пока я точно знаю, что описанные выше шаги, похоже, решили проблему.
Вы убедились, что услуги на самом деле останавливаются? Диспетчер задач не должен показывать экземпляры jrun.exe. Вы также можете проверить, что связано с этим портом, открыв окно командной строки и запустив
netstat -a -b
Это перечислит все ваши открытые порты, плюс какая программа их использует. Вы также можете использовать
netstat -a -o
Который делает то же самое, что и выше, но в нем будет указан идентификатор процесса вместо имени программы. Затем вы можете сопоставить их с помощью диспетчера задач. Вам нужно будет включить отображение PID в диспетчере задач, перейдя в View->Select Columns и убедившись, что PID отмечен. Я думаю, что процессы jrun не завершаются своевременно.