2013-07-15 2 views
3

Я запускаю tomcat7 с jdk7 на MacOSX Mavericks DP3. Все идет хорошо, и для запуска требуется всего 500 мс. Но внезапно он замедляется до 35 секунд.java7 SecureRandom performance на MacOSX

В сообщении журнала показано, что SecureRandom является основной причиной. Спасибо за Google, я обнаружил, что это ошибка JRE, и следующий код для проверки:

import java.security.SecureRandom; 
class JRand { 
    public static void main(String args[]) throws Exception { 
     System.out.println("Ok: " + 
      SecureRandom.getInstance("SHA1PRNG").nextLong()); 
    } 
} 

Да. Простейший код также занимает 35 секунд. Но кажется, что все эти связанные решения не работают для меня. Оба/dev/random и/dev/urandom не являются блочными устройствами на Mac.

cat /dev/random | hexdump -C 

мощность очень быстро!

При переключении обратно в jre6 очень быстро генерировать рандомы. Загрузите последнюю версию jdk8-ea, проблема все еще существует.

На самом деле, не только tomcat значительно замедляется, Netbeans, стеклянная рыба все затронуты. После долгих часов работы я бросил наконец.

Сегодня утром, когда я пришел в офис, подключился к сети Ethernet, угадайте, что? Он выздоровел!

Так что мой вопрос: что происходит позади? Это действительно странно.

Спасибо.

+0

Теперь это происходит снова. Инструмент профиль показывает, что он заблокирован при вызове: java.net.Inet6AddressImpl.lookupAllHostAddr (имя хоста) из java.net.InetAddress.getLocalHost() : '( – outersky

+0

это нативный метод. – outersky

ответ

1

Ха-ха, разрешено. Получить исходный код InetAddress.java (можно скопировать из IDE); изменить метод getLocalHost от

String local = impl.getLocalHostName(); 

к:

String local = "localhost"; // impl.getLocalHostName(); 

перекомпилировать и добавьте java.net.InetAddress.class обратно в JDK/JRE/LIB/rt.jar.

RESOLVED.

0

Не изменяйте InetAddress, другой код может положиться на него. Вместо этого измените sun.security.provider.SeedGenerator :: getSystemEntropy(), чтобы не использовать локальный IP-адрес. (Насколько это безопасно?) В качестве дополнительного бонуса теперь вы становитесь чуть более безопасным с помощью неясности :)