2009-04-29 17 views
5

pierwsze, tylko trochę tle:Kolce Wykorzystanie procesora w WebSphere 6.1

jednego z naszych klientów przeżywa Wykorzystanie procesora kolce dla WebSphere przypadkach uruchomiony jeden z naszych aplikacji internetowych (inne wystąpienia z innych aplikacji są w porządku) . Posiadają środowisko testowe i środowisko na żywo (zarówno iSeries), z których oba napotykają problem - z pojedynczą instalacją aplikacji na instancję. Aplikację tę wdrożyliśmy lokalnie w naszych własnych środowiskach testowych, a także w przypadku wielu innych klientów w systemie iSeries bez podobnych problemów.

Co się rzeczywiście dzieje:

Każdy drugi lub tak, użycie procesora przez proces WebSphere użycie procesora skacze do dowolnego z 7% - 20% chociaż istnieją żadne wnioski są przetwarzane w czasie. Klient zgłosił, że widzi skoki tak wysokie, jak 30%. Te wartości szczytowe wynoszą średnio 1.5% jednostek centralnych - inne instancje produktu WebSphere zwykle używają wartości 0% - podczas bezczynności.

Moje badania dotychczas

Tak, miałem spojrzenie na wątków. Środowisko testowe z jednym wątkiem używało cykli procesora ~350 na sekundę. Podobny wątek w ich środowisku na żywo używał ~1500 cykli procesora na sekundę (pokazując, że ma większy procesor). Stos wywołań dla tych wątków wygląda

Type Program     Statement   Procedure      
     QLESPI  QSYS   17    LE_Create_Thread2__FP12crtt > 
     QJVALIBJVM QSYS   7     startThread__FPv    
J com/ibm/ws/util/Threa >     run       
J com/ibm/ws/util/Threa >     run       
J com/ibm/ws/util/Threa >     getTask      
J com/ibm/ws/util/Bound >     poll 

Cała nazwa klasy z dolnej linii jest com/ibm/ws/util/BoundedBuffer. Poprosiłem klientowi wykonać JVM zrzutu dla mnie - tylko dodatkowe informacje uzyskałem od to była nazwa wątku:

Thread: 00002F82 Deferrable Alarm : 11 

Teraz moje pytania:

  • Czy każdy z was zidentyfikować problem, biorąc pod uwagę te objawy? (Może to jest długie ujęcie!)
  • Co to jest Deferrable Alarm? W Doku JVM widzę 4 wątki o tej nazwie. Pozostałe trzy wydają się dobrze. Debugując mój lokalny produkt WebSphere (w systemie Windows) i dodając punkty przerwania w klasie BoundedBuffer, widzę, że BoudedBuffer s są odpytywane i okresowo wywołują niektóre detektory.
  • Nie mam dostępu do konsoli WebSphere dla komputerów klientów i nie są one właścicielem aż do wprowadzenia jakichkolwiek zmian w konfiguracji. Mogę poprosić ich, żeby sprawdzili konsolę dla mnie - co powinienem poprosić ich, żeby na nią patrzyli?
  • Mam dostęp do telnetu do skrzynki klienta, czy jest coś jeszcze, co mogę tu zbadać? Patrząc na pliki profilu WebSphere itp.? Które pliki powinienem oglądać?
  • Ponieważ stos wywoławczy i zrzut maszyny JVM nie odwołują się bezpośrednio do naszego kodu, czy można bezpiecznie założyć, że jest to problem z konfiguracją?

To było długie pytanie, więc dziękuję za przeczytanie tej książki.

30 Aktualizacja kwiecień (1)

Dziś rano zauważyłem, że to zachowanie tylko dzieje po pierwsze żądanie dzień zostało przetworzone (niezależnie od tego, która jest wywoływana Web Service). To wskazuje palcem naszą aplikację lub oś Apache. Czy to możliwe, że to normalne zachowanie ?!

30 Aktualizacja kwiecień (2)

Wygląda więc na to, że działalność ta CPU jest jakiś rodzaj aktywności sprzątający na internetowej pojemnika lub może coś wewnątrz Apache Axis. Obserwowałem to teraz w kilku różnych aplikacjach internetowych na kilku różnych serwerach. Aplikacje bez komponentu sieciowego nie mają takiego samego dodatkowego obciążenia procesora.

