본문 바로가기
오라클/WebLogic

[WLS] WLST 모니터링 항목으로 Active Execute Thread Count 구하기

by sangyeon 2022. 1. 26.
728x90

 

#1. 오라클 SR

안녕하세요


#1. MinThreadPoolSize
ExecuteThreadTotalCount 는 의미가 다릅니다. MinThreadPoolSize Idle Thread + Active Thread 수로 유지합니다.
ExecuteThreadTotalCount
Active Thread + Standby Thread + Idle Thread + Stuck Thread 라고 보시면 됩니다.

#2. Active Thread
는 다음 문서의 공식대로 구하실 수 있습니다.
How To Get Active Execute Threads ( Doc ID 2348749.1 )
You can calculate "Active Execute Threads" from ExecuteThreadTotalCount - StandbyThreadCount - ExecuteThreadIdleCount - StuckThreadCount in ThreadPoolRuntime.

오라클 답변으로는 공식 문서 상의 Active Thread 산정하는 방법이 총 스레드 개수(ExecuteThreadTotalCount) – 유휴 스레드 개수(ExecuteThreadIdleCount)가 아닌 것으로 확인 됩니다.

문서 상에서 실제로 ExecuteThreadTotalCount에는 Active Thread와 대기 스레드, 유휴 스레드, 스턱 스레드의 합이기 때문에

 

Active Thread를 정확하게 산정하기 위해서는 아래와 같은 공식이 나옵니다.

(* Active Thread = ExecuteThreadTotalCount Standby Thread Idle Thread Stuck Thread)

 

 

#2. 테스트 결과

- WLSMonitor.py

def monitor_thread():
  cd('/ThreadPoolRuntime/ThreadPoolRuntime')
  curTime = Date()
  eq_tc  = get('ExecuteThreadTotalCount')
  eq_ic  = get('ExecuteThreadIdleCount')
  eq_stc = get('StandbyThreadCount')
  eq_stk = get('StuckThreadCount')
  eq_prc = get('PendingUserRequestCount')
  eq_hrc = get('HoggingThreadCount')
  eq_crc = get('CompletedRequestCount')
  print '[THREAD]-------------------------------------------------------------------------------------------------------------'
  #print curTime
  #print '%9s\t%11s %11s %11s %11s %11s %11s %11s' % ('ServerName ','TotalThread',' ActiveThread','IdleThread','Standby','Pending','Hogging','Complete')
  print curTime
  print '%9s\t %11s %11s %11s %11s %11s %11s %11s %11s' % ('ServerName','TotalThread',' ActiveThread','IdleThread','Standby','Stuck','Pending','Hogging','Complete')
  print '%9s\t %11d %11d %11d %11d %11d %11d %11d %11d' % (serverName,eq_tc,(eq_tc-eq_ic-eq_stc-eq_stk),eq_ic,eq_stc,eq_stk,eq_prc,eq_hrc,eq_crc)
 

위와 같이 Active Thread 설정을 앞서 말씀드린 공식으로 대입 하고 Jmeter를 사용하여 부하를 주었습니다.

 

* 부하 주고, 스레드가 총 스레드가 100개에서 115개로 늘어난 상태에서 1시간이 지나고 Active Thread 값 모니터링….
 
1) 오라클 가이드의 공식을 사용하였을 경우
######################################
#             Interval               #
#            10 seconds ....          #
######################################
 
[JVM]-----------------------------------------------------------------------------------------------
ServerName        FreeMem%    FreeMem    UsedMem   TotalMem
   testM1                 40       812M      1181M      1994M
[THREAD]-------------------------------------------------------------------------------------------------------------
Wed Jan 26 10:33:02 KST 2022
ServerName       TotalThread  ActiveThread  IdleThread     Standby       Stuck     Pending     Hogging    Complete
   testM1                   115            2              99               14           0           0           1      748565
 
2) 기존에서 쓰던 공식(ExecuteThreadTotalCount - ExecuteThreadIdleCount)을 사용하였을 경우
######################################
#             Interval               #
#            10 seconds ....          #
######################################
 
[JVM]-----------------------------------------------------------------------------------------------
ServerName        FreeMem%    FreeMem    UsedMem   TotalMem
   testM1                 40       812M      1182M      1994M
[THREAD]-------------------------------------------------------------------------------------------------------------
Wed Jan 26 10:33:07 KST 2022
ServerName       TotalThread  ActiveThread  IdleThread     Standby       Stuck     Pending     Hogging    Complete
   testM1                   115          16              99                 14           0           0           1      748595

Min-pool 101개에서 설정하고 부하를 줬을 때 TotalThread 값이 115개로 증가함. 증가한(14) TotalThread값이 다시 줄어드는게 아니라 Standby Thread로 책정되기 때문에

L사에서 사용하는 공식을 사용할 경우 늘어난 만큼의 Thread 개수가 Standby로 들어가서 그만큼의 차이가 재기동 전까지는 계속해서 발생하는 것입니다.

 

고로 정확한 Active Thread를 산정하기 위해서는 오라클의 공식문서에 나온 공식을 사용하셔서 적용하시면 될 것 같습니다.

 

 

728x90