메뉴 건너뛰기

XEDITION

UNIX

[OS / AIX] AIX Performance Tools

김병수 2019.10.03 18:47 조회 수 : 11

AIX Performance Tools

 

 5.1 Monitoring Memory

 

 5.1.1 vmstat

 

    # vmstat 5 10

    kthr     memory             page              faults        cpu

    ----- ----------- ------------------------ ------------ -----------

    r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

    0  0  8192 81920   0   0   0   0    0   0 116  130  25  0  1 99  0

    0  0  8192 81920   0   0   0   0    0   0 141   33  25  0  1 98  1

    0  0  8192 81920   0   0   0   0    0   0 120   24  22  0  0 99  0

 

    다음의 상황이 발생하면 문제상황(memory is overcommitted)이라 합니다.

    - fre(number of pages in the free list) < 2 * RealMemory(MB) - 8

    - pi(page in rate/s) > 5

 

 5.1.2 sar

   # sar -r 1 10

   fault/s : page faults per second.

 

 

 5.1.3 lsps

   얼마나 많은 Virtual Memory를 사용하고 있는 지 확인할 수 있습니다.

 

   # lsps -a

   페이지공간  물리적 볼륨  볼륨 그룹       크기   사용%  활동중  자동  유형

   paging01    hdisk1       rootvg          84MB      24     yes   yes    lv

   paging00    hdisk0       rootvg          84MB      24     yes   yes    lv

   hd6         hdisk2       rootvg         152MB      20     yes   yes    lv

 

   위의 경우 (84 * 0.24) + (84 * 0.24) + (152 * 0.2) = 71 MB 를 사용하고

   있는 셈입니다.

 

   이 정보를 이용하면, 얼마나 많은 Memory를 더 끼워야 하는지를 가늠할 수

   있습니다. 위에선 최소한 71 MB가 더 필요한 상황입니다.

 

 

 

 5.1.4 ps

 

   # ps gvc

   PID    TTY STAT  TIME PGIN  SIZE   RSS   LIM  TSIZ   TRS %CPU %MEM COMMAND

     0      - A     1:46    7    12 14016    xx     0 14004  0.0  9.0 swapper

     1      - A     0:53  117   656   752 32768    25    36  0.0  0.0 init

   516      - A    16:54    0     8 14012    xx     0 14004 98.9  9.0 kproc

   774      - A     0:08    0    16 14020    xx     0 14004  0.0  9.0 kproc

  1032      - A    25:30    0    64 14068    xx     0 14004  0.6  9.0 kproc

  1944      - A     0:46  161  2588  2076 32768   579   536  0.1  1.0 dtfile

  2102      - A     0:11  120  1660  2088 32768    98   132  0.0  1.0 dtsession

  2418      - A     0:00   31   352   372    xx   100   148  0.0  0.0 dtlogin

 

   PGIN : Number of memory frames paged in

   %MEM : Percentage of system memory used

 

 

 5.1.5 svmon

 

 # svmon -G

      m e m o r y           i n u s e             p i n       p g s p a c e

 size  inuse  free  pin   work  pers  clnt   work  pers clnt  size    inuse

 65536 62724  2812  3508  41482 21242 0      3347  161   0    131072  25555

 

 1) m e m o r y : System memory usage

   - size : Total size of real memory

   - inuse : Amount of memory in use

   - free: Amount of free memory

   - pin : Pinned memory(memory pages that cannot be swapped out)

 

 2) i n u s e : Expands the column memory "inuse"

   - work : The system working set(data and stack regions)

   - pers : Pages that are persistent on file

   - clnt : Client allocated memory(network clients)

 

 3) p i n : Expacds the column "pin"

   - (Refer to preceding description of "inuse" columns)

 

 4) p g s p a c e : size of the paging space

   - size : Size of paging area

   - inuse : Amount of page space in use(size of read memory extension)

 

 

 또한, 아래의 명령어를 이용하면 특정 프로세스가 점유하고 있는 메모리의

 량을 계산할 수 있습니다.

 

 # svmon -P <pid>

 

 "inuse" 전체 값에서 "shared library"의 size를 빼면, 실제 새로운 process가

  기동될 때 필요로 하는 memory의 량을 계산할 수 있어 매우 유용할 것으로

  보입니다.

 

 

 5.1.6 rmss

 

  실제 메모리가 6GB일지라도 어떤 이유에서건 2GB 만 사용하도록 S/W적으로 조정할 수

  있습니다.

 

  rmss -P

  rmss -C <number of MB>

 

  (option 이 정확치 않습니다. 다시한번 확인해 보세요)

 

 

 

 

 

 

 5.2 Managing CPU resources

 

 5.2.1 Checking active CPUs  

 

 # sar -P ALL 1 10

 # nmon

 

 # cpu_state -l

  SMP 머신에서만 사용할 수 있는 명령어이다. 각 CPU의 enabled/disabled

  상태를 확인할 수 있다.

 

  cf. solaris : mpstat

 

 

 

 5.2.2 Monitoring the CPU with vmstat

 

 # vmstat 10

  kthr     memory             page              faults          cpu

  ----- ----------- ------------------------ ------------    -----------

  r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy    cs   us sy id wa

  0  1 109236 71994  0  0   0    0     0  0 896   8467  1223  6  4 90  0

  1  3 109556 71644  0  0   0    0     0  0 1933 11601  6923  8 20 56 16

  0  1 109553 71589  0  0   0    0     0  0 961  10084  1647  6  4 90  0

  1  1 121673 55967  0  0   0    0     0  0 1822 12369 10570 12 44 38  7

  0  5 122548 38935  0  6   0    0     0  0 1268  7634  3444  8  7 41 44

  2  8 132264     0  0  0 928 1234 36403  0 1260  9727  2573  4 24 10 62

  0  5 137668   120  0  1 149  415   601  0 1121  8416  2025  4 14 19 64

  1  6 142219   491  0 15 211  445   530  0 1083 16440  1467  5 17 21 57

  0  6 144242 22678  0  0   0    0     0  0 1091  7395   945  3  3 29 65

  0  4 144263 24167  0  0   0    0     0  0 1168 10413  1207  2  7 24 66

  0  6 144263 29079  0  0   0    0     0  0 1120  5384   848  2  3 25 70

 

 NOTE !

 fre : Free list pages

 fr: number of page steals

 sr: number of page scans

 

 가용한 메모리(fre)가 줄어들고, page steal 값(fr)과 page scans(sr)가

 증가하면서, idle 0% 가까지, system 25%, wait 60% 를 나타내는 상황은

 가용한 메모리가 전적(!)으로 부족하여 시스템(VMM)이 free memory 보충

 작업을 하고 있는 것을 의미합니다. 이 때 CPU를 사용자 어플리케이션에서

 사용하지 못함으로 인해 속도저하의 상태가 됩니다.

 

 NOTE: 가용한 free page (fre) 값이 단지 작다는 것은 별 의미는 없습니다.

       AIX는 대부분의 메모리를 file caching 을 위해 사용하기 때문에 항상

       fre 값은 생각보다 작은 수치를 나타냅니다. fr 값과 sr 값이 빈번하게

       발생하는 것을 주의깊게 보세요.

 

 

 5.2.3 Monitoring the CPU with sar

 

  # sar 1  10

 

 

  # sar -P ALL 1 10

  각 CPU별로 CPU usage를 표시해 줍니다.

 

 

 

 

 5.3 Text Based GUI Monitor

 

   sar와 같은 각종 Unix 명령어는 수치정보를 모으기엔 유용하지만, 직관적인 그래프나

   모니터에 띄워놓고 보기엔 그다지 효과적이지 않습니다. Text Base로 되어 있는

   몇가지 모니터링 툴을 소개합니다.

 

   Linux의 경우 top 이라는 CPU/MEM/process를 모니터링 할 수 있는 공개 툴이

   기본적으로 있습니다.

   SunSolaris의 경우 Open Desktop X Windows용으로 된 Performance Meter라는 툴이

   기본적으로 있어서 간략한 정보를 그래프로 보실 수 있으며, TOP을 컴파일하여

   설치할 수도 있습니다.

   HP-UX의 경우, TOP을 설치해도 되지만, perf 라는 OS의 별도 패키지를 설치하여

   보는 것이 일반적입니다.

 

   AIX의 경우는 TOP을 설치해도 되지만, OS 별도 패키지인 monitor라는 툴을 사용하는

   것이 일반적입니다. 또한 nmon 이란 툴을 이용하여도 됩니다.

 

 

 5.3.1 top

 

   Linux의 경우 기본적으로 탑재되어 있으나, AIX, Solaris, HP-UX의 경우는 별도로

   다운받아 설치하시면 됩니다. 공개툴이기 때문에 자유롭게 사용하실 수 있습니다.

   그러나 간혹 특정 OS에선 컴파일이 잘 안될 수 있습니다.

 

   Solaris와 Linux의 경우는 SMP까지 지원하여 CPU별로 자원을 보실 수 있으며,

   Real/Virtual Memory를 보실수 있습니다. 또한 process별 자원을 보실 수 있습니다.

 

   대부분의 이러한 툴이 그렇듯, 직관적인 실시간 상황을 얼추 볼 수 있는 용도로

   사용할 수 있습니다.

 

   TOP - CPU Usage Display 

   - Where you can get the TOP ?

     http://www.groupsys.com/topinfo/

 

   - How can you install the top on your system?

 

    1) download top-3.5beta6.tar.gz (209 Kbyte)  

    2) Compiling     

      power:/$ su -

      password: xxxxx     

      power:/# cd /usr/src

      power:/usr/src/# tar xvfz top-3.5beta6.tar.gz

      power:/usr/src/# cd top-3.5beta6

      power:/usr/src/top-3.5beta6# ./Configure     

      (첫 질문인 어떤 머신을 선택할 거냐에서 Sun solaris 2.3, 2.5, 2.51, 2.6은

       sunos5를 입력.  그 외는 전부 그냥 Enter를 치면 되는데, 세세하게 제어할

       수도 있음. 한번 쭉 둘러보고, 다시 ./Configure를 해 봐도 됨. 급하면 그냥

       전부 Enter)

      

      power:/usr/src/top-3.5beta6# make  

      power:/usr/src/top-3.5beta6# make install

 

      그러면 /usr/local/bin/top이 설치됨.

 

 

 5.3.2 monitor

  

   AIX 플렛폼에서는 monitor를 이용하는 것이 일반적입니다. OS에 종속적인 별도의

   툴인 만큼 패키지 인스톨을 하셔야만 사용할 수 있는 것으로 알고 있습니다.

 

 

 5.3.3 nmon

  

   출처가 불분명하지만, monitor 못지않게 간단하면서도 CPU/MEM/Process상황을 한눈에

   확인할 수 있습니다. 특히 monitor와는 달리, SMP 머신의 경우 CPU별로 정보를 보여

   주기때문에 아주 유용합니다.

 

   다음 사이트에서 다운 받아 AIX에서 곧바로 실행시켜 볼 수 있습니다.

   http://javaservice.net/~java/bbs/read.cgi?m=unix&b=unix&c=r_p&n=944137458

 

 

 

 

 

 5.4  AIX System Parameter

 

 5.4.1 file descriptors

 

   [AIX]

   # ulimit -a

   time(seconds)        한계가 없음.

   file(blocks)         2097151

   data(kbytes)         131072

   stack(kbytes)        32768

   memory(kbytes)       32768

   coredump(blocks)     2097151

   nofiles(descriptors) 2000

 

   [Linux]

   # ulimit -a

   core file size (blocks)  0

   data seg size (kbytes)   unlimited

   file size (blocks)       unlimited

   max memory size (kbytes) unlimited

   stack size (kbytes)      8192

   cpu time (seconds)       unlimited

   max user processes       2048

   pipe size (512 bytes)    8

   open files               1024

   virtual memory (kbytes)  210534

 

   Unix 마다 ulimit 를 통해 시스템의 여러가지 제한을 설정할 수 있습니다. 그러나 OS에

   따라 약간씩 내용과 형태가 다릅니다.

 

   중요한 부분은 다음과 같습니다.

  

   1. nofiles(AIX), open files(Linux)

      특정 시점에서, 하나의 process가 open 할 수 있는 최대 파일 수

      file descriptors 라고 불립니다.

   2. coredump(AIX), core file size(Linux)

      core 파일의 크기제한 설정

   3. momery(AIX), max memory size(Linux)

   4. max user processes (linux)

   5. data(AIX), data seg size(linux)

   6. stack(AIX), stack size(linux)

 

   (어느 하나 중요치 않은 것이 없군요....)

   이 값은 /etc/security/limits 에서 영구히 설정할 수 있습니다. ulimit 명령을

   이용하여 고치는 것은 soft change 즉, 다음 시스템 부팅 때까지만 유효합니다.

   또한 ulimit 명령으로는 AIX의 경우 nofiles 만 변경할 수 있습니다.

 

 

 

   그러나 여기서 얘기하고자 하는 것은 한 process 가 open 할 수 있는 file descriptors

   입니다. file descriptors는 open files 라고 표현되기도 하는데, 물리적인 File 을

   얘기하는 것이 아니라, TCP/IP socket, file open stream 등등을 나타냅니다.

 

   # uilmit -n 4000 와 같이 이 값을 변경할 수 있습니다.

 

   통상 위처럼 하나의 Unix 프로세스가 Open 할 수 있는 file descriptors(file,stream,

   sockets)는 AIX의 경우 2000, Solaris의 경우 64, linux의 경우 1024 가 Default로

   잡혀 있습니다.

 

   WebSphere 가이드에선 unlimited 로 하라고 합니다만, 이 값은 다음처럼 모니터링을 통해

   필요한 만큼으로 조정하는 것이 바람직합니다.

 

   # which lsof

   /usr/local/bin/lsof

 

   # which lsof.sh

   /usr/local/bin/lsof

   # lsof.sh

   open file-descripters for each process

   check the maximum values.

   root:0:(unknown):1

   root:1:init:2

   root:10102:biod:4

   root:47262:wapsvc:6

   root:56358:tn:8

   root:5646:sbpb5059:3

   (중간생략)

   root:56854:sh:6

   root:57404:httpd:23

   root:58672:sbpb5037:3

   root:58934:java:14

   root:8334:rpc.lockd:5

   root:8532:sendmail:8

   root:9052:srcmstr:5

   tis:11902:httpd:23

   tis:12032:httpd:23

   tis:12378:httpd:23

   tis:37910:httpd:23

   (중간생략)

   tis:61322:httpd:23

   tis:61508:httpd:23

   tis:61752:httpd:24

   tis:62202:java:60

   tis:62362:httpd:23

   tis:62676:httpd:23

   (중간생략)

   tis:70698:httpd:23

   tis:70994:httpd:23

   tis:71502:httpd:23

   tis:72340:httpd:23

 

   ========================

   root:  631

   tis:  3195

   ========================

 

   위에서 tis 유저가 총 3195 개의 file descriptors (file, sockets)를 open 해 놓고

   있으며, 최대의 한 프로세스당 open 된 갯수는 WebSphere인 java process가 60개의

   file-descriptor를 open해 있다는 것을 알 수 있습니다. 이 수치는 설정된 2000보다

   작으니 문제가 없는 상태입니다.

 

   NOTE: nobody 유저는 ulimit 제한을 받지 않습니다. nobody 유저가 open한 file

         descriptors 의 갯수가 설정 값 이상을 초과하였다 하더라도 문제되지 않습니다.

         (IBM 문수영)

 

   "lsof" binary 파일과 lsof.sh 쉘스크립트는 아래 사이트에서 받을 수 있습니다.

 

   ftp://ftp.javaservice.net/pub/unix/aix/lsof

   ftp://ftp.javaservice.net/pub/unix/aix/lsof.sh

 

 

 

 

