#java #tomcat
Вопрос:
Обычно я развертываю свои проекты Tomcat/Java на AWS. Я очень хорошо знаком с процессом открытия порта для удаленной отладки. Обычно я использую порт 8000.
Я знаю, что вам нужно установить параметры-Xdebug-Xrunjdwp при запуске Java и что целевой порт не должен быть заблокирован брандмауэром.
Недавно клиент попросил, чтобы мы использовали виртуальные машины Azure вместо AWS, поэтому я настроил одну из них. Я убедился, что открыл правильный порт и настроил правильные параметры Java, и из журналов Tomcat я вижу, что они были распознаны.
Тем не менее, все попытки подключиться к удаленному отладчику завершаются ошибкой с сообщением о тайм-ау, как будто никто не слушает.
Почему это не работает? Что я мог упустить из виду?
Комментарии:
1. Краткое примечание: если «никто не слушает», то этот факт обычно распространяется через ICMP (или TCP_RST), и вы должны немедленно увидеть «отказано в подключении». Если у вас «тайм-аут подключения», мне кажется, что брандмауэр удаляет входящие TCP_SYN. Убедитесь, что брандмауэр не выполняет это на уровне операционной системы (как вы упомянули, вы настроили политику безопасности AWS, чтобы разрешить это).
2. Да, я тоже собирался предложить проверить настройки пожарной стены, либо на физической машине, либо на виртуальной машине. Это может быть любое устройство между вашей рабочей станцией и виртуальной машиной, которое также может блокировать эти порты, поэтому любой маршрутизатор или прокси-сервер на стороне клиента может быть настроен на отклонение пакетов. Трассировка маршрута может помочь в этом.
Ответ №1:
Это не было проблемой с брандмауэром или чем-то еще на уровне операционной системы. Это связано с незначительными изменениями в самой JVM.
Ранее выражение «адрес=8000» означало «прослушивание всех интерфейсов порта 8000». Они изменили его на «прослушивание на локальном хосте порта 8000». Это фактически означает, что «удаленная» отладка возможна только в том случае, если клиент находится на том же компьютере.
Чтобы исправить это, вам нужно либо указать «адрес=[ip-адрес]:8000», либо использовать специальный синтаксис «адрес=*:8000», который воспроизводит старое поведение прослушивания на всех интерфейсах.
Откровенный