Jvm занимает много времени, чтобы решить ip-адрес для localhost

Кажется, у меня проблема с производительностью "sbt test" после перехода на macOS Sierra. На предыдущей версии OS X прошло около 40-50 секунд. macOS Сьерра время намного выше. Последний прогон, который я сделал, составлял около 15 минут. Время компиляции примерно такое же, как у "El Capitan".

Я только один из своей команды, чтобы попробовать этот новый macOS, поэтому я не могу сказать, происходит ли это только на моем mac или это универсальная проблема.

У моего коллеги была аналогичная проблема с Ubuntu, и это было связано со случайным числом, замедляющим тесты - Медленный ответ службы Times: Java SecureRandom и /dev/random

К сожалению, это не сработало для меня. Первоначально я попробовал это на JDK 8u54, а затем попытался обновить JDK 8u102, и это тоже не помогло.

P.S. Я запускаю Macbook Pro Mid-2015 2.8GHz i7, 16GB RAM, 1TB SSD.

Ответ 1

У меня была та же проблема. Tomcat отправился с 15 секунд до 6 минут, чтобы инициализировать контекст spring после обновления... отключение csrutils не решило проблему для меня.

Я решил проблему, добавив мое имя компьютера Mac (например, Macbook.local или любой другой, который вызывается Mac) в файле /etc/hosts, сопоставленном с адресом 127.0.0.1, а также с ::1 следующим образом:

127.0.0.1   localhost mbpro.local
::1         localhost mbpro.local

Если вам интересно, вы можете найти некоторые сведения о проблеме и решении здесь: https://thoeni.io/post/macos-sierra-java/

В сообщении я также ссылаюсь на проект github, чтобы помочь устранить проблему и проверить решение.

Проблема связана (я полагаю) о том, как работает разрешение имени локального хоста и как класс java.net.InetAddr извлекает адреса. Я проверил несколько коллег и, по-видимому, это не случилось со всеми, кто перешел в Сьерра, но я все еще изучаю корни этого изменения.

Решение в любом случае было таким же, как и antid0te.

Ответ 3

У меня та же проблема. Мое приложение spring -boot займет 60 секунд, чтобы начать с Sierra против 25 секунд на Yosemite.

Во время отладки я понял, что проблема исходит от InetAddress.getLocalHost(). Я изменил свой файл хоста, чтобы добавить мое имя для 127.0.0.1 и:: 1, и теперь приложение запускается так же быстро, как раньше.

Ответ 4

Включение, например. Системные настройки > Совместное использование > Удаленный вход, приводит к тому, что имя узла автоматически назначается IP-адресом.

Как люди видят проблемы после обновления, имеет смысл предположить, что 10.12 изменило способ определения имени хоста, то есть по крайней мере с 10.11 имя хоста всегда разрешено, а с 10.12 оно разрешено, только если служба включена в Системные настройки > Обмен (кто-то с 10.11 может подтвердить это).

Ответ 5

Я думаю, что это общая проблема с новой ОС. У меня есть аналогичная проблема: у меня есть веб-приложение, которое развертывается в tomcat. На El Capitan он запустился за 10 секунд, теперь он занимает 95 секунд, и клиент (настольное приложение на основе Swing) не может подключиться к нему (или, по крайней мере, потребовалось много времени). Я думаю, что это что-то вроде сетевой коммуникации, потому что простое тестовое консольное приложение работает хорошо.

Ответ 6

Это была странная проблема после установки обновления на Mac Sierra 10.12 (16A323). В файле hosts с ниже отсортирована проблема.

::1         localhost <myhostname>.local   <--- Was already present
127.0.0.1   localhost <myhostname>.local   <--- Solved the tomcat loading issue

Вы можете получить myhostname командой $hostname в любом месте терминала.

Ответ 7

Принятый ответ помог мне! Просто добавьте это здесь, объясняя, что я думаю, проблема для меня была:

Мое имя хоста было что-то вроде "Мой Mac", который не может быть решен. В настройках он показал мне, что к компьютеру можно обратиться с помощью mymac.local

Я подумал, что это место, и переименовал мой mac в "my.mac", но даже это не помогло, так как автоматически добавленный dns по-прежнему был mymac.local

Помогло добавление my.mac в /etc/hosts.

Итак, я думаю, что на самом деле проблема: это происходит только тогда, когда имя вашего компьютера содержит что-то, что не является буквой. Это автоматически удаляется ОС, а затем имя хоста и запись DNS не совпадают. (что можно исправить, добавив его вручную)

Ответ 8

Я столкнулся с той же проблемой на моем Mac.

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

Вдохновившись этим руководством, я следовал следующим шагам:

Сначала измените основное имя хоста

sudo scutil --set HostName <new host name>

например:

sudo scutil --set HostName eggsandwich

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

sudo scutil --set LocalHostName <new host name>

например:

sudo scutil --set LocalHostName eggsandwich.local

Теперь перезапустите процессы Java, с которыми у вас были проблемы, и, надеюсь, они больше не должны зависать.

Кстати, это также решило еще одну проблему, с которой я столкнулся, когда новая вкладка в терминале не запускала bash в том же каталоге, несмотря на мои предпочтения. У меня нет объяснения, почему это произошло, но я очень доволен.

Ответ 9

Это может быть из-за некоторых ошибок в способе создания Mac OS Sierra. Попробуйте выполнить так называемый SMC reset или PRAM reset, чтобы узнать, исправит ли он ваш Mac. Это сбрасывание программного обеспечения и не повредит вашим пользовательским данным. Они могут потребовать от вас только reset системного времени после перезапуска.

Но они потенциально могут решить ваши проблемы. Вы также можете ознакомиться с некоторыми из приведенных здесь советов, касающихся устранения неполадок Mac OS Sierra - http://elcapitanslow.com/mac-os-sierra-slow-what-to-do/