6. AIX TCP/IP Network Tuning

 

 

 6.1 no command

 

   no 파라메터는 TCP, UDP, IP 에 영향을 미치는 initial network option

   으로써, N/W Adapter Type에 independent 합니다.

 

   # no -a 를 통해 각종 현재 설정된 no 파라메터 값을 보실 수 있습니다.

   ....

 

   # no -o thewall

   thewall = 262124

   # no -o thewall = xxxxxxx

 

 

 6.1.1  thewall

   : the maximum amount of memory, in KB, that is allocated to the

     memory pool.(multipls of 4KB)

   디폴트: 1/2 of real memory or 1048576(1GB)

   필요하다면 늘일 수 있음.

   # no -o thewall = 300000

 

 6.1.2 sb_max

   : absolute upper bound on the size of TCP and UDP socket buffers

     per socket.(multipes of 4096)

   - at least twice the size of the largest value for tcp_sendspace,

     tcp_recvspace or udp_recvspace.

   - default: 65536

   - recommand:

     S7A(12-way, 8GB), H70(8-way,4GB), S80(12-way, 16GB),

      43P-260(2-way,4GB) : 262144

 

 6.1.3 somaxcomm

   : the maximum listen backlog

   - default: 1024 bytes

   - recommand:

     S7A(12-way, 8GB), H70(8-way,4GB) : 8192

     S80(12-way, 16GB), 43P-260(2-way,4GB) : 16384

 

 6.1.4 tcp_sendspace

   : default value ofr the size of the TCP socket sned buffer,

     in bytes.

   - never higher than the major netwrk adapter thansmit queue limit.

   - (major adapter queue size) * ( major notwork adapter MTU)

   - multiples of 4096

   - recommand:

     S7A(12-way, 8GB), H70(8-way,4GB), S80(12-way, 16GB),

      43P-260(2-way,4GB) : 28000

 

 6.1.5 tcp_recvspace

   : default value ofr the size of the TCP scket receive buffer,

     in bytes.

   - never higher than the major metwork adapter transmit queue limit.

   - (major adapter queue size) * ( major metwork adapter MTU)

   - multiples of 4096

   - recommand:

     S7A(12-way, 8GB), H70(8-way,4GB), S80(12-way, 16GB),

      43P-260(2-way,4GB) : 28000

 

 6.1.6 udp_sendspace

  : default value for the size of the UDP socket send buffer, in bytes.

  - multiples of 4096

  - Set to 65536

 

 6.1.7 udp_recvspace

  : default value for the size of the UDP socket receive buffer.

  - sugesting for the startng value of udp_recvspace is 10 times the

    value of udp_sendspace.

  - multiples of 4096

  - should always be greater than udp_sendspace and sized to handle

    as many simyltaneous UDP packets as can be expected per UDP socket.

 

 6.1.8 rfc1323

  - value of 1 indicates that tcp_sendspace and tcp_recvspace sizes

    can exceed 65536(64KB). 0 means the maximum is 65536.

  - we recommend the this always be set to 1.  

 

 6.1.9 tcp_timewait

  : how long connection are kept in the timewait state.

  - given in 15 seconds intervals.

  - defult is 1 (which means 15 seconds)

   - recommand:

     S7A(12-way, 8GB), H70(8-way,4GB), S80(12-way, 16GB),

      43P-260(2-way,4GB) : 5

 

 6.1.10 nbc_max_cache

  : maximum size of the cache object allowed in the Network Buffer

    Cache(NBC), in bytes.

  - default : 131072(128K)

  - recommand:

     S7A(12-way, 8GB), H70(8-way,4GB) : 100000

     S80(12-way, 16GB): 60000

     43-260(2-way,4GB) : 100000

 

 6.1.11 nbc_pseg_limit

  : the maximum amount of cached data allowed in private segments

    in the Network Buffer Cache, expressed in KB.

  - default : half of the total real memory size on the running system.

  - recommand:

     S7A(12-way, 8GB), H70(8-way,4GB) : 10000

 

 6.1.12 nbc_pseg

  : the maximum number of private segments that can be created for

    the Network Buffer Cache.

  - default : 0

  - recommand:

     S80(12-way, 16GB) : 80000

     43-260(2-way,4GB) : 20000

 

 6.1.13 nbc_limit

  : the total maximum amount of memory that can be used for the Network

    Buffer Cache, in KB.

  - default : derived from thewall

  - recommand:

     S80(12-way, 16GB) : 393216

 

 6.1.14 MTU(Maiximum Transmission Unit)

  : Limits the size of packets that are transmtted on the network, in

    bytes.

  - default : adapter dependent

  - range : 512 - 65536 bytes

  - to obtain: lsattr -E -l tr0, netstat -i

  - to change, chdev -l interface -a mtu=<newvalue>, or SMIT

  - NOTE: all the systems on the LAN must have the same MTU, they

          must change simultaneously. Change is effective across boots.

   

  - recommand: ( default/max/optimal )

     Ethernet    : 1500/1500/1500 

     Toket Ring : 1492/17284/4096

     FDDI    : 4352/4352/4352

     ATM    : 9180/65530/9180

     Gigabit Ethernet : 9000/NaN/9000

 

  - FYI.

     S7A(12-way, 8GB) : ATM MTU=9180

     H70(8-way,4GB) : ATM MTU=9180, Jumbo Frame Gigabit MTU=9000

     S80(12-way, 16GB): Jumbo Frame Gigabit MTU=9000

     43-260(2-way,4GB) : Jumbo Frame Gigabit MTU=9000

 

 6.1.15 tcp_mssdflt

  : default maximum segment size used to communicate with remote

    networks.

  -: MTU of interface - TCP header size - IP header size

     - rfc1323 header size

   which is:

     MTU - 20 - 20 - 12, or MTU - 52

   Limiting data to MTU - 52 bytes ensures that, where possible, only

   full packets will be sent.

   if set higher than the MTU of the adapter, IP or and intermediate

   router may fragment packets.

 

 

 

 NOTE: 값을 변경하려면 다음과 같은 명령어를 사용합니다.

   # chdev -l en0 -a tcp_recvspace=65536 -a tcp_sendspace=65536 \

      -a tcp_nodelay=1

   # chdev -l en0 -a rfc1323=0

 

   확인사항: no -o  커멘드를 사용하면 값이 일시적으로 적용되고, chdev를

            이용하면 ODM의 값을 변경하여 영구적인 반영이 되는 것이 맞는가?

 

 

 

 6.2 netstat

 

 6.2.1 netsat -I

 

 # ifconfig -a

 lo0: flags=e08084b<UP,BROADCAST,LOOPBACK,RUNNING,

        SIMPLEX,MULTICAST,GROUPRT,64BIT>

        inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255

        inet6 ::1/0

 tr0: flags=e0a0043<UP,BROADCAST,RUNNING,ALLCAST,

        MULTICAST,GROUPRT,64BIT>

        inet 9.184.113.36 netmask 0xfffff800 broadcast 9.184.119.255

 

 # netstat -i

 이름  Mtu   네트워크    주소               Ipkts Ierrs    Opkts Oerrs  Coll

 lo0   16896 link#1                           23197     0    23197     0     0

 lo0   16896 127         localhost            23197     0    23197     0     0

 lo0   16896 ::1                              23197     0    23197     0     0

 en0   1500  link#2      8.0.5a.d.6b.4      2608747     0    23986     0     0

 en0   1500  9.184.112   merlin12.kr.ibm.c  2608747     0    23986     0     0

 

 #netstat -I en0

 이름  Mtu   네트워크    주소               Ipkts Ierrs    Opkts Oerrs  Coll

 en0   1500  link#2      8.0.5a.d.6b.4      2611335     0    24006     0     0

 en0   1500  9.184.112   merlin12.kr.ibm.c  2611335     0    24006     0     0

 

 

