Pytanie Aplikacja internetowa bardzo wolno działa w Tomcat 7


Zaimplementowałem aplikację internetową, aby usługa Tomcat działała bardzo szybko, ale spędzanie wielu godzin i kiedy coraz więcej użytkowników wchodzi, jest powolne (do 15 użytkowników ok.).

Sprawdzanie statystyk użytkowania pamięci RAM (20%), procesora (25%)

Funkcje serwera:

  • RAM 8 GB
  • Procesor i7
  • Windows Server 2008 w wersji 64-bitowej
  • Tomcat 7
  • MySql 5.0
  • Struts2
  • -Xms1024m
  • -Xmx1024m
  • PermGen = 1024
  • MaxPernGen = 1024

Nie używam serwera WWW, publikujemy bezpośrednio na Tomcat.

Uruchomienie spowolnienia o północy jest nadal utrzymywane (tylko 1 użytkownik online)

Rozwiązaniem, które mam, jest ponowne uruchomienie usługi Tomcat, a czas reakcji jest znów doskonały.

Czy jest ktoś, kto doświadczył tego problemu? Każda wskazówka byłaby doceniona.


10
2017-09-13 16:41


pochodzenie


bardzo trudno jest powiedzieć cokolwiek bez dodatkowych danych wejściowych. Musisz sprawdzić, co sprawia, że ​​tworzenie aplikacji jest tak powolne, czy istnieje blokowanie wątków lub coś podobnego? mam nadzieję, że już przeszedłeś proces optymalizacji struts2 / - Umesh Awasthi
Session bloat. Z Twojego opisu wynika, że ​​sesje użytkownika nie wygasają. Zajrzyj do interfejsu administratora tomcat, w którym możesz zobaczyć każdą wdrożoną aplikację i wyświetlić liczbę aktywnych sesji. Prawdopodobnie znajdziesz nieuzasadnioną liczbę aktywnych sesji. Upewnij się też, że nie jesteś po prostu zbytnio wkładany w sesję - kolossus


Odpowiedzi:


Za mało szczegółowych informacji. Potrzebujesz więcej informacji :(

Posługiwać się htop lub top znaleźć pamięć i użycie procesora na proces i na wątek.

procesor

Stałe 25% wykorzystanie procesora w systemie 4-rdzeniowym może wskazywać, że aplikacja / wątek z pojedynczym rdzeniem działa na 100% procesorze na jedynym rdzeniu, z którego może korzystać.

Która aplikacja pobiera procesor?

Pamięć

20% pamięci to ~ 1,6 GB. To trochę więcej, niż oczekuję na bezczynnym serwerze, na którym działa tylko tomcat + mysql. The -Xms1024 mówi tomcat, aby wstępnie przydzielił 1 GB pamięci, aby to wyjaśnić.

Zmień ustawienia tomcat na -Xms512 i -Xmx2048. Oglądaj użycie pamięci tomcat, gdy wrzucisz do niego niektórych użytkowników. Jeśli rośnie, dopóki nie osiągnie 2 GB ... następnie zawiesza się, co może oznaczać wyciek pamięci.

Dysk

Posługiwać się df -h sprawdzić użycie dysku. Pełna partycja może powodować problemy, których doświadczasz.

Filesystem    Size  Used Avail Usage% Mounted on
/cygdrive/c     149G  149G  414M 100%   /

(Jeśli w tym przykładzie odkryłeś, że w moim laptopie zabrakło miejsca, robisz to dobrze: D)

Logi

Dzienniki są niesamowite. Mają jednak zły nawyk, aby zapełnić dysk. Sprawdź użycie dysku logów. Czy logi są zapisywane / usuwane / obracane poprawnie, gdy nowi użytkownicy się łączą? Czy kasowanie dzienników rozwiązuje problem? (skopiuj je gdzieś do przyszłej analizy, zanim je usuniesz)

Jeśli nie. Logi są niesamowite. Mają dobry nawyk pomagający śledzić błędy. Sprawdź logi tomcat. Możesz ustawić poziom rejestrowania do debugowania. Co dzieje się ostatnio, gdy strona internetowa umiera? Każdy przydatny komunikat o błędzie? Czy połączenia użytkowników są nadal odbierane i akceptowane przez tomcat?

Podanie

Przypuszczam, że 25% CPU przechodzi do tomcat (a nie mysql). Tomcat nie zawodzi sam. Działająca na nim aplikacja musi się zepsuć. Spróbuj usunąć aplikację z tomcat (możesz zamiast tego umieścić świat hello). Czy Tomcat może pracować w nocy bez twojej aplikacji? Prawdopodobnie może, w takim przypadku błąd dotyczy aplikacji.

Włącz pełne rejestrowanie debugowania w aplikacji i spróbuj śledzić problem. Uruchom go od zaćmienia w trybie debugowania i rzucaj na niego użytkowników. Czy to się nie udaje w ten sam sposób?

Jeśli tak, naciśnij "pauza" w debugerze środowiska Eclipse i sprawdź, co robi aplikacja. Popatrz na kawałek kodu, z którego każdy wątek jest aktualnie uruchomiony + jego stos wywoławczy. Powtórz to kilka razy. Jeśli istnieje zakleszczenie, nieskończona pętla lub podobne, możesz go znaleźć w ten sposób.

Jeśli będziesz miał szczęście, znajdziesz problem. Jeśli nie, jesteś niefortunny i jest to trudny błąd, który może znajdować się głęboko w aplikacji. To może być trudne do prześledzenia. Determinacja doprowadzi do sukcesu. Powodzenia =)


