2016-06-22 31 views
5

W bardzo prostej aplikacji Java, z logbackami przy użyciu wartości domyślnych (nr logback.xml w src/main/resources), aplikacja uruchamia się w około 400ms. Jak tylko dodamy podstawowy logback.xml do ścieżki klasy (src/main/resources), czas rozruchu wzrośnie do około 5500ms. Widzieliśmy to w wielu projektach. Konfiguracja jest następująca:Powolne czasy rozruchu logback

<configuration> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%date{HH:mm:ss.SSS} %-7level - %-50logger{36} - %message%n</pattern> 
     </encoder> 
    </appender> 

    <logger name="com.zaxxer.hikari" level="ERROR"> 
     <appender-ref ref="STDOUT"/> 
    </logger> 

    <logger name="org.sql2o" level="ERROR"> 
     <appender-ref ref="STDOUT"/> 
    </logger> 

    <root level="INFO"> 
     <appender-ref ref="STDOUT"/> 
    </root> 

</configuration> 
+0

co jest najbardziej szczegółową częścią kodu zgodnie z konsolą? –

+0

@NicolasFilotto - Podczas rozruchu jest dosłownie tylko 6 wydruków INFO. Jest to standardowa aplikacja Spark Java, Hello World. –

+0

Nie można odtworzyć używając logback 1.1.7/slf4j 1.7.21 na jdk 1.8.0_91. Bez 'logback.xml' dostaję 75ms czasu pracy, a przy' logback.xml' uzyskuję 160ms czasu pracy przy logowaniu 10 wiadomości informacyjnych. Kod testowy: 'Logger logger = LoggerFactory.getLogger (Test.class); dla (int i = 0; i <10; i ++) logger.info ("Hello world" + i); 'BTW: To się nazywa [MCVE] (http://stackoverflow.com/help/mcve) . – Andreas

Odpowiedz

10

5 sekund wygląda jak limit czasu zapytania dns. Tak było w moim przypadku. Po prostu upewnij się, że nazwa hosta komputera rozwiązuje IP. Możesz przetestować, czy wykonanie polecenia ping:

ping `hostname` 

Jeśli rozwiąże to nazwę i zacznie pingować, oznacza to, że problem jest inny. Ale jeśli zobaczysz komunikat "zły adres", może to wyjaśnić twój problem.

Aby to naprawić, wystarczy dodać nazwę hosta do pliku /etc/hosts. Po prostu dodaj nazwę hosta na końcu linii zaczynając od 127.0.0.1. Zmiana powinna zacząć obowiązywać natychmiast. To może nie być najczystszy sposób, aby to naprawić, zwłaszcza na współczesnym linuksie z dhcp i tak dalej. Ale jeśli to działa, będziesz miał dobrą wskazówkę, jak na stałe rozwiązać ten problem z rozpoznawaniem nazw.

+0

Powyższe nie działało dla mnie, chociaż po dodaniu 127.0.0.1 powyższe polecenie ping zadziałało, gdzie miało czas przed zmianą na/etc/hosts. Spędziłem trochę czasu z debuggerem i na Sierra (OS X 10.12) długi czas oczekiwania jest na rozwiązywanie localhost przez ipv6. Nie mogę wyłączyć protokołu IPv6, więc nie mogę potwierdzić, że to rozwiąże problem. Ale może być okruszkiem chleba dla kogoś, kogo można śledzić. –

6

Dla mnie problemem była rozdzielczość ipv6. Odpowiedź Damiena była łatwa, wystarczyło tylko dodać adres IPv6 do etc/hosts. Coś jak:

::1  ${your.host.name} 
+0

Potwierdź: tylko zastosowanie zaakceptowanego rozwiązania i tego rozwiązania rozwiązało mój problem. Jestem na macOS Sierra, jeśli to ma znaczenie. – Uniqus