# netstat -I en0 1

     입력    (en0)      출력           입력    (총계)     출력

  패킷     오류  패킷     오류 colls  패킷     오류  패킷     오류 colls

  2533848     0    23724     0     0  2556401     0    46277     0     0

       46      0     49      0     10     71      0     74      0     10

       41      0     24      0     0      41      0     24      0     0

       52      0     46      0     5      211     0     205     0     5

       17      0     15      0     0      17      0     15      0     0

       22      0     23      0     0      22      0     23      0     0

       30      0     29      0     1      58      0     56      0     1

       55      0     50      0     0      69      0     64      0     0

       16      0     15      0     0      17      0     15      0     0

       41      0     57      0     9      85      0     101     0     9

       64      0     54      0     5      658     0     648     0     5

       97      0     134     0     31     639     0     676     0     31

       27      0     23      0     0      29      0     23      0     0

       16      0     15      0     0      18      0     15      0     0

       35      0     48      0     8      286     0     296     0     8

       49      0     65      0     8      87      0     100     0     8

       53      0     55      0     9      103     0     101     0     9

       48      0     56      0     6      400     0     406     0     6

 

  주목하여 보아야 할 것은 colls(number of colisions) 값인데, 이 값은

  일정 정도 나타나는 것이 정상입니다. 그러나 과도하게 높다는 것은

  Network의 부하가 심하다거나, 병목현상이 발생하고 있다는 것을

  의미합니다.

 

 

 6.2.2 netstat -m

 

 AIX는 communication subsystem내에서 효율적으로 pinned(physical)

 메모리를 할당하고, 또 재사용합니다. 이때 mbufs 와 clusters 라는

 메모리 버퍼를 사용합니다.

 

 netstat -m 을 통해 이 값이 얼마나 지금 사용되고 있는 지를 확인

 할 수 있습니다.

 

 

 # netstat -m

 Kernel malloc statistics:

 4294963111 mbufs in use:

 4294967000 mbuf cluster pages in use

 4294965066 Kbytes allocated to mbufs

 63 requests for mbufs denied

 0 calls to protocol drain routines

 0 sockets not created because sockthresh was reached

 ******* CPU 1 *******

 By size       inuse     calls failed   delayed    free   hiwat   freed

 32               77    531749      0         0     179    1440       0

 64               24     98743      0         0     104     720       0

 128              30    154899      0         0     354     360     139

 256             688 104063207      3         0    1072     864    1384

 512              42   6165348      0         0      86      90    1127

 1024             39    526763      0         0     137     225       0

 2048            768   7687675     29         0     224     225     638

 4096              6    949759      0         0     262     270     363

 8192              1     42809      0         0      21      22      31

 16384             2     70261      0         0      53      54    4475

 

 ......

 

 By type       inuse   calls failed delayed  memuse  memmax  mapb

 

 Streams mblk statistic failures:

 0 high priority mblk failures

 0 medium priority mblk failures

 0 low priority mblk failures

 

 위에서 "63 requests for mbufs denied" 부분을 눈여겨 봐야 합니다. 만약 Memory

 Buffer 할당 요청이 실패하면, 해당 request는 잃어버리게 됩니다. 이 값이 0 이상이면

 network memory pool(thewall)의 크기를 늘려줄 필요가 있습니다.

 

 

 보다 상세한 정보를 보려면, 다음과 같이 할 수 있습니다.

 # no -o extendednetstats=1

 # netstat -m

 

 Kernel malloc statistics:

 

 ******* CPU 0 *******

 By size       inuse     calls failed   delayed    free   hiwat   freed

 32              221      9414      0         0      35     746       0

 64               87      5304      0         0      41     373       0

 128             136      2079      0         0     152     186       1

 256             205   3566498      0         0     435     448       2

 512              86      9124      0         0       2      46       0

 1024             73      3443      0         0       3     116       0

 2048              0      1296      0         0       6     116       0

 4096             35    749417      0         0       7     140       0

 8192              4       639      0         0       1      11       0

 16384             1       395      0         0      23      28       3

 32768             1         1      0         0       0     640       0

 

 By type       inuse   calls failed delayed  memuse  memmax  mapb

 mbuf         4294963202 285898263      0       0 4293919232 1278976     0

 mcluster     4294967001  36444534      0       0 4294513408 10815296     0

 socket       4294967020   3218364      0       0 4294824672  487328     0

 pcb          4294967288    927521      0       0 4294966400   14464     0

 routetbl          0        16      0       0       0     288     0

 mblk             68    582532      0       0   15360  501120     0

 mblkdata          1      9549      0       0    8192  409600     0

 strhead           9       649      0       0    1728    4288     0

 strqueue          8      1322      0       0    4096   10752     0

 strosr            0     21154      0       0       0     512     0

 strsyncq          8      2844      0       0    1024    2752     0

 streams          15       219      0       0    3680    9056     0

 kernel table?4294967292    280834      0       0 4294965248  118784     0

 temp              0        45      0       0       0     512     0

 

 Streams mblk statistic failures:

 0 high priority mblk failures

 0 medium priority mblk failures

 0 low priority mblk failures

 

 여기서 의미있는 것은 현재의 mbuf, mcluster 의 inuse 을 통해 얼마나 많은

 pinned kernel virtual memory 가 사용되고 있는지 볼 수 있다는 겁니다. (16*4KB)

 pinned memory의 의미는 Physical 메모리에 상주하여 절대 page out 이 일어 나지

 않는 메모리임을 나타냅니다.

 

 튜닝 접근 포인트는 network miximum memory pool인 thewall의 값을 높여 주는

 것입니다.

 

 

 6.3 물리적인 N/W전송속도 측정

 

 아무리 N/W 파라메터를 잘 조정하고 에러가 없더라도 반드시 체크해야 할 포인터는

 실제 전송속도를 측정하여야 한다는 것입니다.

 웹서버의 DocumentRoot 디렉토리에 1MB크기의 파일을 하나 만드신 후, 이 파일을

 FTP나 HTTP를 통해서 다운로드되는 전송송도를 측정하세요.

 

 이 부분은 N/W route 설정이 잘못되어있거나, 물리적인 N/W Bandwidth가 부족한

 경우를 잡아낼 수 있습니다.

 

 일반적으로 70 ~ 130 KByte/s 의 전송속도는 나와야 웹서버를 이용한 최종사용자의

 체감응답속도가 만족스러울 수 있습니다.

 또한 단일 요청에 의한 전송속도 측정도 중요하지만, 동시에 10명, 30명, 50명

 정도로 동일한 1MB의 파일을 끌어 당겨 보십시요. 기하급수적으로 응답속도는

 저하될 것입니다. 그러나 그 저하되는 속도가 만족스러운지는 해당 사이트에서

 결정하셔야 할 부분입니다.

 

 N/W 전문가를 통해 튜닝 전후의 결과를 비교하는 가장 단순하면서도 확실한 방법은

 위 처럼 1MB를 실제 DownLoad 해 보는 것입니다.

 

 측정 대상라인 구간구간별로 하는 것도 병목의 위치를 잡아내는 아주 효과적인 방법

 입니다. 필요하다면, Kornet, Dacom 등 ISP별로 인터넷 PC방에서 측정한 자료를

 비교하시면 될 것입니다.

 

 

 

 

 

