티스토리 뷰

현재 일하고 있는 사이트의 Weblogic 의 경우 어플리케이션 구조상의 문제로 인해 기동시간이 매우 오래걸린다.

또한 인스턴스 수가 비슷한 다른 도메인과 달리 많은 편이라... 각설하고.

 

Weblogic 시작 스크립트에 콘솔로그를 백업하는 부분을 넣어서 운영중이라

특정 디렉토리에 일정기간의 Weblogic 콘솔로그를 보관하고 있으며,

해당 콘솔로그에는 어플리케이션 기동시간을 찍도록 해두었기에

각 인스턴스 별 평균 기동시간을 구하는 스크립트를 작성해 보았다.

 

아래와 같은 경로에 누적된 weblogic 콘솔로그들이 남아있다.

[xxxxxxx weblogic : /home/weblogic/temp ] ls -al /logs01/weblogic12/xxxxxxx/server1/backup/
total 5040
drwxr-xr-x    2 weblogic weblogic       8192 7월 26 오후 12:01  ./
drwxr-xr-x    4 weblogic weblogic       2048 7월 26 오후 12:01  ../
-rw-r--r--    1 weblogic weblogic      42397 7월 09 오전 06:00  server1.out.190709_0601
-rw-r--r--    1 weblogic weblogic      45218 7월 09 오후 12:00  server1.out.190709_1201
-rw-r--r--    1 weblogic weblogic      47298 7월 09 오후 06:00  server1.out.190709_1801
-rw-r--r--    1 weblogic weblogic      44277 7월 10 오전 06:00  server1.out.190710_0601
.... 생략
-rw-r--r--    1 weblogic weblogic      46525 7월 24 오전 06:00  server1.out.190724_0601
-rw-r--r--    1 weblogic weblogic      45913 7월 24 오후 12:00  server1.out.190724_1202
-rw-r--r--    1 weblogic weblogic      49391 7월 24 오후 06:00  server1.out.190724_1801
-rw-r--r--    1 weblogic weblogic      43610 7월 25 오전 06:00  server1.out.190725_0601
-rw-r--r--    1 weblogic weblogic      44826 7월 25 오후 12:00  server1.out.190725_1201
-rw-r--r--    1 weblogic weblogic      47101 7월 25 오후 06:00  server1.out.190725_1801
-rw-r--r--    1 weblogic weblogic      43342 7월 26 오전 06:00  server1.out.190726_0601
-rw-r--r--    1 weblogic weblogic      45217 7월 26 오후 12:00  server1.out.190726_1201
[wamisd1 weblogic : /home/weblogic/temp ]

이를 more * | grep JVM 과 같이 기동시간이 찍혀있는 부분을 grep 하는 것으로 실제 기동시간들을 뽑아 낼 수 있으며 이는 다음과 같은 형식을 가진다.

[xxxxxxxxxx weblogic : /home/weblogic/temp ] more /logs01/weblogic12/xxxxxxx/server1/backup/* | grep JVM > /home/weblogic/temp/server1
정보: Started XXXXXXXXXXApplication in 1288.034 seconds (JVM running for 1497.093)
정보: Started XXXXXXXXXXApplication in 1526.424 seconds (JVM running for 1786.778)
정보: Started XXXXXXXXXXApplication in 1264.264 seconds (JVM running for 1471.322)
정보: Started XXXXXXXXXXApplication in 1360.916 seconds (JVM running for 1560.809)
정보: Started XXXXXXXXXXApplication in 1359.704 seconds (JVM running for 1560.502)
정보: Started XXXXXXXXXXApplication in 1328.787 seconds (JVM running for 1526.796)
정보: Started XXXXXXXXXXApplication in 1355.116 seconds (JVM running for 1555.748)
정보: Started XXXXXXXXXXApplication in 1309.076 seconds (JVM running for 1607.999)
정보: Started XXXXXXXXXXApplication in 1364.281 seconds (JVM running for 1586.11)
......
정보: Started XXXXXXXXXXApplication in 1347.662 seconds (JVM running for 1550.978)
정보: Started XXXXXXXXXXApplication in 1360.964 seconds (JVM running for 1571.095)
정보: Started XXXXXXXXXXApplication in 1342.748 seconds (JVM running for 1542.15)
정보: Started XXXXXXXXXXApplication in 1373.293 seconds (JVM running for 1639.374)
정보: Started XXXXXXXXXXApplication in 1387.971 seconds (JVM running for 1603.123)
정보: Started XXXXXXXXXXApplication in 1372.193 seconds (JVM running for 1594.679)
정보: Started XXXXXXXXXXApplication in 1311.855 seconds (JVM running for 1705.607)

맨 뒤의 숫자가 실제 어플리케이션 로딩에 소요된 시간(초)인데...(어마어마하다..)

이를 숫자로 바꿔서 다 합치고 이를 라인수로 나누면 평균값을 구할 수 있겠다.

복사해서 엑셀에 붙여서 수식으로 계산하는 생각을 하는 사람이 있을 수 있겠으나.

 

얼마나 귀찮은가. 우리에겐 awk 라는 어마어마한 유틸리티가 있다.

 

  • 맨 마지막 숫자부분을 뽑아낸다.
  • 숫자들을 다 더한다.
  • 라인수로 나눈다.

그럼 우선 맨 마지막 숫자부분을 뽑아내는 방법은 다음과 같다.

awk '{print substr($10, 0, length($10)-1)}' /home/weblogic/temp/server1 > server1_sum

그런다음 숫자들을 다 합치면 된다.

awk '{s+=$1} END {printf "%.0f", s}'` server1_sum

라인수는 다음으로 구할 수 있다.

wc -l /home/weblogic/temp/server1 | awk '{print $1}'

위와 같은 방법들을 잘 조합하고, 또한 인스턴스가 많으므로 모든 인스턴스들을 한번에 할 수 있도록 쉘을 짜보자.

인스턴스명은 임의로 server1, server2, server3 ..... server9 으로 정의한다.

#!/bin/ksh

for SERVER in server1 server2 server3 server4 server5 server6 server7 server8 server9 
do
    more /logs01/weblogic/xxxxxxxx/$SERVER/backup/* | grep JVM > /home/weblogic/temp/$SERVER
    TOTAL=`awk '{print substr($10, 0, length($10)-1)}' /home/weblogic/temp/$SERVER | awk '{s+=$1} END {printf "%.0f", s}'`
    LINE=`wc -l /home/weblogic/temp/$SERVER | awk '{print $1}`
    AVER=$((TOTAL/LINE))
    echo $SERVER : $AVER
done

즉 여러 인스턴스 명으로 원본 로그 디렉토리를 찾아서 인스턴스명(server1, server2 ...) 으로 기동시간이 적힌 파일을 생성하고 해당 파일을 읽어서 기동시간만 추출, 더한뒤에 라인수로 나눠주고 화면에 출력.

 

이렇게 하면 다음과 같이 각 인스턴스별로 어플리케이션 기동시간을 볼 수 있다.

server1 : 807
server2 : 691
server3 : 1231
server4 : 1104
server5 : 1285
server6 : 1134
server7 : 1390
server8 : 1204
server9 : 1589

콘솔로그 삭제 전에 평균 기동시간을 찍도록 해두면 추후 기동시간 변화치를 추측하는데 도움이 될듯.

 

 

덧. 기동시간 개선을 위한 워밍업이었습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함