Wyobrażam sobie, że jeśli jest to praca domowa, to "dostrojenie" może być w pewnym sensie nieproduktywne - przez to, mam na myśli to, że lepsze działanie serwera aplikacji może negatywnie wpłynąć na ilość "prawdziwej" pracy, jaką może zrobić.

+0

Czy ten klient iSeries znajduje się na tym samym poziomie co inni klienci? Czy istnieją inne różnice, które czynią ten wyjątek? – Ichorus

+0

Tak, jest na tym samym poziomie. Zdarza się tak również w przypadku produktu WebSphere 5.1, jak również 6.1 –

Odpowiedz

0

Bardzo instynktownie (bycie niezaznajomionym z platformami iSeries) Chciałbym przyjrzeć się problemom związanym z dyskiem IO. Czy możesz opisać podsystem dysku? Czy widzisz, czy twoja aplikacja spędza wyjątkowo dużo czasu w iowait?

+0

Dzięki za sugestię. Spojrzałem na I/O, ale kiedy serwer jest bezczynny, nadal występują impulsy procesora, ale brak wywołań we/wy. –

0

Moim zdaniem jest to, że jest to jakiś rodzaj monitorowania, który jest wykonywany na instancji, jak Tivioli itp. Czy wykluczyłeś jakąkolwiek aktywność GC?

HTH Tom

+0

Dzięki za komentarz Tom. Tivioli była jedną z rzeczy, na którą po raz pierwszy spojrzeliśmy. Ale nie winowajca. Udało mi się zadowolić klienta teorią "sprzątania", więc mam nadzieję, że to już koniec: P –

1

Można spróbować zrobić profil i wysypisk stercie aplikacji, które mogą odpowiedzieć na kilka pytań związanych z pamięcią i użycie procesora.

0

Większość serwerów aplikacji jest zaimplementowana w samym języku java, podobnie jak WebSphere. Serwery te oprócz obsługi żądań klientów muszą wykonywać inne okresowe zadania, takie jak zarządzanie zasobami puli. Wykonanie tych zadań spowoduje utworzenie niektórych tymczasowych obiektów, które muszą być gromadzone podczas zbierania śmieci.

W zależności od tego, ile przydzielonych sterty, ustawień użycia i garbage collector zostanie wywołanych, wywoływacz śmieci zostanie wywołany. Powiedziałbym, spróbuj sprawdzić, czy to wątek do zbierania śmieci, który zajmuje twój procesor. W tym celu połącz narzędzie jconsole ze zdalnym procesem na serwerze WWW przez jeden dzień i zobacz, czy istnieje jakaś zależność między wykorzystaniem sterty a użyciem procesora.

1

Polecam śledzenie, które musi zebrać documentation dostarczone przez IBM, oraz podniesienie PMR wraz z własnym dochodzeniem. Rzeczy można podejrzewać

  • Garbage Collection (mało prawdopodobne na niskie wykorzystanie aplikacji)
  • programatorów lub zadań (takich jak java.util.Timer lub kierownik praca commonj)
  • wstępny test połączenia, które ma złożoną zapytania SQL (w WebSphere Application właściwości źródła danych serwera DataSource'S)

Polecam również za pomocą profilera aby ustalić przyczynę, YourKit profiler jest dość przyzwoity.

0

Mam również ten sam problem, [Deferrable Alarm: x] używając z BoundedBuffer. Jedyną różnicą, którą mam, jest to, że jest na maszynie z 64-bitowym Windows. Nie ma absolutnie żadnego procesu Tivioli lub innego procesu wsadowego, żadne żądania nie są wykonywane, pojedyncze wystąpienie jest po prostu bezczynne.

Mogę uruchomić aplikację w trybie DEBUG i wstrzymać wątek alarmu wewnętrznego, a wzrosty szczytów procesora zostaną wznowione, a następnie uruchomione ponownie.

Sprawdziłem aktywność dysku, aktywność sieci i ich nic się tam nie dzieje.

Używam produktu WebSphere 6.1.0.27.

Powiązane problemy