7. Performance Test Tools

 

  웹서버싱의 성능 및 부하테스팅 도구로는 WebStone, AKTools, Apache Bench,

  Rational Suite Performance Studio, JMeter, WebLoad, LoadRunner 등이

  있습니다.

 

 7.1 WebStone

  - http://www.mindcraft.com

  - Mindcraft Inc. ( from Silicon Graphics)

  NOTE: SSL, POST, HTTP 1.1, cookies, dynamic workloads with DB access,

        authentication 등은 지원하지 않습니다(!)

 

 7.2 AKTools

   - AKTools은 IBM 내부어플리케이션 입니다.

   - 지원기능: Fully configurable HTTP headers, SSL, HTTP1.1, cookie cache,

               Result verification, logging, request-level statistics,

               proxy request

   NOTE: 근데, 이 Tool 어디서 구하죠 ? 가장 적절한 테스팅 툴로 여겨집니다만...

 

 7.3 Apache Bench

   - Apache WebServer(IBM HTTP Server 포함) 의 bin 디렉토리에 ab 라는

     명령어가 있습니다.

   - Unix Plaform 에만 있습니다.

   - 사용예

     ./ab -n 100 -c 10 http://www.javaservice.net:8000/servlet/snoop

   - NOTE: 시스템에 부하를 주는 용도로만 사용하시고, 그 측정값을 이용하여

           시스템 로드 수치로 사용하지는 마세요....

 

 7.4 Rational Suite Performance Studio

   - http://www.rational.com

   - 보다 상세한 사항은 해당 사이트의 정보를 이용하세요

 

 7.5 JMeter

   - http://www.apache.org

   - Apache의 공짜 Tool로서 Concurrent level 을 20 개까지 밖에 줄 수 없다는

     단점이 있지만, 여러대의 Client PC를 활용하여 더 높일 수 있습니다.

   - Java로 되어 있습니다. GUI화면을 제공하기 때문에 가장 쉽게 사용해

     보실 수 있을 것이고, 응답속도가 직관적인 Graph형태로 나옵니다.

   - 이 역시 서버에 부하를 주는 용도로만 사용하세요..

 

 

 7.6 WebLoad

   - http://www.radview.com

   - SSL, HTTP1.1, proxies, cookies, keep-alive, certificates, authentification

   - 보다 상세한 정보는 해당 사이트에서 확인하세요.

    

         

 7.7 LoadRunner

   - http://www.merc-int.com

   - Mercury Interactive Corporation.

   - 정확히는 모르지만, 너무 비싼 가격 땜에 모두들 사용하려는 엄두를 내지

     못하시더군요.....

 

 

 

 