2
2018-02-29 01:13





Napotkaliśmy podobny problem, przyczyną była "catalina.out". Jest to standardowy plik dziennika docelowego dla "System.out" i "System.err". Jego rozmiar stale się zwiększał, co spowalniało sytuację, a ostatecznie katastrofa spadła. Ten problem rozwiązano obracając "catalina.out". Użyliśmy redhat, więc stworzyliśmy skrypt powłoki, aby obrócić "catalina.out".

Oto kilka linków: -

Artykuł Mulesoft na temat catalina (zawiera również dwie metody rotacji):

Tomcat Catalina Wprowadzenie

Jeśli "catalina.out" nie jest problemem, spróbuj zamiast tego: -

Artykuł Mulesoft dotyczący optymalizacji tomcat: Strojenie wydajności Tomcat dla optymalnej prędkości


1
2018-03-20 11:04





Dla problem związany z wydajnością, musimy przestrzegać podanych zasad:

  1. Możesz wyrównać i uwydatnić rozmiar xms i xmx dla skuteczności.
  -Xms2048m
  -Xmx2048m
  1. Możesz także włączyć PermGen do zbierania śmieci.

-XX: + UseConcMarkSweepGC -XX: + CMSPermGenSweepingEnabled -XX: + CMSClassUnloadingEnabled

  1. Jeśli strona zmienia się zbyt często, aby ta opcja była logiczna, spróbuj tymczasowo buforować zawartość dynamiczną, aby nie trzeba jej było wielokrotnie odnawiać. Należy zastosować wszelkie techniki, które można wykorzystać do buforowania zadań, które zostały już wykonane zamiast robić to ponownie - jest to klucz do osiągnięcia najlepszej wydajności Tomcat.

  2. Jeśli istnieje jakiś problem związany z bazą danych, to można go wykonać sql query tuning wydajności 

  3. obracanie Catalina.out plik dziennika, without restarting Tomcat.

Szczegóły, są dwa sposoby.

Pierwszy, co jest bardziej bezpośrednie, jest to, że możesz obrócić Catalina.out, dodając prostą rurkę do wybranego narzędzia do obracania dziennika w skryptach startowych Cataliny. To będzie wyglądać jak:

"$CATALINA_BASE"/logs/catalina.out WeaponOfChoice 2>&1 &

Po prostu wymień "WeaponOfChoice" z Twoim ulubionym narzędziem do rotacji dzienników.

Drugi sposób jest mniej bezpośredni, ale ostatecznie lepszy. Najlepszym sposobem na obsłużenie rotacji Catalina.out jest upewnienie się, że nigdy nie musi się obracać. Po prostu ustaw właściwość "swallowOutput" na wartość true dla wszystkich kontekstów w "server.xml".

To będzie trasa System.err i System.out do dowolnej konfiguracji logowania, którą skonfigurowałeś, lub JULI, jeśli nie skonfigurowałeś.


0
2018-03-03 18:42



Próbowałem z parametrami JVM (ten sam wynik), FYI używam rdzeni VM 8, 64 GB RAM, baza danych Hadoop Hbase. - Azhar Shaikh
@ShaikhAzhar: Więc problem nie jest związany z wielkością. Tak więc uważam, że numer 5 będzie najlepszym sposobem. Jak już powiedziałeś, musisz zrestartować komputer, abyśmy mogli go uniknąć o 5. - SkyWalker
@ShaikhAzhar: Czy mógłbyś podać niektóre informacje związane z bazą danych? ile jest tam tabeli i ile danych znajduje się w tabeli? jest sql jest dobrze napisane napisane? proszę sprawdzić. - SkyWalker
To nie jest SQL, jego Hbase (hbase.apache.org). - Azhar Shaikh