8.  Capacity Planning

 

  IBM HOST나 TUXEDO, Entera, Topend와 같은 OLTP환경의 C/S시스템에 대한 용량산정은

  몇년간의 경험과 노하우를 바탕으로 이미 잘 알려져 있습니다.

  그러나 최근들어 인터넷/인트라넷 환경으로 전이되면서, 웹환경에서의 부하측정이나

  H/W별로, 또 어플리케이션의 특성 및 종류에 따라, 혹은 동시사용자에 따라 어느 정도의

  부하를 시스템이 견디는 지에 대한 통계치가 없습니다.

  그러다보니 H/W Vendor들은 시스템이 Open한 후에서야 "H/W를 증설하셔야 합니다"와

  같이 궁색한 변명을 하기도 합니다.  C/S 에 익숙한 분들이라면 이러한 오류를 범하는

  것이 시기적으로 당연하단 생각이 듭니다.

 

 

 

 8.1 Performance Factors

 

 

 8.1.1 CPU 증설

 

   CPU의 성능을 올리거나 CPU의 갯수를 늘이는 방법은 가장 간단하면서도 단기적인

   성능향상 효과를 가져올 수 있는 가장 손쉬운 방법입니다.

   CPU bounded job의 경우는 CPU의 성능을 높이는 것은 단일 Request에 대한 Response

   Time을 빠르게 할 수 있는 방법이 되고, CPU의 갯수를 늘이는 것은 보다 많은

   동시사용자를 받아들일 수 있도록 TPS(Transaction processing per second)를 높여

   줍니다.

  

   특히 WebSphere는 Multi-thread 방식으로 디자인되어 있기 때문에, 여러개의 CPU에서

   그렇다면 과연 어느정도의 성능향상 효과가 나겠느냐라는 것이 관건입니다. 일반적으로

   C/S환경에서도 마찬가지겠지만, 특정 어플리케이션에 대해서 최대 처리할 수 있는

   TPS의 수치가 CPU의 갯수가 1장에서 2장로 늘어날 때, 또 2장에서 4장로 늘어날 때

   70 ~ 90% 정도씩의 성능향상효과가 납니다. 즉, 1,2,4 과 같은 형태로 CPU를 늘이면

   얼추 1.8배 씩의 TPS 성능향상이 날 수 있습니다.

 

   아래는 서로 다른 기종에서 CPU의 갯수를 늘렸을 때 TPS(초당 HTTP Request의 처리수)

   를 비교한 그래프입니다.

 

  

   [그림 5]

  

   NOTE: H/W기종이 다른 만큼, OS별로 비교하는 것은 의미가 없습니다. 여기서

        나타내고자 한 것은 CPU 의 갯수를 늘였을 때 어느정도의 성능효과가 나타나는

        지를 나타내고 있을 뿐이며, 해당 수치 자체는 어플리케이션의 특성에 따라

        다르므로 H/W 혹은 OS별 성능평가의 잣대로 사용하여서는 않됩니다.

 

 

  

  

   [그림 6[

 

 

 

   물론 성능향상을 볼 수 있으려면, 현재의 CPU 사용량의 거의 포화상태 가까지 있어야

   합니다. 현재의 CPU사용량이 양호한데 CPU의 장수를 늘인다고 해서 성능이 향상될 리가

   없겠지요.

 

   현재의 Performance 저하의 원인이 정확히 어디에 있는지 확인해 보세요. CPU 자원

   부족에 의한 것인지, 혹은 Memory, Network 병목, 어플리케이션 Lock 등, 종합적인

   관점에서 일차적으로 점검해 보시고, 그 원인이 CPU의 자원으로 문제라면 성능향상의

   가장 손쉬우면서도 빠른 방법입니다.

 

 

 

 8.1.2 Memory 증설

 

   일반적으로 IBM WebSphere Application Server의 경우, 최소한 512 MB이상을 필요로

   하고 CPU당 512MB 이상이 되어야 가장 효과적으로 운영이 될 수 있습니다.

 

   또한 같은 머신에 UDB DB2 나, IBM HOST와 연동하기 위한 CTG(CICS Transaction

   Gateway) 서버와 같은 Legacy 자원을 Access하는 별도의 프로세스와 함께 운영될 경우는

   더 많은 메모리를 필요로 합니다.

 

   특히, JVM(Java Virtual Machine)을 사용하는 어플리케이션 서버는 전부 process모델이

   아닌 thread 모델을 사용하기 때문에 특정 부분의 문제는 어플리케이션 전체의 문제로

   파급됩니다.

   예를 들어 JNI 모듈을 사용하는 특정 사용자 어플리케이션이 memory관련 SIGSEGV

   (signal of segmentation fault) 를 발생하면 전체 JVM이 내려가는 상황이 발생합니다.

   따라서 메모리의 부족상황이 도래 할 경우, Unix의 많은 프로세스 중 가장 먼저

   crashing 현상을 야기하는 프로세스는 바로 JVM 이 되는 것은 너무나 당연합니다.

 

 

   따라서 어떤 경우든, 메모리 부족상황은 항상 제일 먼저 해결해 놓아야 합니다.

 

 

 

 8.1.3 Application Clone

 

   WebSphere V2 에서는 같은 머신에 하나 이상의 WebSphere 엔진을 설치할 수 없었으며

   하나의 WebSphere 엔진에 서로 다른 두개의 HTTP Server를 연결할 수도 없었습니다.

   유일한 확장방법은 Network Dispatcher 와 같은 툴을 이용하여 두대의 머신을

   clustering 하여 사용하는 것이었습니다.

 

   그러나, WebSphere V3 는 하나의 머신에서 어플리케이션을 복제(clone)하여

   Load-balancing을 할 수 있습니다. 병목의 부하가 DB나, 혹은 static한 HTML 혹은

   웹서버에 있는 것이 아니라, Servlet과 같은 어플리케이션에 있을 경우는

   Appliction cloning을 통해 곧바로 성능향상의 효과를 볼 수 있습니다.

 

   그러나 대부분의 병목현상이 HTTP Process나, DB에 있기 때문에, 어플리케이션을

   cloning하였다고 해서 곧바로 2 배의 성능향상을 나타내지는 않습니다. 또한

   cloning은 2개, 3개 등과 같이 늘인다고 해서 TPS의 수치가 계속적으로 높아지지는

   않으며 오히려 성능이 감소할 수도 있습니다. H/W의 용량에 따라 적정 clone 수를

   찾으셔야 합니다.

 

 

  

 

 

 

 8.1.4 Cluster Scaling

 

 하나의 머신이 아니라 여러대의 머신을 clustering하여 사용하는 경우입니다.

 Network Dispatcher 와 같은 툴을 이용하여 여러대의 머신의 통해 부하분산을

 시키는 거죠. 머신 증가에 대한 동시사용자처리능력은 거의 linear 하게 증가합니다.

 하나의 머신이 100 명의 concurent request를 처리할 수 있었다면, 두대의 머신은

 200명을 수용할 수 있고, 세대의 머신의 300명을 수용할 수 있습니다.

 머신증가비유에 따라 96% 의 TPS 성능향상을 가져온다고 합니다.

 단, N/W의 병목과 Remote DB 에 부하만 없다는 가정하에 그러하겠죠.

 

 

 

 

Appendix : Issue List

 

 

A. 각 node에 있는 Applicatoin Server(Default Server와 같이) 내에 10개 이상의

   서블렛 엔진을 구성할 수 없습니다. 아직 원인은 명확하게 밝혀지지 않았지만,

   static 한 html 을 제외한 Servlet/JSP에 대한 Request 에 대하여 HTTP Server가

   "비정상적인 수행 에러"를 내면서 Dr. Watson 메세지를 뿌립니다.

 

   이 경우, 서블렛엔진을 10개 이하로 줄이세요. 조만간 원인을 찾을 수 있을 것 같습니다.

 

 

B. Servlet reload 를 true로 했을 경우, Servlet 코드가 재 컴파일되면, cache에 남아 있던

   기존 클래스와 충돌을 일으키며 ClassCastException 이나, ServletException 을

   발생할 수도 있습니다.

   개발환경에선 true로 하여 곧바로 반영되는 모습을 보고 싶으시겠지만, 운영환경에선

   절대 servlet reload 를 true 로 하지 마시기 바랍니다.

 

 

 

 

 

 

 

 

 

 

 

참고문헌:

 

IBM WebSphere V3 Performance Tuning Guide

  - Ken Ueno, Tom Alcott, Jeff Carlson, Andrew Dunshea, Hajo Kizhofer,

    Yuko Hayakawa, Frank Mogus, Colin D. Wordswroth.

  - http://javaservice.net/~java/bbs/read.cgi?m=appserver&b=was&c=r_p&n=959577074

 

IBM WebSphere Application Server 3.0 Std/Adv Edition Performance Report

(IBM Internal Only)

 

 

 

 

------------------------------------------------------- 

  본 문서는 자유롭게 배포/복사 할 수 있으나 반드시

  이 문서의 저자에 대한 언급을 삭제하시면 안됩니다

================================================

  자바서비스넷 이원영

  E-mail: javaservice@hanmail.net

  PCS:019-310-7324

================================================

번호 제목 글쓴이 날짜 조회 수
43 [UNIX/AIX] Download Java version on AIX file 김병수 2019.11.11 2
42 [UNIX/AIX] rsync install and config on AIX7.1 file 김병수 2019.11.07 3
41 [UNIX/AIX] filesystem의 jfs2log 파일 변경 김병수 2019.11.06 2
40 [UNIX/AIX] 0516-1972 varyonvg : The volume group is varied on in other node in concurrent mode; non-concurrent mode 김병수 2019.11.06 3
39 [UNIX/AIX] 0506-365 Cannot mount guarded filesystem 김병수 2019.11.06 2
38 [UNIX/AIX] UNITY 400 스토리지, AIX 7.1, EMC ODM 설치 김병수 2019.11.05 2
37 [UNIX/AIX] AIX 7.1에 naver 나눔고딕 설치 file 김병수 2019.10.08 7
36 [UNIX/AIX] 스토리지 마이그레이션 방안 김병수 2019.10.07 10
35 [UNIX/AIX] error 내용 중 Detail Data SIGNAL NUMBER 6 의미 김병수 2019.10.03 786
34 [UNIX/HP-UX] 간단한 명령어 김병수 2019.10.03 6
33 [UNIX/Solaris] 간단한 명령어 김병수 2019.10.03 6
32 [UNIX / HP-UX] HP-UX vPar Architecture and compared introduce 김병수 2019.10.03 8
31 [UNIX / HP-UX] vPars v6 CLI 김병수 2019.10.03 7
30 [OS / HP-UX] i2 Blade Memory organization 김병수 2019.10.03 10
29 [OS / HP-UX] sar 명령어 김병수 2019.10.03 6
28 [UNIX/HP-UX] swap 확인하기 김병수 2019.10.03 6
» [OS / AIX] AIX Performance Tools file 김병수 2019.10.03 11
26 [OS / AIX] 시스템 성능분석, CPU부분 file 김병수 2019.10.03 7
25 [OS / HP-UX] hp-ux system and network administration i h3064a 김병수 2019.10.03 6
24 [OS / HP-UX] Core Dump File 생성 file 김병수 2019.10.03 6
위로