2009년 1월 28일 수요일

메모리 카운터

[메모리 카운터]

Countor

설 명

의 미

Memory: Available Byte

서버에서 현재 사용할 수 있는 메모리를 기록한다.

낮은 값은 서버에 메모리가 부족하거나 특정 프로그램이 메모리 누수를 발생시키고 있다고 볼 수도 있다(특히 이 숫자가 지속적으로 줄어들 경우).

Memory: Commit Limit

페이징 파일을 확장하지 않고 사용할 수 있는 메모리의 최대량을 기록한다.

페이징 파일을 확장하는 것은 비효율적인 작업이기 때문에 가능하면 최소화되도록 한다. 아니면 페이징 파일을 원하는 만큼 크게 설정한다.

Memory: Commit Bytes

서버에서 실행되고 있는 프로세스들이 사용하고 있는 메모리의 양을 기록한다.

현재 사용되고 있는 RAM의 양을 가리키는데, 테이터가 디스크에 반드시 페이지되어야 하는 경우에는 페이지 파일에 같은 크기만큼의 공간이 필요하다. 그래서 사용되는 메모리이며 다른 프로세스가 사용할 수 없기 때문에 예약도 불가능하다.

Memory: Pages Input/sec

페이지 부재를 해결하기 위해 페이징 파일에서 RAM으로 데이터 페이지를 쓰는 속도를 기록한다.

이 값은 하드 페이지 부재 오류(hard page fault)를 나타내는 것이기 때문에(얼마나 자주 디스크에서 데이터를 가지고 오는지 측정할 수 있는 좋은 방법이다.

Memory: Pages Output/sec

RAM의 공간을 만들기 위해 데이터 페이지를 페이지 파일에 쓰는 속도를 기록한다.

서버가 평소보다 더 느리게 동작하는 것처럼 보이면 이 카운터를 모니터 한다. 이 값이 높으면 서버에 어플리케이션을 지원할 만큼의 충분한 메모리 공간이 없다는 것을 말한다.

Memory: Pages/sec

하드 페이지 부재 오류를 해결하기 위해 페이지가 디스크에서 물리적인 메모리로 쓰여지거나 RAM의 빈 공간을 만들기 위해 디스크로 페이지를 옮겨 쓰는 속도를 기록한다.

값이 초당 20페이지가 넘어서면 페이징이 많다는 것을 의미하며, 서버에 더 많은 메모리가 필요하다는 의미이다.

Paging File: % Usage

페이징 파일 사용량의 최대 크기를 기록한다.

이 값이 페이징 파일의 최대 크기에 가까이 가면 페이징 파일을 늘리거나 RAM을 추가해야 한다. 높은 수치는 페이징 파일이 모든 데이터를 포함할 만큼 충분히 크지 못하다는 의미이다.

Paging File: Usage Peak

페이징 파일 사용량의 최대 크기를 기록한다.

이 값이 페이징 파일의 최대 크기에 가까이 가면 페이징 파일을 늘리거나 RAM을 추가해야 한다. 높은 수치는 페이징 파일이 모든 데이터를 포함할 만큼 충분히 크지 못하다는 의미이다.

Physical Disk: % Disk Time

디스크가 읽고 쓰는 요청을 처리하는데 사용되는 시간을 퍼센트로 기록한다.

이 값이 Memory: Page Read/sec이 늘어남과 동시에 함께 늘어난다면 페이징 파일이 많이 사용되고 있다는 의미이다. 페이징 파일이 위치한 물리적 디스크에 대해 이 값을 모니터 한다.

Physical Disk:

Avg Disk sec/Transfer

데이터를 디스크에 전송하는데 걸리는 시간을 기록한다.

페이징 파일이 위치한 물리적 디스크에 대해 이 값을 모니터 하면 디스크의 응답 시간을 확인할 수 있다. 이 정보를 이용해 더 빠른 디스크를 찾아 페이징 파일을 옮길 수 있다.

Process: Private Bytes

해당 프로세스가 사용하는 가상 메모리의 크기를 기록한다.

이 카운터는 하나의 프로세스가 사용하고 있는 메모리의 크기를 보여준다(모든 어플리케이션에 대한 유용한 정보이다). 특히 터미널 서버를 모니터하고 있는 경우 요청하는 어플리케이션을 클라이언트 쪽으로 옮기거나 전용 서버로 옮겨 다른 프로세스에 메모리가 부족하지 않게 한다.

Process: Working Set

프로세스가 데이터를 저장하기 위해 사용하는 RAM의 양을 기록한다. 작업 집합(working set)이 클수록 프로세스는 더 많은 메모리를 소비한다.

아무 작업을 하고 있지 않은데도 시간이 지나면서 작업 집합의 크기가 증가되면(예를 들면 1주일 동안) 해당 프로세스는 메모리 누수 현상을 일으키는 것일 수 있다.

[물리적 디스크 카운터]

Countor

설 명

의 미

Physical Disk: %Disk Time 물리적인 디스크가 사용되는 시간의 퍼센트를 기록한다. 이 값이 90퍼센트를 넘어서면 병목이다.(새로운 디스크를 이용하거나 사용량을 줄여 성능을 향상시킨다.)

Physical Disk: Current Disk Queue Length

지정된 물리적인 디스크(또는 선택한 모든 디스크)에 대기하고 있는 데이터 전송 작업의 현재 숫자를 기록한다. 이 값은 가능한 적어야 한다. 높은 값을 나타내면 디스크 대기 시간이 그만큼 늘어나 사용자들의 작업을 느리게 한다.

[네트워크 관련 카운터]

Countor

설 명

의 미

Server: Bytes Total/sec 서버가 네트워크 데이터를 송수신하는 속도를 기록한다. 초당 서버에서 송수신되는 총 바이트 수는 서버가 얼마나 바쁜지를 보여주는 좋은 지표가 된다. 서버에 걸려 있는 부하를 변경하기 위해 같은 종류의 서버를 추가하여 네트워크 부하를 분산시키는 것과 같이 어떤 작업을 하는 경우 작업의 성공 여부를 파악할 수 있다.
Server: Files Open 측정시 열린 파일들의 숫자를 기록한다. 이 값은 주어진 시간 동안 열린 파일의 숫자의 합이 아니라 측정 순간의 총합을 나타낸다. 파일 서버에 걸려 있는 트래픽 부하를 보여준다. 하지만 사용자 단위 혹은 파일 단위로 볼 수는 없다.
Server: Pool Non-paged Failures 빈 페이지 풀은 페이징하는 과정에서 발생되는 오류의 숫자를 기록한다. 빈 페이지 풀은 호출이 되면 즉시 준비할 수 있게 하기 위해 디스크에 페이지될 수 없는 데이터의 가상 메모리 영역이다. 에러가 많이 발생하면 서버에 RAM을 늘려야 한다.
Server: Server Sessions 서버에 대한 연결의 현재 숫자를 기록한다. 이 카운터는 서버가 얼마나 바쁜지를 보여주는 것은 아니지만 서버에 대한 연결이 얼마나 많은지 살펴볼 수 있다. 특히 누구도 액세스하지 말아야 하는 시간에 연결을 점검하는 용도로 사용될 수 있다.
Network Interface: Bytes Total/sec

네트워크 카드가 네트워크 데이터를 송수신하는 속도를 기록한다.

속도가 네트워크와 네트워크 카드에 지정된 기대치에 너무 못 미치는 경우 카드가 제대로 동작하는지 검사해볼 수 있다.

 

성능 카운터에 대한 병목

성능 Count에 대한 자세한 설명과 임계치도 나와있어서 System 병목현상을 Check하는데 도움이 되는글일수 있겠다.

출처 : http://technet.microsoft.com/ko-kr/magazine/cc718984.aspx

● 하드 디스크 병목 현상

   디스크 시스템은 서버에서 프로그램 및 데이터를 저장하고 처리하므로 디스크 사용량 및 속도에 영향을 미치는 병목 현상은 서버의 전체적인 성능에 큰 영향을 줍니다. 디스크 개체가 서버에서 비활성화된 경우 명령줄 도구 Diskperf를 통해 활성화해야 합니다. 또한 % Disk Time은 100%를 초과할 수 있으므로 대신 % Idle Time, Avg. Disk sec/Read 및 Avg. Disk sec/write를 사용하면 하드 디스크가 얼마나 많이 사용되고 있는지 좀더 정확하게 파악할 수 있습니다. % Disk Time에 대한 자세한 내용은 support.microsoft.com/kb/310067 기술 자료 문서를 참조하십시오.

다음은 Microsoft Service Support 엔지니어가 디스크 모니터링을 위해 사용하는 카운터입니다.

LogicalDisk\% Free Space 선택한 논리 디스크 드라이브에서 사용할 수 있는 공간의 백분율을 측정합니다. 이 카운터가 15% 아래로 떨어지면 OS에서 중요 파일을 저장하기 위한 여유 공간이 부족할 수 있습니다. 이 경우 확실한 해결책은 디스크 공간을 늘리는 것입니다.

PhysicalDisk\% Idle Time 샘플 간격 중 디스크가 유휴 상태였던 시간 백분율을 측정합니다. 이 카운터가 20% 아래로 떨어지면 디스크 시스템이 포화 상태인 것입니다. 현재 디스크 시스템을 더 빠른 디스크 시스템으로 교체하는 것이 좋습니다.

PhysicalDisk\Avg. Disk Sec/Read 디스크에서 데이터를 읽는 데 걸리는 평균 시간(초)을 측정합니다. 값이 25ms(밀리초)보다 크면 디스크에서 읽을 때 디스크 시스템에 지연 현상이 발생하고 있음을 의미합니다. SQL Server® 및 Exchange Server를 호스팅하는 중요 업무 서버의 경우 허용 가능한 임계값은 10ms 미만입니다. 여기에서 가장 현명한 해결책은 현재 디스크 시스템을 더 빠른 디스크 시스템으로 교체하는 것입니다.

PhysicalDisk\Avg. Disk Sec/Write 디스크에 데이터를 쓰는 데 걸리는 평균 시간을 측정합니다. 이 시간이 25ms보다 크면 디스크에 쓸 때 디스크 시스템에 지연 현상이 발생하고 있음을 의미합니다. SQL Server 및 Exchange Server를 호스팅하는 중요 업무 서버의 경우 허용 가능한 임계값은 10ms 미만입니다. 여기에서 현명한 해결책은 디스크 시스템을 더 빠른 디스크 시스템으로 교체하는 것입니다.

PhysicalDisk\Avg. Disk Queue Length 얼마나 많은 I/O 작업이 하드 드라이브를 사용할 수 있을 때까지 대기하고 있는지 나타냅니다. 여기에서 값이 스핀들 수 + 2보다 크면 디스크 자체에 병목 현상이 있음을 의미합니다.

Memory\Cache Bytes 파일 시스템 캐시에 사용되고 있는 메모리의 양을 나타냅니다.                    이 값이 200MB보다 크면 디스크 병목 현상이 발생할 수 있습니다.

● 메모리 병목 현상

   메모리 부족은 대체로 RAM 부족, 메모리 누수 또는 boot.ini의 메모리 스위치 등으로 인해 발생합니다. 메모리 카운터를 소개하기 전에 먼저 /3GB 스위치에 대해 설명하겠습니다.메모리가 많을수록 디스크 I/O 작업이 줄고 응용 프로그램 성능이 높아집니다. /3GB 스위치는 사용자 모드 프로그램에 더 많은 메모리를 제공하기 위한 방법으로 Windows NT®에서 도입되었습니다.

  4GB의 가상 주소 공Windows에서는 간을 사용하며 이는 시스템의 물리적 RAM과는 무관합니다. 기본적으로 하위 2GB는 사용자 모드 프로그램을 위해 사용되고, 상위 2GB는 커널 모드 프로그램을 위해 사용됩니다. /3GB 스위치를 사용하면 사용자 모드 프로세스에 3GB가 제공됩니다. 그러면 물론 커널 메모리가 가상 주소 공간의 1GB만 남게 되므로 영향을 받습니다. 이 경우 페이징되지 않은 바이트 풀링, 페이징된 바이트 풀링, 사용 가능한 시스템 페이지 테이블 항목 및 데스크톱 힙이 모두 이 1GB 공간 안에 들어가야 하므로 문제가 발생할 수 있습니다. 따라서 /3GB 스위치는 해당 환경에서 충분한 테스트를 거친 후에만 사용해야 합니다. 메모리 관련 병목 현상이 발생하는 경우 이 스위치를 의심해 볼 수 있습니다. /3GB 스위치가 문제의 원인이 아니라면 다음 카운터를 사용하여 잠재적인 메모리 병목 현상을 진단할 수 있습니다.

Memory\% Committed Bytes in Use 커밋된 바이트와 커밋 한도의 비율, 즉 가상 메모리의 사용량을 측정합니다. 이 값이 80%보다 크면 메모리가 부족함을 나타냅니다. 이 경우 확실한 해결책은 메모리를 추가하는 것입니다.

Memory\% Available Mbytes 프로세스 실행을 위해 사용할 수 있는 실제 메모리의 양(메가바이트)을 측정합니다. 이 값이 총 물리적 RAM의 5%보다 작으면 메모리가 부족함을 나타내며 이로 인해 페이징 작업이 늘어날 수 있습니다. 이 문제를 해결하려면 메모리를 추가해야 합니다.

Memory\Free System Page Table Entries 시스템에서 현재 사용되지 않는 페이지 테이블 항목의 수를 나타냅니다. 이 숫자가 5,000보다 작으면 메모리 누수가 있을 수 있습니다.

Memory\Pool Non-Paged Bytes 페이징되지 않은 풀의 크기(바이트)를 측정합니다. 디스크에 쓸 수 없고 대신 실제 메모리에 남아 있어야 하는 할당된 개체에 대한 시스템 메모리 영역입니다. 이 값이 175MB(또는 /3GB 스위치의 경우 100MB)보다 크면 메모리 누수 가능성이 있습니다. 일반적인 이벤트 ID 2019가 시스템 이벤트 로그에 기록됩니다.

Memory\Pool Paged Bytes 페이징된 풀의 크기(바이트)를 측정합니다. 사용되고 있지 않을 때 디스크에 쓸 수 있는 개체에 대한 시스템 메모리 영역입니다. 이 값이 250MB(또는 /3GB 스위치의 경우 170MB)보다 크면 메모리 누수 가능성이 있습니다. 일반적인 이벤트 ID 2020이 시스템 이벤트 로그에 기록됩니다.

Memory\Pages per Second 하드 페이지 결함을 해결하기 위해 디스크에서 페이지를 읽거나 쓰는 속도를 측정합니다. 과도한 페이징으로 인해 이 값이 1,000보다 크면 메모리 누수 가능성이 있습니다.

● 프로세서 병목 현상

   프로세서 병목 현상은 프로세서 자체의 성능이 나빠서 발생하거나 비효율적인 응용 프로그램으로 인해 발생할 수 있습니다. 실제 메모리 부족으로 인해 프로세서가 페이징에서 많은 시간을 보내지 않는지 다시 확인해야 합니다. 잠재적인 프로세서 병목 현상을 조사할 때 Microsoft Service Support 엔지니어는 다음 카운터를 사용합니다.

Processor\% Processor Time 프로세서가 비유휴 스레드 실행에 소비하는 경과 시간의 백분율을 측정합니다. 이 백분율이 85%보다 크면 프로세서에 병목 현상이 발생하고 서버에 더 빠른 프로세서가 필요할 수 있습니다.

Processor\% User Time 프로세서가 사용자 모드에서 소비하는 경과 시간의 백분율을 측정합니다. 이 값이 높으면 서버에서 응용 프로그램이 많이 실행되고 있음을 나타냅니다. 한 가지 가능한 해결책은 프로세서 리소스를 많이 사용하는 응용 프로그램을 최적화하는 것입니다.

Processor\% Interrupt Time 지정된 샘플 간격 중 프로세서가 하드웨어 인터럽트 수신 및 서비스 제공에 소비하는 시간을 측정합니다. 이 값이 15%보다 크면 하드웨어 문제일 수 있습니다.

System\Processor Queue Length 프로세서 큐의 스레드 수를 나타냅니다. 이 값이 일정 기간 동안 CPU 수 x 2보다 크면 서버에 프로세서 성능이 부족한 것입니다.

● 네트워크 병목 현상

   네트워크 병목 현상은 네트워크에서 데이터를 송수신하는 서버의 성능에 영향을 미칩니다. 서버의 네트워크 카드에 문제가 있을 수 있거나, 네트워크가 포화 상태여서 분할해야 할 수 있습니다. 다음 카운터를 사용하여 잠재적인 네트워크 병목 현상을 진단할 수 있습니다.

Network Interface\Bytes Total/Sec 프레이밍 문자를 포함하여 각 네트워크 어댑터를 통해 보내고 받는 바이트의 비율을 측정합니다. 인터페이스의 70% 이상이 사용되면 네트워크가 포화 상태입니다. 100Mbps NIC의 경우 사용되는 인터페이스는 8.7MB/초입니다(100Mbps = 100000kbps = 12.5MB/초* 70%). 이와 같이 포화 상태이면 더 빠른 네트워크 카드를 추가하거나 네트워크를 분할해야 할 수 있습니다.

Network Interface\Output Queue Length 출력 패킷 큐의 길이(패킷)를 측정합니다. 이 값이 2보다 크면 네트워크가 포화 상태입니다. 이 문제는 더 빠른 네트워크 카드를 추가하거나 네트워크를 분할하여 해결할 수 있습니다.

● 프로세스 병목 현상

   제대로 작동하지 않는 프로세스나 최적화되지 않은 프로세스가 있으면 서버 성능이 크게 저하될 수 있습니다. 스레드 및 핸들 누수는 결국 서버 다운으로 이어지고, 과도한 프로세서 사용은 서버 속도를 저하시킵니다. 다음 카운터는 프로세스 관련 병목 현상을 진단할 때 유용합니다

Process\Handle Count 프로세스로 현재 열린 총 핸들 수를 측정합니다. 이 값이 10,000보다 크면 핸들 누수 가능성이 있습니다.

Process\Thread Count 프로세스에서 현재 활성 스레드 수를 측정합니다. 이 값이 최소 및 최대 스레드 수 사이에서 500보다 크면 스레드 누수 가능성이 있습니다.

Process\Private Bytes 다른 프로세스와 공유할 수 없는 이 프로세스에 할당된 메모리의 양입니다. 이 값이 최소 및 최대 스레드 수 사이에서 250보다 크면 메모리 누수 가능성이 있습니다.

[메모리 카운터]

Countor

설 명

의 미

Memory: Available Byte

서버에서 현재 사용할 수 있는 메모리를 기록한다.

낮은 값은 서버에 메모리가 부족하거나 특정 프로그램이 메모리 누수를 발생시키고 있다고 볼 수도 있다(특히 이 숫자가 지속적으로 줄어들 경우).

설명에 나온글
able Bytes는 컴퓨터에서 실행되는 프로세스에 할당하거나 시스템에서 사용할 수 있는 실제 메모리의 양(바이트)입니다. 이것은 대기 중이거나 비어 있거나 0으로 채워진 페이지 목록에 할당된 메모리의 총계입니다. 메모리 관리자에 대한 자세한 내용은 MSDN 및/또는 Windows Server 2003 Resource Kit의 System Performance and Troubleshooting Guide 장을 참조하십시오.

Memory: Commit Limit

페이징 파일을 확장하지 않고 사용할 수 있는 메모리의 최대량을 기록한다.

페이징 파일을 확장하는 것은 비효율적인 작업이기 때문에 가능하면 최소화되도록 한다. 아니면 페이징 파일을 원하는 만큼 크게 설정한다.

설명에 나온글
Commit Limit는 페이징 파일을 확장할 필요 없이 커밋될 수 있는 가상 메모리 크기(바이트 단위)입니다. 커밋된 메모리는 디스크 페이징 파일에 예약된 실제 메모리 공간입니다. 각 논리 드라이브에 하나의 페이징 파일이 있을 수 있습니다. 페이징 파일이 확장되면 이 제한도 따라서 증가합니다. 이 카운터는 최근에 관찰된 값만 표시하며 평균값은 아닙니다.

Memory: Commit Bytes

서버에서 실행되고 있는 프로세스들이 사용하고 있는 메모리의 양을 기록한다.

현재 사용되고 있는 RAM의 양을 가리키는데, 테이터가 디스크에 반드시 페이지되어야 하는 경우에는 페이지 파일에 같은 크기만큼의 공간이 필요하다. 그래서 사용되는 메모리이며 다른 프로세스가 사용할 수 없기 때문에 예약도 불가능하다.

설명에 나온글
Committed Bytes는 커밋된 가상 메모리의 양(바이트)입니다. 커밋된 메모리는 디스크 페이징 파일을 디스크에 다시 써야 할 필요가 있을 경우를 위해 예약된 실제 메모리입니다. 각 실제 드라이브에 하나 이상의 페이징 파일이 있을 수 있습니다. 이 카운터는 최근에 관찰된 값만 표시하며 평균값은 아닙니다.

Memory: Pages Input/sec

페이지 부재를 해결하기 위해 페이징 파일에서 RAM으로 데이터 페이지를 쓰는 속도를 기록한다.

이 값은 하드 페이지 부재 오류(hard page fault)를 나타내는 것이기 때문에(얼마나 자주 디스크에서 데이터를 가지고 오는지 측정할 수 있는 좋은 방법이다.

Pages Input/sec는 하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 하드 페이지 폴트는 프로세스가 해당 작업 집합에 없거나 실제 메모리의 어딘가에 있는 가상 메모리의 페이지를 참조할 때 발생하며, 디스크에서 검색해야 합니다. 페이지 폴트가 발생하면 시스템이 연속된 여러 페이지를 메모리로 읽어 읽기 연산의 성능을 최대화합니다.

Memory: Pages Output/sec

RAM의 공간을 만들기 위해 데이터 페이지를 페이지 파일에 쓰는 속도를 기록한다.

서버가 평소보다 더 느리게 동작하는 것처럼 보이면 이 카운터를 모니터 한다. 이 값이 높으면 서버에 어플리케이션을 지원할 만큼의 충분한 메모리 공간이 없다는 것을 말한다.

Pages Output/sec는 실제 메모리의 공간을 비우기 위해 디스크에 다시 쓴 페이지의 비율입니다. 페이지는 실제 메모리에서 변경될 때만 디스크에 쓰므로 코드가 아닌 데이터를 갖고 있을 것입니다. 페이지 출력 비율이 높으면 메모리 부족을 의미할 수 있습니다. Windows에서는 실제 메모리가 적게 공급될 때 더 많은 페이지를 디스크에 써서 공간을 비웁니다. 이 카운터는 페이지 수를 표시하며 변환 없이 다른 페이지 수와 비교할 수 있습니다.

Memory: Pages/sec

하드 페이지 부재 오류를 해결하기 위해 페이지가 디스크에서 물리적인 메모리로 쓰여지거나 RAM의 빈 공간을 만들기 위해 디스크로 페이지를 옮겨 쓰는 속도를 기록한다.

값이 초당 20페이지가 넘어서면 페이징이 많다는 것을 의미하며, 서버에 더 많은 메모리가 필요하다는 의미이다.

Pages/sec는 하드 페이지 부재를 해결하기 위해 디스크에서 읽거나 디스크로 쓴 페이지의 비율입니다. 이 카운터는 시스템 전반적으로 지연을 일으키는 이러한 부재 오류의 주요 표시기입니다. 이것은 Memory\\Pages Input/sec과 Memory\\Pages Output/sec의 합입니다. 이것은 페이지 수로 계산되므로 Memory: Page Faults/sec 등과 같은 다른 페이지 수와 변환 없이 비교할 수 있습니다. 이것은 파일 시스템 캐시(일반적으로 응용 프로그램이 요청한) 및 비 캐시의 매핑된 메모리 파일에서 부재를 해결하기 위해 검색된 페이지를 포함합니다.

Paging File: % Usage

페이징 파일 사용량의 최대 크기를 기록한다.

이 값이 페이징 파일의 최대 크기에 가까이 가면 페이징 파일을 늘리거나 RAM을 추가해야 한다. 높은 수치는 페이징 파일이 모든 데이터를 포함할 만큼 충분히 크지 못하다는 의미이다.

사용하고 있는 Page File 인스턴스 양을 백분율로 표시한 것입니다. Process\\Page File Bytes 참조

Paging File: Usage Peak

페이징 파일 사용량의 최대 크기를 기록한다.

이 값이 페이징 파일의 최대 크기에 가까이 가면 페이징 파일을 늘리거나 RAM을 추가해야 한다. 높은 수치는 페이징 파일이 모든 데이터를 포함할 만큼 충분히 크지 못하다는 의미이다.

페이지 파일 인스턴스의 피크 사용을 백분율로 표시한 것입니다. Process\\Page File Bytes Peak 참조

Physical Disk: % Disk Time

디스크가 읽고 쓰는 요청을 처리하는데 사용되는 시간을 퍼센트로 기록한다.

이 값이 Memory: Page Read/sec이 늘어남과 동시에 함께 늘어난다면 페이징 파일이 많이 사용되고 있다는 의미이다. 페이징 파일이 위치한 물리적 디스크에 대해 이 값을 모니터 한다.

% Disk Time은 선택한 디스크 드라이브가 읽기 또는 쓰기 요청을 처리하는데 사용된 시간의 백분율입니다.

Physical Disk:

Avg Disk sec/Transfer

데이터를 디스크에 전송하는데 걸리는 시간을 기록한다.

페이징 파일이 위치한 물리적 디스크에 대해 이 값을 모니터 하면 디스크의 응답 시간을 확인할 수 있다. 이 정보를 이용해 더 빠른 디스크를 찾아 페이징 파일을 옮길 수 있다.

Avg. Disk Bytes/Transfer은 읽기 또는 쓰기 작업 동안 디스크로(또는 디스크에서) 전송되는 평균 바이트 수입니다

Process: Private Bytes

해당 프로세스가 사용하는 가상 메모리의 크기를 기록한다.

이 카운터는 하나의 프로세스가 사용하고 있는 메모리의 크기를 보여준다(모든 어플리케이션에 대한 유용한 정보이다). 특히 터미널 서버를 모니터하고 있는 경우 요청하는 어플리케이션을 클라이언트 쪽으로 옮기거나 전용 서버로 옮겨 다른 프로세스에 메모리가 부족하지 않게 한다.

Private Bytes는 이 프로세스가 할당하여 다른 프로세스와는 공유할 수 없는 메모리의 현재 크기(바이트)입니다.

Process: Working Set

프로세스가 데이터를 저장하기 위해 사용하는 RAM의 양을 기록한다. 작업 집합(working set)이 클수록 프로세스는 더 많은 메모리를 소비한다.

아무 작업을 하고 있지 않은데도 시간이 지나면서 작업 집합의 크기가 증가되면(예를 들면 1주일 동안) 해당 프로세스는 메모리 누수 현상을 일으키는 것일 수 있다.

Working Set는 이 프로세스에 대한 작업 집합의 현재 크기(바이트)입니다. 작업 집합은 프로세스의 스레드가 최근에 작업한 메모리 페이지의 집합입니다. 컴퓨터에 있는 빈 메모리가 한계를 초과하면 페이지는 사용 중이 아니라도 프로세스의 작업 집합에 남아 있습니다. 빈 메모리가 한계 미만이면 페이지는 작업 집합에서 지워집니다. 이 페이지가 필요하면 주 메모리에서 없어지기 전에 소프트 오류 처리되어 다시 작업 집합에 있게 됩니다.

[물리적 디스크 카운터]

Countor

설 명

의 미

Physical Disk: %Disk Time 물리적인 디스크가 사용되는 시간의 퍼센트를 기록한다. 이 값이 90퍼센트를 넘어서면 병목이다.(새로운 디스크를 이용하거나 사용량을 줄여 성능을 향상시킨다.)

Physical Disk: Current Disk Queue Length

지정된 물리적인 디스크(또는 선택한 모든 디스크)에 대기하고 있는 데이터 전송 작업의 현재 숫자를 기록한다. 이 값은 가능한 적어야 한다. 높은 값을 나타내면 디스크 대기 시간이 그만큼 늘어나 사용자들의 작업을 느리게 한다.

[네트워크 관련 카운터]

Countor

설 명

의 미

Server: Bytes Total/sec 서버가 네트워크 데이터를 송수신하는 속도를 기록한다. 초당 서버에서 송수신되는 총 바이트 수는 서버가 얼마나 바쁜지를 보여주는 좋은 지표가 된다. 서버에 걸려 있는 부하를 변경하기 위해 같은 종류의 서버를 추가하여 네트워크 부하를 분산시키는 것과 같이 어떤 작업을 하는 경우 작업의 성공 여부를 파악할 수 있다.

서버가 네트워크에서 주고 받은 바이트 수입니다.  이 값은 전반적인 서버의 사용 빈도를 나타냅니다.
Server: Files Open 측정시 열린 파일들의 숫자를 기록한다. 이 값은 주어진 시간 동안 열린 파일의 숫자의 합이 아니라 측정 순간의 총합을 나타낸다. 파일 서버에 걸려 있는 트래픽 부하를 보여준다. 하지만 사용자 단위 혹은 파일 단위로 볼 수는 없다.

현재 서버에서 열려있는 파일의 수입니다. 현재 서버의 동작을 나타냅니
Server: Pool Non-paged Failures 빈 페이지 풀은 페이징하는 과정에서 발생되는 오류의 숫자를 기록한다. 빈 페이지 풀은 호출이 되면 즉시 준비할 수 있게 하기 위해 디스크에 페이지될 수 없는 데이터의 가상 메모리 영역이다. 에러가 많이 발생하면 서버에 RAM을 늘려야 한다.

비페이지 풀에서 할당받지 못한 횟수입니다. 컴퓨터의 실제 메모리가 너무 작음을 나타냅니다.
Server: Server Sessions 서버에 대한 연결의 현재 숫자를 기록한다. 이 카운터는 서버가 얼마나 바쁜지를 보여주는 것은 아니지만 서버에 대한 연결이 얼마나 많은지 살펴볼 수 있다. 특히 누구도 액세스하지 말아야 하는 시간에 연결을 점검하는 용도로 사용될 수 있다.

현재 서버에서 활성화된 세션 수입니다. 현재 서버의 동작을 나타냅니다.
Network Interface: Bytes Total/sec

네트워크 카드가 네트워크 데이터를 송수신하는 속도를 기록한다.

속도가 네트워크와 네트워크 카드에 지정된 기대치에 너무 못 미치는 경우 카드가 제대로 동작하는지 검사해볼 수 있다.

Bytes Total/sec는 프레이밍 문자를 포함하여 각 네트워크 어댑터를 통해 보내고 받는 바이트의 비율입니다. Network Interface\\\\Bytes Received/sec은 Network Interface\\\\Bytes Received/sec와 Network Interface\\\\Bytes Sent/sec의 합입니다.

2009년 1월 23일 금요일

[Tools] Webalizer 소개

출 처 : 수퍼유저코리아(www.superuser.co.kr)
저작권 : 박성수(
papa@superuser.co.kr)
이 문서는 웹로그분석을 위해 가장 많이 사용되고 있는 webalizer를 리눅스에서의 사용 및 활용법에 관한 것입니다. 이 문서의 배포는 반드시 저작권의 명시와 함께 허용됩니다.

웹서버 특히 웹호스팅서버를 관리하는 일은 대부분 웹마스터나 서버관리자가 하게됩니다.

웹서버를 운영한다면 반드시 웹로그를 분석해야하는 일을 하게됩니다. 그 역할 또한 서버관리자가 하는 경우가 대부분입니다. 대개는 웹마스터가 서버관리를 겸하는 경우가 대부분이지만 필자가 여기서 설명드리고하는 경우는 단순한 웹로그분석이 아닌 여러 개의 웹사이트를 자동으로 분석하는 방법에 대한 것입니다. 공식적인 명칭은 아니지만 설명의 편의성을 위하여 동시에 여러 개의 웹로그파일을 자동으로 분석하는 방법을 필자는 “멀티웹로그분석”이라고 하겠습니다. 하나의 웹사이트가 아닌 여러 개의 웹사이트의 웹로그를 분석하는 일은 단순한 작업이 아닐 것입니다. 단순히 하나의 서버에 하나의 웹로그만 분석하는 일은 그렇게 어려운 작업은 아닙니다.

한대의 서버에 여러 개의 웹사이트를 운용하고 있다면 웹로그를 분석 할 때마다 모두 수작업을 한다면 시간과 작업량에 있어서 여간 힘든일이 아닐 것입니다.

필자가 서버관리라는 관점에서 웹로그분석법을 다루고자 하는 것은 단순한 웹로그분석법만을 다루고자하는 것이 아니라 여러 개의 웹사이트를 주기적으로 자동분석되게 하는 방법에 대한 내용을 다루고자 하는 것입니다.

앞에서도 누차 강조드린 바와 같이 서버관리자는 주기적이고 단순 반복적인 작업들은 자동화, 단순화 시켜나가면서 서버관리업무를 체계화 시켜나가야합니다.

이번에 설명드릴 webalizer를 통한 웹로그분석 또한 이런 관점에서 단순한 웹로그분석 방법 보다는 많은 웹사이트의 웹로그를 각각 자동분석되게 하여 그 결과 또한 사이트별로 각각 확인할 수 있도록 하는 방법을 제시할 것입니다.

참고로 이번절 뒤에는 accesswatch라는 웹로그분석 프로그램을 이용한 웹로그 자동분석법에 대한 설명을 합니다. Webalizer와 accesswatch를 비교분석해 보시는 것도 좋은 방법이 될 수 있을 것 같습니다.

자, 그럼 webalizer의 웹로그분석법에 대한 설명을 시작해 보겠습니다.

1. Webalizer의 소개와 특징

우선, webalizer의 특징에 대해서 간단히 설명드리면 다음과 같습니다.

- C언어로 개발되었기 때문에 실행속도가 굉장히 빠릅니다.
(참고, 이번 절 뒤에 설명되는 accesswatch는 Perl로 개발되었으며,

webalizer에 비해서는 그 속도가 현저하게 떨어집니다. _

- 특히, 한국어를 지원한다는 점에 굉장한 매력이 있습니다.

- webalizer는 C로 개발되었지만 그 소스를 공개하고 있습니다.

- 분석대상이 되는 소스파일의 크기에 제한이 없습니다.

그리고 webalizer를 다운받을 수 있는 곳은 다음과 같습니다.

-http://ftp.superuser.co.kr/pub/weblog/webalizer/

-http://www.webalizer.com

FLV 플레이어

FLV 플레이어  역시나 무료..^^

http://www.longtailvideo.com/

[Tools] 무료 Hex editor

http://mh-nexus.de/en/hxd/

무료 역쉬 좋다.. 울트라 에디트를 못쓰니.. 이거라도 써야지..에고..

HxDShotLarge

[대항해시대]초보코스

대항해시대가 무료선언 이제 다시 대항해시대로 Gogo 해야겠다..
역쉬.. 이제야 게임을 다시 할수있겠다..^^

초보 런던-> 도버로 서양갑옷,대포의 시세가 110%이하일
도버-> 런던으로 어육이 150두캇 이하

런던 도버 방향을 바꾸지말고 직진 그러면 도버 바로 옆에 있는 돌벽에 부딪힐정도에 도버를 클릭 하면 입항가능

에딘->오슬로 쇠고기,소의 시세가 120%이하
오슬로-> 에딘으로 목재,석재,아마,소금

에딘에서 나오자마자 직진 오슬로 가는 해협으로

%25C1%25DF%25BC%25BC%25B9%25AB%25B1%25E2-codein6 낚시를 올리고자 하는 분들은 원하는 물고기가 잡히는 지역에 배를 세우는데 그 전에 선원을 모두 해고하고 1명만 남겨놓고 물빵 열덩이 넣어 놓고 낚시를 시켜 놓으면 됩니다. 그럼 행동력 다빠질때까지 굶어 죽진 않고요. 항구에서 너무 멀리 가시면 폭풍우에 떠내려가서 작살날 위험이 있으니 돈은 은행에 꼭 넣어 두시고요. 폭풍에 피해를 줄이려면 닻을 아예 내려 두시면 좋습니다.

낚시로 낚은 물고기들은 보관을 배우셔서 어육 만들어 팔면 짭짤합니다. 원하는무역 루트를 하도 돌아서 최소량만 팔고, 가격은 형편없고 할 때는 이렇게 웹싸이트 보며 낚시 스클일 올려 주시는 것도 좋습니다.

조타, 회계, 돛조정이
세 스킬은 누구에게 배우는 스킬이 아니라, 조타는 군인, 회계는 상인, 돛조정은 모험가로 전직을 해야 배울 수 있습니다.
전직하시면 해당 조합장이 갈쳐줍니다. 이 세가지는 거의 지우지 않는 스킬들이고요.

그밖에 배워두면 좋은 스킬들이, 운용, 경계는 거의 필수라고 보시면 되고요.
낚시, 조달, 보관도 굉장히 유용합니다.
운용은 물, 빵을 선원들에게 적게 주는 스킬, 물빵이 차지하는 공간을 줄여서 거기에 보석 하나, 금 한 뎅이라도 더 싣자 이런 취집죠.

경계는 해적으로부터 강습을 덜 당하게 하는 효과가 있습니다. 배워두시면 역시나 피가되고 살이되는 스킬입니다요~

낚시는 음식, 조달은 물(비올때,)과 음식(열매 딸 수 있어요.)이 없을 때 쓸수 있고요. 보관은 물고기를 어육으로 만들 수도 있고, 해적에게 털렸을 때 돈과 물건들을 덜 빼앗기게 하는 효과가 있습니다. 나는 절대 안당하지롱!!! 하시는 분들 아니면 보관도 배워두시면 좋습니다.



01047083_1 모험가로 중급학교를 마치니 - 모험가, 상인, 군인 세 장의 전직중을 주더군요. 두번째로 상인으로 중핵교를 마쳤더니, 모험가 상인 전직증을 또 주는겁니다. 아마도 군인으로 중급학교를 마치면 역시나 군인+1 전직중을 줄꺼라고봅니다.
전직증은 중학교 졸업 시험과 함께주는데요. 그때 보면 졸업시험 퀘스트 사이사이 전직 퀘스트가 섞여 있습니다. 그걸 하시면 전직증을 줍니다. 다만 학교 퀘스트이므로 공유는 안되고요..

만약 모험가로 중학교까지 졸업하셨다면 상인으로 다시 하실 경우 초등학교는 3회정도 퀘스트만에 졸업이 되고요, 중학교도 3~5회 사이에서 졸업이 될겁니다. 즉 아주 빠르게 졸업이 가능하고 금방 전직증을 얻을 수 있다는 얘기지요. 잡다하고 반복적인 퀘스트는 전부 넘어가더군요.


1_wsl5569 기본적으로 음식이 채워주는 행동력이 25 이하인걸로 먹고, 음료수는 우유로 먹으면 거의 무한이더군요.
우유대신 술로 하다가 취하면 우유로 바꿔서 먹어도 되고 -_-
그리고 주점에서 행동력의 90% 이하로만 채우시구요. 한 200쯤 된다 싶으면 170~180 정도까지만 채우세요.
젠장 이걸 몰라서 돈도 없는데 해물 피자 사다 쓴거 생각하니 눈물이 흐른다..
저처럼 처음 시작하신 분들 행동력 채울때 음식은 꼭 25 이하, 행동력 90%까지만 채운다는거 잊지 마세요.

모험가로 시작하여 모험가로 끝을 맷겠다는 로망을 가진 모험가들을 위한 선박
아시는 분은 다 아시다시피 전투렙 1 까지는 경계스킬 만 쓰고 다니면 몹들이건드리지를 않습니다. (기습, 강습 전혀 없음)따라서 최대한 빠른 배를 타되 이렇게 조정이 가능합니다.
첫 모험가로서의 배입니다.모험용바사(1/0/0) -> 베르간틴(5/3/0) ->푸카(7/3/0)(특징:북해산) -> 소형카락(12/6/0)
이 다음부터 배가 대폭 빨라집니다. (조인트빌드 함선이라 비싼점이 흠입니다.)수송용슬루프(10/17/0) -> 상업용스쿠너(12/24/0) -> 스쿠너(24/12/0)여기 까지는 군렙 1을 유지하며(조타를 배우기 위해 1은 필요합니다.)편하게 모험을 하실수 있습니다.
경클리퍼(32/0/15) -> 대형스쿠너(45/24/16) -> 클리퍼 (52/16/8) ->대형클리퍼(64/24/12)여기가 모험용 배의 종착역 입니다.
즉 초중반까지 편하게 모험 하실려면 전투렙 1 은 너무 소중합니다...

팁과 노하우 게시판에 Ouka님이 올려주신 팁입니다. * 발견물 보고 우대 npc에 대해서 종류별로 잘 정리해주셨네요.* npc이름의 표기가 일본식을 따라 차이가 있을 수 있으니 참고하시기 바랍니다.
발견물 보고시 우대해주는 NPC와 그 지역을 적어봅니다자료는 http://apollo.versus.jp/gvo/에서 가져왔으며일본의 데이터를 기준으로 한 것이기에 국내에서는 구현되지 않은 인물이 있을수 있으며표기상의 차이도 있을수 있으니 주의하시기 바랍니다 항구, 도시 발견
(런던) 다켓길드 사무소 / (리스본) 디아스 제독 / (세비야) 파르네제 공작 / (제노바) 트라젯 후작부인 / (튀니스) 레오 아프리카누스 / (무스카트) 알 가우리
해역 발견
(암스테르담) 메르카토르 / (리스본왕궁) 브라간사 공작 / (제노바왕궁) 쟝 프레고조 / (피사) 갈릴레오 갈릴레이 / (소팔라) 알리 베이 / (캘리컷) 대상인 쿠자라트
역사유물
(암스테르담왕궁) 루벤스 / (함부르크) 마르틴 루터 / (베네치아) 샤일록 은행장 / (이스탄불) 롯사나 / (캘리컷왕궁) 시장 바이레
종교유물
(암스테르담) 에라스무스 / (런던왕궁) 서섹스 백작 / (세비야왕궁) 산타크루즈 공작 / (리스본) 운징가 운벵바 / (이스탄불) 카레 메프메토 / (라구사) 베론카 프랑코
미술품
(앤트워프) 마리아 왕비 / (런던) 세익스피어 / (세비야) 엘 그레코 / (마르세이유) 프랑소와 라브레 / (베네치아) 미켈란젤로
보물
(낭트) 마르그리트 공주 / (암스테르담) 거상 피켈 / (뤼벡) 뒤라 / (세비야왕궁) 타베라 추기경 / (마르세이유왕궁) 기스 공작 / (튀니스왕궁) 무라이 핫산 / (잔지바르) 원로 마지드
화석
(마르세이유) 노스트라다무스 / (베네치아) 파라켈수스 / (알렉산드리아) 메프메토 샤르크 / (튀니스) 히살 레이스
식물
(암스테르담왕궁) 발네펠트 의장 / (포르투) 두알테 로페스 / (나폴리) 토마스 캄파넬라 / (시라쿠사) 제임 왕자
곤충류
(나폴리왕궁) 국왕 페데리코 / (베이루트) 하일 베이
조류
(세비야) 토메 피레스 / (마르세이유) 콘데 공작 / (베네치아왕궁) 죠르죠네 / (카이로) 칸사우프
소형생물
(보르도) 발레 / (칼레) 베리 여공작 쟌느 / (런던왕궁) 레스터 백작 / (리스본) 발디 은행장 / (아테네) 라 발렛테
중형생물
(런던) 죤 디 / (발렌시아) 베사리우스 / (알렉산드리아왕궁) 츄먼 베이 / (호르무즈) 알리 레이스
대형생물
(마르세이유) 다빈치 / (마르세이유) 몽모라시 대원수 / (아테네기사단) 리라단 기사단장 / (트리폴리) 시난 파샤 / (캘리컷) 마리칼
해양생물
(바르셀로나) 루이스 데레온 / (나폴리) 악사 제즈아르트 / (베네치아왕궁) 모체니고 궁내부장관 / (아테네) 기사 마르티넨고 / (이스탄불왕궁) 이브라힘 / (아덴) 왼손잡이 아마드 / (모잠비크) 코리탄


* 팁과 노하우 게시판에 누노고메즈님께서 올려주신 팁입니다. * 초반 조리에 대해서 잘 정리해주셨네요. * 조리를 시작한 분들께 도움이 됐으면 좋겠습니다.

안녕하세요. 아레스섭 측량기사 누노고메즈입니다.모험가에게 필요한 초반의 [조리]에 대해서 알려드립니다.

▶ 모험가가 조리를 하는 목적은 행동력회복 아이템(음식)을 자력으로 확보하는 것입니다.
모험가는 상인이 아니므로 돈을 벌기위해 조리에 매달릴 필요는 없습니다.차라리 조리상인들에게 행동력을 회복하는 음식을 사는 것이 차라리 낫습니다.물론 그외에 조리는 어느정도의 노력으로 돈도 벌 수 있고, 교역경험치도 얻을 수는 있습니다.하지만 이런 것은 모험가에겐 부수입정도라고 생각하시면 되겠습니다.

▶ 음식이란?
음식은 행동력만 회복하는 것/행동력과 피로도를 회복하는 것/행동력과 괴혈병을 치료하는 것 등이 있습니다.높은 조리스킬 레벨이 요구되는 음식일수록 회복되는 행동력량도 늘어납니다.장거리 여행을 할때는 꼭 행동력회복 음식과 피로도회복은 필수입니다. 또 항해중에 나타나는 선원들의 영양부족을 해결해줍니다. 하지만 각 음식은 최대 200개까지만 소지할 수 있습니다.대표적인 음식으로는 [바겔/비스킷(+10)],[아몬드비스킷(+15)],[누에콩파스타(+20)][해물피자(50이상)]등이 있습니다.

▶ 조리는 어떻게 배우는가?
조리스킬은 원래 상인들이 배우는 스킬입니다. 따라서 이 스킬을 배우기위해서는 교역레벨 3이 필요합니다.그 다음에 포르투칼/에스파냐분들은 세비야 상인조합마스터에게, 영국분들은 암스테르담 상인조합마스터에게 스킬을 배울 수 있습니다. 그리고 조리스킬을 배우는데는 10,000두캇이 듭니다.

▶ 조리레벨은 어떻게 올리는가?
일단 각종 공방/도구점등에서 살 수 있는 레시피(요리책)는 대게 조리렙 5-6정도가 끝입니다.그 다음의 레시피는 투자를 통하여 얻거나, 투자랭커가 되어 얻거나 해야합니다.일단 초반의 모험가들은 +30정도까지의 음식들은 직접 해드실 수 있을 것입니다만,그 이상의 음식(특히, [해물피자]같은 조리 10렙의 음식)등은 그냥 사드시는 것이 나을 것 같습니다.
조리를 시작하시려고 하는 분이라면, 일단 몇가지 레시피를 먼저 구해두신후 한번에 올리시길 부탁드립니다.그렇지않는다면 아무래도 시간을 허비하게 되는 일이 많습니다.따라서 아래에 나오는 레시피들은 꼭 구해두시길 바랍니다.그리고 일단 어느정도 적재량을 갖춘 배는 필수입니다. 적어도 소형캐러벨정도를 갖출 것을 부탁드립니다.
한편, 조리의 경험치는 보통 조리레벨과 같은 레벨의 음식을 만들어야 경험치를 많이 준답니다.따라서 되도록 조리레벨에 맞는 조리를 하시는 것이 낫습니다. 물론 요리재료만드는 건 상관없지만.

▷ 1레벨에서 2레벨까지는 밀가루 만들기
포르투칼/에스파냐분들은 팔마, 영국분들은 보르도의 도구점에서 [누구라도할수있는간단식단]을 구합니다.그다음 각각 세비야/ 앤트워프에서 밀을 대량으로 삽니다.아마 배가 적재량이 그리 많지않아서 대량으로 사도 배에 싣기 힘들거에요.욕심부리지마시고 밀을 한 60-70%정도만 채우세요.
그런 다음 주점에서 행동력을 채우시면서, [누구라도...]의 [제분법]으로 밀을 모두 밀가루로 전환한다음 다 파세요-_-어차피 밀가루가 2-3개정도가 만들어지기때문에 바로 파셔도 돈이 남습니다. 그냥 바로 파세요.주점음식의 경우 배가 부르지않도록 60%정도 행동력을 회복한뒤 밀가루를 생산하고, 다시 음식을 드시면 계속 생산이 가능합니다. 배가 부르면 일단 행동력은 다 소모하고서 출항했다 다시 들어오면 또 음식을 먹을 수 있습니다.따라서 되도록이면 주점보다 각 대도시의 광장에있는 식당주인(대게는 근처에 항구관리가 있음)을 이용하시기를 바랍니다.일단 항구와 음식점을 왕복하는 시간이 줄어듭니다.
그리고 밀을 더이상 살 수 없다면 포르투칼/에스파냐분들은 파루로, 영국분들은 헤르데르로 각각 들르신뒤 달걀을 사서 다시 밀을 사는 곳으로 돌아오신뒤 또 밀가루를 생산해서 팝니다.달걀을 사서 적재량의 압박을 느끼시면, 그냥 어디 퀘스트하나 하고 돌아오신뒤 밀을 사시면됩니다.

▷ 2레벨에서 3레벨까지는 바겔/비스킷 만들기
밀가루제분만으로 3레벨까지도 올릴 수는 있습니다만, 행동력회복 음식도 필요하기때문에 2레벨때는 다른 요리를 하겠습니다. 포르투칼/에스파냐분은 피사에서 [처음굽는빵]을, 영국분은 암스테르담에서 [과자-초급]라는 레시피를 삽니다.
그리고 각각 파루/헤르데르에서 사모은 달걀을 이용해서 [둥글고딱딱한빵(바겔)]/[비스킷]을 만들기 시작합니다.바겔/비스킷은 행동력+10의 음식입니다. 이러한 음식을 만들면 적재량에서 빠져 개인소지창으로 들어간답니다. 이렇게 3레벨까지 올립니다.
칼비에서 [축산비법-새]를 구하신 분이라면 리스본의 닭에서 달걀을 얻을 수도 있습니다.

▷ 3레벨에서 4레벨까지는 돼지고기/라드 만들기
3레벨이 되면 포르투칼/에스파냐분들은 포르투에서 [축산비법서-돼지]를 이용해 돼지고기/라드를 만듭니다.돼지는 파루에서 구할 수 있으며 돼지 -> 돼지고기 -> 라드 순으로 생산됩니다.라드의 경우 대량으로 모아서 팔면 순이익이 크기때문에 교역경험치를 쌓는데도 도움이 됩니다.
3레벨이 되면 영국분들은 조금 난감합니다만, 되도록이면 북대서양의 입항허가를 받기길 부탁드립니다.[축산-돼지]는 조리의 기본이기때문에 필수적으로 구하셔야 됩니다.
돼지는 조리레벨 올리기 위해 하는 것일뿐이고, 행동력회복 음식을 만드시는 경우는 [아몬드비스킷]을 만드셔야 됩니다.그런데 이것을 만들기 위해서는 포르투칼/에스파냐 분들은 북해입항허가를 받아야 북해 암스테르담에서 [과자-초급]을 구할 수 있습니다. 마찮가지로 영국분들은 아몬드를 북대서양의 리스본에서 구할 수 있기때문에 리스본으로 내려오셔야 합니다.
[아몬드비스킷]은 행동력 +15짜리 음식이구요. 달걀+밀가루+아몬드가 필요합니다.세비야-파루-리스본-포르투 코스는 돼지/달걀/밀/아몬드를 다 구할 수 있습니다.

▷ 4레벨에서 5레벨까지는 파스타/베이컨 만들기
4레벨이 되면 [축산-돼지]에서 돼지고기를 이용해 베이컨(훈제)을 만들수 있습니다.돼지고기를 대량으로 구해서 한번에 경험치를 쫘악 올려주시면 감사하겠습니다.
이외에 동지중해에 입항가능하시면 베네치아에서 [파스타의기본]을 구하실 수 있는데,파스타는 밀 -> 밀가루 -> 파스타 순으로 생산되며, 파스타 1개당 식량4로 전환할 수 있기때문에,장거리여행을 하는 여행자들에게 식량적재량을 줄여주는 식량대용으로서 매우 인기가 높습니다.(다만.... 밀에서 파스타까지 가는데... 마우스클릭에 압박이 쬐금 심합니다ㅋㅋ)
4레벨에서 만들수 있는 행동력음식으로는 저렴한 것이 [간편영양콩요리]의 [누에콩수프(+20)]가 있습니다.돼지고기+누에콩으로 만드는데, 일단 알려진 코스는 리스본(돼지고기)-카사블랑카(누에콩)가 되겠습니다.그런데 각 서버의 투자상황에 따라 누에콩이 판매되는 곳이 더 있을 수 있기때문에, 잘 살펴보시기 바랍니다.(현재 아레스섭에선 간디아(돼지고기)-알렉산드리아(누에콩) 코스에서도 쉽게 생산할 수 있습니다.)

▷ 5레벨에서 6레벨까지는 햄 만들기
5레벨이 되면 [축산-돼지]에서 돼지고기를 이용해 햄을 만들수 있습니다. 소시지도 가능합니다.
문제는 이제 행동력회복 음식의 재료확보가 어렵다는 것입니다.저 같은 경우는 [낚시]스킬이 있어서 [북해어패류요리]의 대구찜/[선원어패류요리]의 넙치찜등의 요리가 가능합니다.이 요리는 혀가자미와 대구 등의 생선이 필요하며, 대게 북해에서 잡힙니다. 여기에 보르도의 와인가 더불어 요리됩니다.
그 외에 [고기요리의 기초]에서 [닭고기로스트]를 만들 수 있습니다. 이 요리는 북해에서 재료구하기가 쉽습니다.헤르데르(닭고기/소금)-런던(버터)정도의 코스가 이동거리는 짧습니다.이때 소금의 경우가 구매가 좀 어려운데, 뤼베크라는 곳이 좀 멀지만 소금을 대량으로 구할 수 있습니다.보통 상인들은 버터도 만들어서 하시지만, 모험가분들이 간식으로 쓰시기엔 되도록 이동거리가 짧으신 편이 낫지 싶습니다.

먼저 초중반이라고 하기엔 너무 많은 시간이 지났지만아직 오베이고 또 신규 유저들도 많을거란 생각에본인도 아직 중수임에도!! 건방지게 가이드 올려봅니다^^;;1. 자급자족일단 모험가의 특성상 부가아이템을 얻을수 있는 퀘나 지도가 많습니다.예를 들어 초반에 시트파 수도의나 여러 보물지도에서 나오는 녹슨 숏소드라던지내구 낮은 고고학이나 종교학 부스터 등은 초반에서 살짝만 지나도 쉽게 얻을 수 있는 아이템들입니다. 그러니까 초반에 굳이 아이템을 맞추지 않아도 (물론 돈이 많을 경우엔 사셔도 좋습니다만 어차피 명성제약에 걸릴수도 있고) 충분히 플레이가 가능하니 모험가 특성상 초반에 자금이 딸리므로 그냥 하시면서 맞추는게 좋습니다(밑에 2.3번을 따라 가실분은 굳이 이러시지 않아도 좋습니다)2. 전직은 미리해라!자물랭이나 기타 우대스킬 정말 올리기 어렵습니다. 그런 우대스킬을 이미 가진 상태에서 타 직업의 스킬을 배우기 위해 전직을 하게 되면 정말 많이 깎입니다 ㅡㅜ 또한 삼부크를 타기 위해선 22/16/16을 맞춰야 하므로 어차피 전투렙과 상인렙이 필요합니다.고로 추천 전직 코스는 상인-군인-낚시꾼-발굴가 순으로 하시는것이 좋습니다.3. 발굴가가 되기전에 해야할 것들위에서 말씀드린것을 좀더 구체적으로 파보겠습니다. 일단 시작 캐릭을 상인으로 하셔서 교역렙을 올리시면서 돈을 모읍니다. 이때 굳이 상인렙 16렙을 맞출 필요 없이 군인 전직할 명성만 모으시면 바로 전직을 합니다. (상인렙 16은 나중에 퀘스트란에서 설명) 이 때 필요한 상인 스킬(필수:회계 / 선택:조리,사교등) 몇가지는 남겨둡니다.그리고 16렙이 될때까지 군인 노릇을 합니다...(제노바 뺑퀘 추천) 16렙이 되셨으면 낚시꾼으로 전직을 합니다. (추천스킬:포술, 수리, 검술, 조타) 낚시꾼이 된뒤 돛조정만 배우시고 (낚시는 남기셔도 좋고 안남기셔도 좋습니다) 이제 꿈에 그리던 발굴가로 전직을 합니다!이렇게 시작하시게 되면 일단 자금란에 압박에서 벗어나게 되고 또한 기본 명성이 높아져서 아템 선택에 부담이 없어지고 또 작위도 한두개 받았을 것이므로 모험가의 인벤 압박에서 조금이나마 벗어날 수 있게 됩니다4. 본격적인 활동! 지도와 퀘스트모험가의 꽃은 지도고 모험가의 뿌리는 퀘스트입니다. 이 2가지는 항상 동시에 시행되어야지 따로따로 찾으려면... 너무 귀찮습니다ㅡㅡ; 지도를 찾으셨으면 퀘를 받으실 때 최대한 그 지도의 동선에 맞게 받으시는게 좋습니다!!ex) 더블린 지도가 있으면 퀘도 더블린 쪽으로 아니면 최소한 플리머스 까지라도!!명성이 쌓이다 보면 해역도 넓어지는 데요 그렇게 될 경우 동선이 점점 길어집니다. 그러므로 각 해역 근처의 지도와 퀘를 해치우면서 내려갔다가 올라오는게 좋습니다.ex)런던에서 리스본 가는퀘를 받고 칼레와 보르도에서 지도를 찾고 리스본 도착해서 퀘깨고 보고하고 나폴리 가는퀘를 받아서 제노바에서 지도찾고 나폴리에서 퀘깨고 보고하고 아테네 가는 퀘를 받아서아테네에서 지도찾고 퀘깨고 보고하고.....5. 상인렙은 어떻게 올리지?군인렙은 16렙을 맞춰놨지만 상인렙은 살짝 힘들죠. 모험가 동선에 맞추는 것도 힘든데 거기에 무역루트에 맞게 동선을 짜다보면... 에혀... 그래서 준비했습니다!!1) 소규모 교역회계를 이용해서 각각의 시세를 본 뒤 쌀 때 사고 비싼곳에 판다!!... 대책없는 말이지만 정답이 아닐까요?^^; (소규모 교역은 순이익 만원선에서 파셔야지 겸치를 얻을 수 있습니다)2) 퀘스트를 받자일단 모험가 퀘를 깨고 주점에 보고한뒤 먼저 해야할 일은 모험가 퀘를 받는것이 아니라 상인퀘를 받는 것입니다! 상인퀘중에 그 도시내에 누군가가 멀 구해다 달라고 하는퀘가 있습니다. 자신이 가지고 있는 물품중에서 퀘스트에 부합하는 물품이 있으면 그퀘를 먼저 선행하시고 모험가 퀘를 받으시면 됩니다3) 부가 교역품을 모으자지도의 발견물 중에서는 부가 교역품을 주는 지도가 상당히 많습니다. 그런 교역품들은 대부분 고가인데다 구입단가가 0원!이기 때문에 판매가격=순이익 입니다. 고로 이것들을 순이익 10만이 될때까지 모아다가 파시면 만원대보다 4,5배의 겸치를 얻을 수 있습니다. 6. 어떤 퀘스트가 좋지?일단 저는 모험가의 로망은 미지의 탐험이라고 생각하기에 어떤 퀘스트가 검이 나오고 갑옷이 나오고 어떤 뺑이가 좋다더라 하는건 말하지 않겠습니다. 그런건 굳이 제가 하지 않아도 잘 정리도 되어있고 말이죠.. 일단 제가 선택하는 퀘스트의 조건을 말씀드리자면
1. 지도의 동선에 있는가2. 종교 유적, 또는 사적인가?(인식은 올리기도 힘들뿐더러 사적이나 유적을 찾으면 그 지역에 지도가 나오므로 여러모로 좋다)3. 자물랭이 있는가? (뺑이 안하는 필자로서는 자물랭 있는 퀘는 일단 하고 보는 식이다)4. 처음 보는 퀘인가? (처음 하는 퀘가 랭이 낮아도 겸치및 명성이 더 높고 다시 한번 얘기하지만 모험가의 로망은 미지의 탐험이므로)

2009년 1월 20일 화요일

centos 5.0 apm source install

centos 5.0 apm source install
## yum 을 통한 라이브러리 설치
yum install gcc
yum install gcc-c++
yum install termcap
yum install libtermcap
yum install libtermcap-devel
yum install gdbm-devel
yum install zlib*
yum install libxml*
yum install freetype*
yum install libpng*
yum install libjpeg*
## MySQL 5.0.X  소스 컴파일
[shell]# ./configure --prefix=/usr/local/mysql-5.0.x --localstatedir=/usr/local/mysql/data --without-readline --with-charset=euckr --enable-thread-safe-client
* mysqli 옵션을 사용하기위해서 --enable-thread-safe-client 옵션을 추가
[shell]# make
[shell]# make install
## Apache 2.2.X 소스 컴파일
[shell]# ./configure --prefix=/usr/local/apache-2.2.6 --enable-proxy --enable-rewrite --enable-so --enable-speling --enable-ssl --enable-vhos
t-alias --with-mpm=worker --enable-mods-shared=all
[shell]# make
[shell]# make install
## Php 5.1.X 소스 컴파일
[shell]# ./configure --prefix=/usr/local/php_5.1.6 --with-apxs2=/usr/local/apache/bin/apxs --with-zlib-dir --with-gd --with-ttf --with-png-dir --with-gmp --with-libxml-dir=/usr/lib --with-xsl  --disable-debug --disable-rpath --with-iconv --enable-safe-mode --enable-magic-quotes --enable-bcmath --enable-gd-native-ttf --enable-sysvsem --enable-sysvshm --enable-wddx --with-pic --enable-inline-optimization --enable-mbstring --enable-ftp --disable-debug --with-jpeg-dir --with-freetype-dir --enable-gd-native-ttf --enable-exif --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-sockets --enable-sigchild --with-oci8=instantclient,/usr/lib/oracle
*  --enable-sigchild 와 --with-oci8=instantclient,/usr/lib/oracle 옵션은 오라클 클라이언트를 사용하기위한 옵션 이므로 오라클 클라이언트를 사용하지 않는다면, 사용할 필요가 없다.
* mysql5와 php5에서만 제공 되어지는 mysqli 를 사용하기위해서는 --with-mysqli=/usr/local/mysql/bin/mysql_config 옵션을 주어야 한다.  
[shell]#make
[shell]#make install
Ps. apache를 실행을 하면 apache error_log 에
/usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
위와 같은 에러 메세지가 뜨는데, 이것은 CentOS5의 SELinux 에서  denied 되어진 것으로
[shell]#vi /etc/sysconfig/selinux
SELINUX=enforcing 를 SELINUX=disabled 로 수정
[shell]#reboot

[출처] CentOS 5 에서 APM 설치 하기 (플래시 카페 (Flash,액션,소스,강좌,포토샵,PHP,자바스크립트)) |작성자 원더걸스

Centos 기반 APM 설치하기.

Linux. APM설치. MySQL설치하기

1. 목표. Centos를 기반으로 Aphache, PHP, MySQL을 설치한다.

2. 사용할 소프트웨어

aphache. php, mysql

3. 각각의 소프트웨어에 대한 획득.

가. 구버전 제거

#yum remove httpd php mysql -y

나. 라이브러리 및 컴파일소스의 획득.

APM을 설치하기 위해 필요한 컴파일 소스 및 라이브러리를 획득하자.

#yum install gcc* cpp* compat* flex* -y

#yum install *devel *lib libjepg* libpng* freetype* gd* -y

다. 설치할 자리를 마련한다.

#mkdir /usr/local/src/APM /* 이제 APM 압축프로그램을 새로 만든 APM 폴더 아래에 받아두려한다 */

#cd /usr/local/src/APM

APM]#wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.67.tar.gz/from/ftp://mysql.byungsoo.net/pub/mysql/

APM]#wget http://mirror.apache-kr.org/httpd/httpd-2.2.9.tar.gz

APM]#wget http://www.php.net/get/php-5.2.6.tar.gz/from/a/mirror

-> mysql, 데몬, http 데몬, php 를 받아서 APM폴더에 놓는다.

-> 기존의 ftp서버도 가동 중이니, vmware에 설치할 수 있도록 ftp 서버를 통해 압축파일을 옮길수도 있다.

4. MySQL 설치 시작.

가. 압축 풀기

APM]#tar -zxvf mysql-5.0.67.tar.gz

APM]#cd ./mysql-5.0.67/

나. 이제 컴파일을 시작하자.

#mkdir /usr/local/server/mysql /* 설치될 폴더를 만들어준다. */

#./configure --prefix=/usr/local/server/mysql --with-client-Idflags=-all-static \

--with-mysqld-Idflags=-all-static --with-charset=euc_kr \

--without-debug --enable-assembler --with-mysqld-user=mysql

다. 컴파일 중 오류발생...

a. --without-debug 항목에서 오타발생> 오타 수정
b. --with-charset=euc_kr 항목에서 euc_kr 이라는 문자셋이 없다는 오류메세지를 출력하며

몇 가지 가능한 문자셋을 예로 들어주는데, 그 중에 euckr로 변경해주었다. -> 우리말을 지원하기를 기대하며

나중에 들으니 utf8 문자셋을 써도 상관이 없다고 했다.

c. 그리고 오류 수정 중에 마지막에

--with-extra-charsets=all 항목도 추가했다.

==> 다시 작동시키니, 이번엔 제대로 성공했다..

라. 구성체 작성 시작

# make && make install

-> 오류발생.. 컴파일러 라이브러리 중 일부가 없어서, rpm 체크를 완료할 수 없었다.

-> 어쩔 수 없이 yum 을 다시 사용했다. 너무 많은 것을 같은 문장에서 받아서 그럴까? 이번엔 좀 나눠서..

혹시 모르니 컴파일러들 부터 모아서 다시 받자.

# yum install gcc* cpp* compat-gcc* flex* -y

#rpm -qa libjpeg* libpng* freetype* gd* /* 라이브러리들이 제대로 설치되었는지 확인 */

마. 다시 컴파일을 시작해도 이상하다.

이번엔 xen 등등이 제대도 갖추어지지 않았다고 한다.

#yum install xen* -y

바. 아예 컨피그를 재 실행시켜주었다.

#./configure .......................... /* 좋다. 성공 */

#make && make install /* 자 이번엔 마무리 ... 인스톨이다..*/

-> 제대로 성공했다..

5. MySQL 환경을 설정해주자.

환경 설정 예시 파일을 자신의 경우에 맞는 것을 불러와서 /etc/ 아래에 my.cnf 이름으로 복사해준다.

원본 파일은 /usr/local/src/mysql-5.0.67/support-files 폴더에 있다.

가. vmware에 구성한 경우에 램이 256 메가 바이트 이므로,

사용할 화일은 my-medium.cnf 이다.

나. 집의 컴퓨터 경우는 램이 2기가바이트 이므로, my-huge.cnf 를 사용한다.

#cp /usr/local/src/mysql-5.0.67/support-files/my-medium.cnf /etc/my.cnf

다. 기본 데이타베이스 생성.

#/usr/local/server/mysql/bin/mysql_install_db --user=mysql

/* db와 --사이는 띄워줘야 한다... 실수한 경험. */

/* 집에서 동일한 작업을 하다가 --user-mysql 이라고 적어서 기본데이터베이스가 작동되지 않았다..*/

라. 그룹과 소유를 지정해 준다.

#chown -R root /usr/local/server/mysql

#chown -R mysql /usr/local/server/mysql/var

#chgrp -R mysql /usr/local/server/mysql

마. 환경 변수 등록.

a. mysql deamon의 경로 설정. vi editor 사용

#vi ~/.bash_profile

-> PATH=$PATH:$HOME/bin:/usr/local/server/mysql/bin 추가..

b. 라이브러리들을 등록

#vi /etc/ld.so.conf

->/usr/local/server/mysql/lib/mysql 추가

#ldconfig 실행

6. 부팅과 함께 MySQL이 작동하도록 자동실행 설정

가. 시작 폴더에 mysql 데몬을 복사해서 넣는다.

#cp /usr/local/server/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld /* 원본을 mysqld 이름으로 복사 */

나. 데몬을 실행할 수 있는 퍼미션으로 변경.

#cd /etc/rc.d/init.d

init.d]#chmod 755 mysqld

다. 실행.

init.d]#/etc/rc.d/init.d/mysqld start

->starting MySQL [OK] /* 좋아. 실행되는군. */

라. 실행옵션 설정. 런레벨 설정

init.d]#chkconfig --level 2345 mysql on

init.d]#chkconfig --list grep mysqld >>>>2.3.4.5 레벨 활성화 확인

마. 재구동

init.d]#./mysqld restart

Dependency Walker (EXE파일내 DLL참조 보기)

홈페이지: http://www.dependencywalker.com/

2009년 1월 15일 목요일

Testing 에 필요한 능력들

1. 이슈 관리: Mantis, JIRA등 이슈관리 툴을 이용한 ISSUE 관리
2. 형상 관리: CVS,SubVersion
3. 통합개발환경: Eclipse기반 C/C++(AIX C++)
4. 변경영향관리: ChangeMiner
5. 정적분석: AIX C++ compiler의 Coding Rule Check기능(LINT)을 이용한 코드 검증
이런 능력들이 있어야 뽑는다네..
음.. 통합계발환경에서의 정적분석 능력을 키워야 겠다...

2009년 1월 13일 화요일

Capacity Planning

출처 :http://blog.paran.com/isdev8587/5809148

1. Capacity Planning 이란?
웹서버 1대가 처리할 수 있는 request는 한계가 있습니다. 웹서버의 하드웨어 즉 프로세서, 메모리, 하드디스크, 네트워크 장비 등 뿐만 아니라 설치된 소프트웨어의 종류에 따라 그 한계는 달라지게 됩니다. 웹서비스 오픈 직후에는 이용자가 많지 않아 별다른 문제가 없던 서비스가, 점차 이용자가 많아지고 접속수가 많아지면서 웹서비스가 제대로 이루어지지 않는 사례가 빈번합니다. 서버에 접속이 잘 안된다든지, 응답속도가 늦다든지, 심지어는 웹서버가 다운되어 버린다든지..
만약 어떤 웹서버(또는 서비스)가 어느 정도까지의 request를 처리할 수 있는지 미리 알아낼 수 있다면 그에 따른 적절한 대비책을 마련하여 적용시킬 수가 있겠지요. 모의 실험을 통해 이러한 한계를 알아내고 대비책을 강구해내는 것을 Capacity Planning이라고 합니다.

2. Capacity Planning을 해야하는 이유
- 인터넷(그리고 웹서비스)에 대한 접속은 나날이 증가되어 간다.
- 다양한 서버에 대한 capacity 한계를 분석하고 예측하는 것은 필수적이다.
- 성능과 안정성의 확보가 선행되어야 정상적인 웹서비스가 가능하다.

3. Capacity Planning 방법
- Stress Tool
만약 웹서버에 동시 100명의 이용자가 접속을 시도하는 상황을 만든다고 가정해봅시다. 머리속에 가장 먼저 떠오르는 방법은? PC 100대를 놓고 100명의 테스트가 붙어서 "시~작!!" 소리와 함께 동시에 접속한다. 그리고 이것을 원하는 시간동안(1시간이나 하루 정도) 되풀이한다. - 맘에 드십니까? 하하.. 사람과 장소를 물색하려면 만만치 않겠군요. 돈도 엄청 들겠고.. ^^
이러한 상황을 손쉽게 재현할 수 있도록 해주는 tool이 있습니다. 일반적으로 stress tool 이라고 부릅니다.

- Monitoring Tool
웹서버의 현재 상태를 모니터링할 수 있는 어플리케이션입니다. 여기에서는 NT에 기본적으로 제공되는 성능모니터(Performance Monitor - 줄여서 PerfMon이라고 부릅니다)에 대해 설명드리겠습니다.


Stress Tool의 종류
Stress Tool에는 여러 가지 어플리케이션이 나와있습니다. 일반적으로 많이 사용되는 것은 아래와 같습니다.
- Web Application Stress
- InetMonitor
- WCAT
- Orville

웹서비스의 형태, 인증방법 등에 따라 적절한 어플리케이션을 선택해야 합니다. 예를 들어 제가 만들고 있는 서비스들은 LDAP인증(DPA인증이라고 흔히 부르죠)을 사용하는데, 모의실험을 위해서는 이 인증을 뚫을 수 있는 어플리케이션이 필요하게 됩니다. 제가 사용해본 것 중에는 Web Application Stress와 InetMonitor가 DPA를 지원합니다. 저는 주로 InetMonitor를 사용하구요.
만약 아무나 접근할 수 있는, 인증이 걸리지 않는 웹서비스에 대해 테스트를 하고자 한다면, 위의 어플리케이션 중 어떠한 것을 사용해도 무방합니다.

Web Application Stress (이하 WAS)
Microsoft에서 권고하는 stress tool입니다. 그런데 제가 사용해보니 LDAP인증을 제대로 뚫지 못하는 경우가 빈번히 발생하더군요. 제가 잘못한건지..
WAS는 내부적으로 쓰레드를 생성하여 웹 서버에 다수의 request를 던지고 그 response를 받는 기능을 수행합니다. Windows2000, NT Server 4.0에서 사용할 수 있습니다. 아래는 설치 파일입니다.

WAS를 설치했으면 [시작] | [프로그램] | [Microsoft Web Application Stress Tool] | [Microsoft Web Application Stress Tool]을 실행합니다.

WAS는 여러 가지 방식으로 스트레스 시나리오를 작성할 수 있습니다. 위의 화면은 스트레스 시나리오 작성 방법을 선택하는 위저드 화면이며, 여기에서는 Manual 방식에 대해서만 다루겠습니다. 위저드 화면에서 [Manual] 버튼을 누릅니다.
WAS와 설치시 제공되는 샘플 스크립트를 통해 WAS의 사용 방법을 익혀보겠습니다. 샘플 스크립트는 WAS가 설치된 폴더 아래에 samples라는 폴더에 있습니다. 이 폴더를 통째로 웹 사이트의 홈 디렉터리 하위에 복사합니다. 다음 그림과 같이 왼쪽 패널에서 [Sample Script] 항목을 선택하고 오른쪽 패널에 보이는 스크립트 목록 중 "POST" Verb 항목의 가장 왼쪽 헤더를 더블 클릭합니다.


[Querystring] 탭 화면에서 "User"와 "Password"라는 이름의 매개변수가 쿼리 문자열로 넘어가고 있음을 알 수 있습니다. 또한 %Username%과 %Password%는 그 매개변수의 값으로 지정되어 있음도 알 수 있습니다. 이 문자열은 각각의 POST request시에 Users 목록으로부터 user와 password 값을 가져와 매개변수 값으로 넘겨줄 것을 WAS에게 지시합니다. Users 목록은 뒤에서 설명하겠습니다. 다른 탭 화면들을 둘러보면 HTTP 헤더 설정, SSL 사용을 비롯한 여러 가지 속성을 지정할 수 있음을 볼 수 있습니다. [Ok] 버튼을 눌러 스크립트 항목 속성 화면을 닫습니다.
Sample Script에서 마지막 두 개의 스크립트 항목은 Group 컬럼값이 "adGrp"으로 되어 있습니다. 이것은 페이지 그룹이라고 부르는 컬럼인데 스크립트를 생성했을 때 기본적으로 "Default"라고 설정된다. 페이지 그룹은 스크립트 항목이 불려지는 순서를 재구성할 때, 혹은 스크립트 수행 중에 각각의 스크립트가 불리는 회수를 바꿀 때에 사용합니다.
WAS 왼쪽 패널의 [Page Groups] 항목을 펼치면 모든 페이지 그룹을 볼 수 있습니다.

이미지를 클릭하시면 원본크기로 보실수 있습니다.

화면의 오른쪽 패널에서 Distribution 값을 변경하여 그룹별로 request를 던지는 빈도를 조절할 수 있습니다. 위 화면에서 "Keep Alive" 속성을 모두 체크 상태로 만듭니다.

WAS 왼쪽 패널에 [Perf Counters]라는 항목이 있는데 이것은 로컬 혹은 리모트 서버의 성능 객체를 모니터링할 수 있는 기능을 제공합니다. 우리는 성능 모니터를 사용하여 모니터링할 것이므로 WAS가 이러한 기능을 제공한다는 사실만 짚고 넘어가겠습니다.

[Settings] 항목을 보겠습니다.

간단한 테스트를 위해 [Test Run Time] 항목을 1분으로 고치겠습니다.
위 화면에서 다른 항목들을 잠깐 살펴보겠습니다.
- Concurrent Connections: 항목에 쓰레드 개수와 쓰레드당 소켓의 개수가 있습니다. 샘플에서는 2*1=2개의 동시 접속을 발생시키도록 설정하였습니다. 다수의 동시 접속을 발생시킬 때에는 쓰레드의 개수만을 늘리는 것을 권장하며, Stress multifier는 특별한 상황이 아니면 사용하지 않는 것이 좋습니다. 쓰레드의 개수는 일반적으로 10~100개 사이입니다. 쓰레드를 과도하게 생성하면 클라이언트 시스템이 버티지 못하고 다운되므로 클라이언트의 CPU 사용율이 80%를 넘지 않는 선에서 쓰레드의 개수를 조절하여야 합니다.
- Request Delay: request가 시간차를 두고 웹 서버로 전송되기 때문에 request가 한꺼번에 웹 서버로 몰리는 현상을 방지할 수 있습니다.
- Bandwith: 이용자의 접속 환경을 고려한 테스트가 가능합니다.
기타 항목은 도움말을 참고하시기 바랍니다.
WAS 왼쪽 패널에서 [Users]를 선택하고 오른쪽 패널에서 "Default" 항목을 더블 클릭합니다.

이 곳에서 일련의 이용자 ID와 암호를 추가/삭제할 수 있습니다. 각각의 user는 쿠키 정보와 인증 정보를 가지며, Users 항목 개수는 1000개를 넘지 않는 것이 좋습니다.
왼쪽 패널에서 [Client] 항목을 선택하고 오른쪽 패널에서 "Default" 항목을 더블 클릭합니다.

localhost가 클라이언트로 설정되어 있음을 볼 수 있습니다. 이 곳에서 클라이언트를 추가/삭제할 수 있습니다.

이제 테스트를 시작하겠습니다. 왼쪽 패널에서 [Sample Script] 항목을 선택하고 [Scripts] | [Run] 메뉴로 스크립트를 수행시킵니다. 다음과 같이 남은 시간을 표시하는 창이 뜹니다.

스트레스를 주고 있는 중에는 성능 모니터를 통해 서버에 무리한 부하가 가지 않는 지 확인하여야 합니다. 특히 Processor/Processor Time이 75%를 넘지 않는지, Memory/Available Bytes가 계속하여 감소하지 않는지, Web Service 성능 객체쪽의 카운터들 수치는 적당한지 등을 체크해야 합니다. 웹 서버 모듈에 대한 테스트를 하고 있다면 모듈 형태(ASP, ISAPI, …)에 따라 적당한 카운터를 함께 모니터링합니다.
실제 스트레스 테스트중에는 스트레스의 기준과 성능상의 기준을 정해두고 이에 부응하는 결과가 나오는지를 체크하여야 하며, 그 결과에 따라 웹 서버 모듈을 손보거나 웹 서버의 대수를 늘리는 등의 조치를 취해야 합니다.
스크립트 실행이 끝나면 [View] | [Reports] 메뉴를 선택하여 결과 리포트를 볼 수 있습니다. 스크립트를 수행한 일시를 기준으로 결과 리포트가 나열됩니다.

Reports 화면에서 중요한 것은 Result Codes, Page Data입니다. 웹 서버가 보내 준 response에 오류 코드가 돌아온 것이 있는지, 각 페이지에 대한 request는 적절한 시간내에 처리되고 있는지에 유의하여 리포트를 분석합니다.

InetMonitor
제가 주로 사용하는 stress tool 입니다. DPA를 확실하게 뚫어주기 때문에..

특징은 아래와 같습니다.
- 서버의 리소스 사용량을 모니터할 수 있는 기능도 내재하고 있습니다.
- 현재 가해지고 있는 stress와 response에 대한 분석결과를 보여줍니다.
- 결과를 토대로 한 서버 구성 recommendations을 제시하여 capacity planning에 도움을 줍니다.
- 대부분의 인터넷 프로토콜(HTTP, SMTP, NNTP, POP3, IRC, IMAP, MIC, LDAP)과 인증형식을 지원합니다.
- 테스트 URL을 순차적으로 또는 무작위로 선별하여 stress를 줄 수 있습니다.

InetMonitor 사용법
InetMonitor가 제공하는 Monitoring 기능

InetMonitor를 실행하면 위와 같은 화면이 나타납니다. InetMonitor에는 크게 두 가지의 기능이 있는데, 첫번째는 stress simulation이고 두번째는 monitoring 기능입니다. 위의 화면은 monitoring기능을 보여줍니다.
웹서버를 monitoring하는 기능은 기타 tool에 비해 상당히 미약합니다. 간단히 설명은 드리죠. 웹서버를 모니터링하기 위해서는 그 웹서버에 대한 administrator권한이 있어야 합니다.

"Monitoring" 하부의 "Monitor Server..." 메뉴를 선택합니다.
웹서버를 지정하라는 화면이 나타나면 웹서버의 이름(예를 들어 www.yahoo.com)을 입력합니다. 웹서버로부터 필요한 정보를 끌어오기 위해 시간이 약간 소요됩니다.
아래와 같이 웹서버의 현재 상태를 나타내는 그래프 화면이 나타납니다.

그래프에 프로세서 사용량, 메모리, 웹서비스에 관한 여러가지 항목들이 보입니다.
모니터링을 중지하려면 웹서버를 선택하고 메뉴의 "Remove Server"를 선택합니다.

InetMonitor가 제공하는 Stress 기능
이제 InetMonitor의 stress 기능에 대해 본격적으로 살펴보겠습니다.
View 메뉴의 "Simulation View"를 선택합니다.

각각의 항목을 살펴보지요.
- Target Server : Port: 서버명과 port#를 지정합니다 (예: www.yahoo.com:2000). 만약 디폴트 포트인 80번 포트를 쓰는 경우라면 port#은 생략가능합니다.
- Number of Users: Concurrent User 수를 지정합니다. 만약 30으로 지정하면 웹서버에 지속적으로 30개의 request가 동시에 몰리게 됩니다. 최대값이 50 이므로 그 이상 user수에 대한 테스트를 하고자 할 때에는 다른 클라이언트(PC)에서 동시에 수행합니다.
- User Start Delay: simulation 시작후 user수가 몇 ms 간격으로 하나씩 늘어갈 건지를 지정합니다. 만약 1000으로 지정하면 1초에 하나의 request가 증가하기 시작하여 Number of Users의 수치까지 올라갑니다.
- Test Duration (mins): 테스트를 수행할 시간을 분단위로 지정합니다. 0 으로 지정하면 simulation을 stop할 때까지 무한정 테스트를 계속합니다.
- Logging Active: response를 log 파일로 남길 것인지 여부를 결정합니다. log 파일은 InetMonitor가 설치된 폴더 하위의 log 폴더에 쌓입니다.
- Worker Threads: Number of Users와 동일한 값으로 지정합니다.
- Command Script: InetMonitor stress 환경 설정파일을 전체 경로 포함하여 지정합니다. 아래와 같은 방식으로 작성하면 됩니다.

USER username password
GET RANDLIST(d:inetmonitorsampleshttpfile.txt)

Authentication을 "None"으로 지정했다면 USER 라인은 생략합니다. 기타 인증이 걸리는 경우에는 웹서비스를 사용할 수 있는 계정정보를 써줍니다.
GET 방식 request인 경우 "GET"을, POST 방식 request인 경우 "POST"를 써주고 실제 URL이 기록되어 있는 파일을 지정해줍니다. URL 리스트에 써놓은 순서대로 stress를 줄 경우에는 "SEQULIST"를, 무작위로 할 경우에는 "RANDLIST"를 써줍니다.
URL 리스트 파일의 예제는 아래와 같습니다. "url:"을 앞에 붙이고 Target Server 다음부터 써준다고 생각하면 됩니다.
url:/isapi_ldap/mbbs.dll/list?cid=chitest40&bid=1
url:/isapi_ldap/mbbs.dll/viewitem?cid=chitest40&bid=1&itemID=6&refid=6&pLevel=0&pDepth=0
url:/isapi_ldap/mbbs.dll/Openwrite?cid=chitest40&bid=1&ItemID=6
url:/isapi_ldap/mbbs.dll/Openwrite?cid=chitest40&bid=1&pid=7&RefID=7&pLevel=0&pDepth=0
url:/isapi_ldap/mbbs.dll/viewcontent?cid=chitest40&bid=1&itemid=8
url:/isapi_ldap/mbbs.dll/viewoneword?cid=chitest40&bid=1&itemid=8
url:/isapi_ldap/mbbs.dll/list?cid=chitest40&bid=2

- Authentication: 인증방식을 설정합니다. 비인증 사이트인 경우에는 "None"을, 인증 사이트인 경우에는 적합한 인증방식을 선택하면 됩니다.
- Cookies File: 쿠키 파일을 사용하는 경우 그 파일에 대한 전체 경로/파일명을 써줍니다.
- Client Timeout (s): Timeout 시간을 몇 초로 할 것인지를 설정합니다.
- HTTP Version: HTTP 1.0과 1.1 중에서 웹서버와 일치하는 버젼을 선택합니다.
- Load Images: 웹페이지를 response로 끌어올 때 링크된 이미지파일까지 끌어올 것인지 여부를 설정합니다.

각각의 항목을 설정한 예제화면은 아래와 같습니다.

각각의 항목을 설정했으면 Simulation 메뉴의 "Run Simulation"을 선택합니다. 테스트 시작 후 아래의 항목을 점검합니다.
Connections가 지속적으로 증가하고 Connection Failures는 증가하지 않는다.
인증 사이트인 경우 Authentication Negotiates와 Authentication Response가 지속적으로 증가한다.
URL Redirection이 일어나지 않는다.
Page Gets가 지속적으로 증가한다.
Successful Returns가 지속적으로 증가한다.
Error Returns가 Successful Returns에 비해 미미하게 떨어진다.
기타 Error 항목이 눈에 띄게 증가하지 않는다.
위와 같은 정상적인 상태로 하루정도는 유지가 되어야 합니다.

주의사항
InetMonitor는 WinInet을 사용하기 때문에 IE의 동작에도 영향을 받습니다. stress simulation 중에는 IE를 통한 웹서핑 등을 하지 않는 것이 좋습니다.
클라이언트의 성능에 맞게 user수를 설정해줄 필요가 있습니다. 무리한 수치를 부여하면 클라이언트쪽에서 뻗어버리는 사태가 발생하지요. 점진적으로 수치를 늘려가면서 적합한 값을 찾아야 합니다.

PerfMon - Windows2000
[시작] | [관리 도구] | [성능]을 실행합니다.

성능 카운터에 어떤 것들이 있나 살펴보겠습니다. 화면 우측 상단의 "+" 버튼을 누르세요.

리모트 호스트를 모니터링할 경우에는 [다음 컴퓨터에서 카운터 선택] 항목을 선택하고 호스트명 혹은 IP 주소를 "" 다음에 입력합니다.
[성능 개체] 항목은 카테고리라고 볼 수 있으며, 시스템에 어떤 모듈들이 깔려있느냐에 따라 다른 항목이 나옵니다. .NET이 설치되어 있는 제 컴퓨터에서는 프로세서, 메모리, 웹 서비스를 비롯한 많은 카테고리들은 물론 ASP.NET 관련 항목들도 나오네요. "Web Service" 성능 개체를 선택합니다.

어떤 성능 개체를 선택하느냐에 따라 카운터의 종류가 바뀝니다. [다음 목록에서 카운터 선택] 항목을 선택하고 "Anonymous Users/sec" 카운터를 선택합니다. 호스트에 여러 개의 웹 사이트가 존재하는 경우에는 상단 그림 우편과 같이 웹 사이트가 모두 목록에 나오며 모니터링의 대상을 특정 웹 사이트로 한정시킬 수도 있습니다. [추가] 버튼을 눌러 카운터를 성능 모니터에 추가합니다. 같은 방법을 사용하여 원하는 카운터를 성능 모니터에 추가시킬 수 있습니다.
여러 개의 카운터를 추가하면 그래프에서 내가 어떤 카운터를 보고 있는 것인지 구분하기가 쉽지 않습니다. 툴바의 전구 모양 버튼을 누르거나 Ctrl+H 키를 눌러 내가 보고 있는 카운터를 하이라이트시킬 수 있습니다.

특정 카운터의 수치가 너무 높거나 낮아 모니터링에 어려움이 있을 때에는 카운터의 배율을 조정해줌으로써 해결할 수 있습니다. 위 화면 오른쪽 패널을 마우스 오른쪽 버튼으로 클릭하고 [등록 정보...] 메뉴를 선택합니다. 등록 정보 창이 뜨면 [데이터] 탭을 누릅니다.

배율을 조정할 카운터를 목록에서 선택하고 [배율] 항목에서 적절한 배율을 선택한 후 [확인] 버튼을 누릅니다.
다음으로, 성능 로그를 저장해두었다가 필요시에 다시 로드하는 방법을 알아보겠습니다. 할 일 없는(?) 개발자나 운영자라면 모르지만 대부분의 경우 모니터링 화면을 하루 종일 보고 있을 수는 없는 노릇입니다. 로그를 저장해두었다가 필요시에 꺼내어 본다면 업무시간을 효율적으로 사용할 수 있을 것입니다. 성능 모니터의 왼쪽 패널에서 "성능 로그 및 경고" 트리를 펼치세요.

"카운터 로그" 항목을 마우스 오른쪽 버튼으로 클릭하고 [새 로그 설정...] 메뉴를 선택합니다.

새 로그 설정창이 뜨면 위와 같이 임의의 이름을 주고 [확인] 버튼을 누릅니다.

위와 같은 일반 속성창이 뜨면 [추가] 버튼을 누르고 모니터링할 카운터를 추가합니다.

카운터를 추가하면 위와 같이 데이터 샘플 간격을 지정할 수 있습니다. 위의 예에서는 30초로 설정한 경우입니다.

[그림 B-9] 화면에서 [로그 파일] 탭을 누른다.

[로그 파일] 탭에서는 로그 파일의 저장 위치, 파일명 등을 지정할 수 있습니다. 위 화면에서는 파일명 형식을 "mmddhh" (월/일/시)로 지정하였습니다. [로그 파일 크기]는 디폴트가 "최대 제한"이며 이것은 해당 드라이브가 꽉 찰 때가지 로그를 계속 쌓으라는 의미입니다. 만약 로그 파일의 최대 크기를 제한하고 싶으면 "다음으로 제한" 항목을 선택하고 최대 크기를 지정합니다.

위 화면에서 [일정] 탭을 누르세요.


로그의 시작과 중지와 관련된 속성을 설정할 수 있습니다. 위의 화면은 로그 시작과 중지 시간을 지정한 예제입니다.

[확인] 버튼을 눌러 로그 설정창을 닫습니다.


우리가 추가 설정한 "dizzi_log" 항목이 나타납니다. 빨간 색 아이콘은 로그 작업이 수행되지 않고 있음을 나타내며, 로그가 시작되면 녹색 아이콘으로 바뀝니다.
로그가 시작되면 로그 파일 속성에서 지정한 디렉터리에 지정된 파일명으로 로그가 쌓이기 시작합니다. 작업 도중에 로그 저장 작업을 중지하고 싶으면 위 화면에서 "dizzi_log" 항목을 마우스 오른쪽 버튼으로 클릭하고 [중지] 메뉴를 선택합니다. 중지 상태가 되면 해당 항목이 다시 빨간 색 아이콘으로 바뀝니다.

이번에는 저장된 로그를 불러들여서 당시의 상태를 재현하는 방법을 알아보겠습니다. 성능 모니터 상단 툴바에서 "로그 파일 데이터 보기" 버튼을 누릅니다. 로그 파일을 지정하는 창이 뜨면 재현할 로그 파일을 지정하고, 성능 모니터의 "+" 툴바 버튼을 눌러 카운터를 선택합니다. 카운터 목록에는 로그 파일 속성을 설정할 당시에 추가했던 카운터들만 보입니다. 카운터 추가창을 닫으면 다음과 같이 모니터링 당시의 상태를 볼 수 있습니다.

PerfMon에서 체크해야 할 것
- MS에서는 peak time일 때 프로세서 평균 사용량이 75%를 넘지 않아야 정상적인 웹서비스가 가능하다고 권고합니다. 만약 이 수치를 넘어간다면 웹서버를 증설하든가 하드웨어 스펙을 올리던가 하여 대처를 해야 되겠지요.
- Stress 테스트를 하면서 Memory leak가 발생하지 않는가 그러한 것들도 PerfMon을 통해 점검할 수 있습니다.
- ISAPI Extension이나 기타 웹서버 모듈을 stress test할 때, Current connections 등의 수치가 폭주하지는 않는지 점검합니다.

이미지가 없어질수 있어서 복사해놓는다.

Microsoft’s Web Application Stress Tool

By Rick Strahl
http://www.west-wind.com/

 

Last Updated: 2/24/2000

Microsoft's Web Application Stress Tool provides an easy way to simulate large numbers of users against your Web application. This tool makes it possible to make intelligent decisions about hardware and software load incurred by your application and how much traffic a given machine or group of machines can handle. In this article Rick shows how the tool works and how to properly interpret the performance data it generates.

Free Download from:

http://www.microsoft.com/downloads/details.aspx?FamilyID=e2c0585a-062a-439e-a67d-75a89aa36495&DisplayLang=en

Requires:

Windows NT 4.0 SP4 or Windows 2000

Building Web applications has now become a fairly common scenario for developers building new applications or updating and Web enabling existing applications. As applications move to the Web into a server based environment it becomes increasingly important to be able to gauge the performance and load capability of an application. Developers must be able to answer hard questions about how much traffic a given site will be able to handle and make intelligent choices of hardware, software and often times even design approach of the application to make sure the application will be able to handle an onslaught of customers on the Web site. We should all be so lucky to have to worry about the problem of being too successful!

But it's often surprising to find how many Web sites hit their limits and catch the operators off guard. An overloaded Web site is a major problem and once happening the problem often can't be addressed rapidly. A quick fix typically involves adding additional hardware that must be purchased, installed and configured – a process that may take days or even weeks. Being prepared and understanding the limits of an application and managing advertising to bring traffic to a site in measured spurts is crucial to the success of large and even not so large commercial sites.

Additionally, it's important to understand that today's tools often make it much easier to build Web applications than the tools from even a year ago. Today we have powerful scripting engines, easy access to COM components we can write in high level languages and Web servers that self-configure for the most part. But along with the ease of use also comes more overhead and resource load on the server and it becomes even more important to look at load issues right from the start of application development. Load testing should be performed in the initial design phases to get a good idea what overhead the application components incur on the server. Constant monitoring should be performed as development continues on always keeping a close eye on how well the software platform in relation to the hardware it will be running on.

The problem is that often times these scalability questions such as 'How much traffic can we handle on our particular hardware?' are not easily answered because it’s hard to measure performance of Web applications outside the actual environment that they will be running in. Even the process of testing Web applications seems daunting: There are so many pieces involved from a Web browser client, the Web server, the backend application and the backend database server. The bottom line is that the only way to realistically test the load capabilities of a Web application is in a close approximation of a live environment, which means actually 'running' the Web application.

Introducing the Web Application Stress Tool

So, how do we 'run' a Web application realistically? The answer is that you have to simulate many clients simultaneously hitting your site. To this end, Microsoft has released an easy to use, yet very powerful and flexible tool called the Web Application Stress tool (WAS), which provides this functionality in a freely downloadable application service.

Figure 1The Web Application Stress tool provides a simple interface to capture, configure, run and display the result from running a stress test. In this view the captured Web links that will be accessed by the Web client when running the test are listed.
image

WAS requires Windows NT or Windows 2000 as the tool runs as an NT Service. For realistic performance testing, it's also recommended that you run the stress testing tool from a separate machine other than the Web server. The actual request generator can be fairly resource intensive while generating the Web requests and this overhead can affect performance of the Web site under max loads. However, even though the documentation states two machines are a requirement you can certainly run WAS on the same machine as the Web server, but don't expect 100% accurate results especially when you're testing at the top end load for the hardware you're running on.

The user interface of WAS is straightforward with a list of scripts and sublists of the properties for the particular script on the left and a data view on the right. The data view depends on the selected script option. The most important views are the default view (see Figure 1) that shows you all selected links and the server you're testing and the Settings view, which configures how the links are executed against the server and at what load level. Other options allow you to configure users with usernames and passwords (optional) since you can simulate large numbers of clients this maybe necessary for sites secured with some level of authentication. You can even configure specific pre-existing Cookie values for each user if you have to. In short, there are a lot of options for most HTTP scenarios available, even though most of these are unlikely to be utilized in typical tests. It's there for you if you need the control to customize your tests.

Once a test has been completed there's a report view where you can view the results of the test, which provides a thorough summary of the test just performed including information about total hits and hits per second as a whole, hits for individual pages, failures and response codes as well as bandwidth breakouts.

Figure 2The report page provides a summary of the test run including total number of requests, requests per second and failures. There's also additional detail about each link and average request times of each link.
image

Getting started with WAS

The concept behind WAS is simple: You create a test script by capturing a browser session using Internet Explorer basically walking through your application, as a typical user would do. As you do this WAS captures the content of all these Web requests. WAS captures everything: Hyperlink clicks, Form submissions, Redirect links and Authentication info – everything needed to capture the user's session through your site.

Figure 3The Browser Recorder lets you use your browser to create scripts. The recorder captures all links, HTML form submissions and even Cookies, Redirects and Authentication information.
image

Creating a script is very easy: You can use the Browser Recorder to capture a browser session and have WAS generate a test script from captured links. A manual mode is also available to allow you to manually add links and information about each link.

As you can see in Figure 3 there are a few options you can choose for the Browser Recorder: Capture delay, and record cookies and host headers. The delay between requests will result a more realistic test in terms of how people are actually navigating a site, giving you a more accurate picture of how users on a site map to connections on the Web server. If your goal is to find the limits of your site leave this option unchecked. If you want to simulate a specific user number scenario go ahead and capture the delay as it provides a more realistic view of the browsing scenario. I'll talk more about this delay when we look at the load options for the test.

The Record browser cookies and Record host header options allow you to capture a specific user session, rather than dynamically tracking this information at the time of the request, the latter of which is how a typical browser would behave. Typically you'll want to leave those options unchecked to let the WAS client create cookies and host headers just like a user on your site would. However, if you have persistent state information for your site (such as a user profile or other info that is connected to a permanent cookie) make sure that you clear the cookie before you run your tests to simulate a new user coming to the site and going through the steps of configuring the required user state. For example, on my Web Store site users set up a user profile when they place an order. The profile is recovered when they return to the site and tracked with a Cookie. If I never went through and set up my profile information WAS would not be able to actually process an order because the profile information would be missing and not get filled out.

If you typically require users with an established cookie and profile then make sure that you do check the Capture browser cookie option.

Note:

The current version of the WAS Browser Recorder does not support HTTPS/SSL requests at this time. To capture requests secure requests you have to temporary disable SSL. If you have to have SSL for accurate testing, you can then manually change the individual requests in the link list and enable SSL operation on them.

When you click Next|Finish on the browser recorder you'll be whisked into IE and you're ready to capture requests in your browser. In my case I ran a test against my West Wind Web Store on my development machine starting with the home page and typing that link into the browser's address line. After that I'm off on my dev site and with WAS capturing links. This site happens to be Web store application that relies on Cookies to track users, handles profile information for customers and secure order processing via HTTPS. All of these things were beautifully captured by the WAS script I set up.

You want to be careful to create scripts that match closely to what people will be doing on your site for real. For example, I went to the home page, browsed around the various categories, looked at a few items, ordered a couple, then took one out. I then went in and examined and changed my user profile before going back to the shopping basket and going through the checkout process. In other words I wanted to make sure the majority of the application gets exercised in a somewhat realistic manner. When I'm done I can switch back to the running WAS application in the background and click on the Stop Recording button (Figure 4).

Figure 4While recording a script WAS monitors IE to capture all incoming data and stores it into a database file used for recalling and 'playing back' the content during the test.
image

If you look closely at the WAS form before clicking the Stop Recording button you'll see how WAS is capturing the browsers progress. The data is captured and stored in an Access (MDB) database file including any content captured from form variables. You can also review the captured data for each link in the Default View (Figure 1) by double-clicking on the grid area next to the request. A dialog lets you edit the querystring, POST data and security info.

Once you've captured the script you now see a view like the one shown in Figure 1 with your capture Web links shown on the right in the data view of the main WAS window. With the links captured your next step is to configure the load options for running the script. You do this using the Settings option in the list and you'll see a dialog as shown in Figure 5.

Figure 5The Settings dialog lets you configure how the requests will be run against the server. You can specify the number of simulated clients by setting the number of threads and number of sockets on each thread – in this case 10 threads and 10 sockets yields 100 simulated clients.
image

This dialog is your most important tool in tailoring the test for the appropriate load factor on your test Web site. The first items are Stress Level and Stress Multiplier which determine the simulated number of users:

Stress Level

This property determines the number of threads that will be run by WAS to hit the client application.

Stress Multiplier

This property determines the number of sockets that are created on each of the above threads.

The end result is that the Stress Level times the Stress Multiplier equal the number of clients you are simulating. Threads * Sockets = Total clients.

Test Run Time
This option allows you to specify how long to run the test. This is great to start up a test and let it run for exactly 8 hours for example, to see exactly how continuous pounding will affect performance. You can walk away and let WAS do its thing overnight for example.
Request Delay

The request delay allows you to provide more realistic user simulation, since users don't continuously click on links as soon as a page loads. Typically users look around a page, find a link and then click it. Even a familiar user may take 5 seconds between requests – new users will take much longer. I'll talk more about when you want to add a delay and when you don't later in the article.

Throttle Bandwidth

This option causes WAS to monitor the traffic being generated both on the outgoing on incoming links and optionally allows limiting the bandwidth available. This is useful if you're generating large amounts of traffic and you may have to contend with the possibility of testing for overloading your incoming Internet pipe. In typical application it takes a huge amount of volume to overflow even a T1 connection, but this may vary depending on your site's content. Even though throttling is available, there's no mechanism in WAS that tells you when you overrun the bandwidth – you have to look at the resulting report for hints of bandwidth usage.

Follow Redirects
If the tested site includes redirect headers which cause pages to stop executing the current page and instead go to another page, this option allows WAS to follow those redirects. Redirects are common in ASP applications to route code logic from one page to another. Many applications that login or otherwise manually authenticate users tend to often use Redirects. The Max value determines how many successive redirects are followed – one would hope to never see these more than 1 level deep, but the folks of Microsoft were thinking ahead for sick and twisted minds.

The remaining options should be left alone except in special situations – you can review those items in the WAS help file.

Running your script

Once all these settings are configured you're ready to run your script and stress test your application. I suggest you first set up a short logging interval and possibly even a low stress client count to see if everything is working correctly. For example, with my Web Store example I wanted to make sure all the links get hit and I would actually end up with an order in the end of a single script run. If I get an order placed by the test, I know that the user Cookie, user profile attachment, SSL and navigation of the site through the script works correctly. I did this and indeed I ended up with an order in my database.

So, now I want to go in and check the application for load. There are two typical scenarios here:

  • Check load with a specific number of user clients
    In this scenario you'll want to set up your WAS Settings with delays between requests to simulate user click habits. Either capture your script with delays or else enter a manual or random delay on the Settings page that closely matches what you think your users would do.
  • Check for maximum load of the application
    Here you want to keep increasing the stress levels until you get close to, but not quite to, overrunning the machine's CPU resources. In this scenario, you're typically trying to retrieve a transaction number like – "We're able to take 450,000 backend hits in an 8 hour period".

Testing for load – an example

The scenario I wanted to test for with my Web Store application is the latter. I just received a new Notebook development machine and I wanted to put it through its paces running the Web store application (to see the actual Web application tested go to: http://www.west-wind.com/wwstore/). I basically want to see how much traffic I can throw at the backend application before it maxes out the machine and starts backlogging requests.

In testing for load I start by going back to the Settings page and setting the Stress Level to 10 and the multiplier to 10 resulting in the equivalent of 100 very efficient, non-stop clicking shoppers on my site.

Now understand that these 100 clients do not match typical clients on the Web site, because no delays are occurring between requests sent by WAS at this time. Keep in mind that real users on a site don't continuously click on links – they have to wait for pages to download and actually look at the content on the page. A user with a fast connection and who knows exactly what he wants may click once every 5-10 seconds, while more typical users will take closer to 20-30 seconds to go to the next page. Others may browse even slower taking a coffee break every ten minutes, checking their email between requests or checking another site for comparable pricing.

My goal here however is to see how well the backend performs and I try to actually run as many hits as I possibly can before the system becomes to loaded: CPU close to 100% and pages returned taking more than 10 seconds from another machine.

With 100 continuous clients I'm not even close to the 100% mark: 35% CPU utilization and when hitting the server with a separate browser any requests are returned immediately. So, I double the count to 200 clients (20 threads/10 sockets). Now things get more interesting – the CPU is running at 75% average with occasional spikes close to 100%. When running browser requests against the server, I now see definite hesitation – responses vary from close to instant to up to 10 seconds or so. This is very close to what I would consider red-line operation of the Web application. It's still keeping up but anything more and it would start keeling over. We've found our max stress level…

However, don't jump to conclusions on short tests of 5 minutes or so. These short burst tests are great for finding starting breaking points, but in order to truly test operation under load you need to stress test for long periods. I like to run my tests over night for at least 8 hours, but ideally you'll want to run for a 24 hour period or more. Why? For one thing applications tend to get more resource hungry the longer they run – it's not uncommon to see slow downs over long periods of hard operation. Also, consider actual data accumulation. In my 8 hour test I accumulated over 48,000 orders written into a SQL database. User Session data is also logged into a SQL table and there were 50,000 user session initiations. Run a test long enough and these numbers get large quickly resulting in slightly slowing access times to the database as the data size grows.

As a side note, figuring out backend slowdowns requires additional logging of requests in your backend application. The Web Store application incidentally provides this logging through the Web framework it runs on (West Wind Web Connection – more about this at the end of the article). Logging is crucial for Web application monitoring, but that's something that needs to be implemented at the Application or Web Framework level – it's not something that WAS will provide you with. In fact, WAS only provides you a summary of the data not the actual detail that you can use to see degradation over time.

In all fairness, though, WAS does provide the ability to log NT Performance counters from the Web server to allow logging of server performance statistics over time. WAS generates a file hcounters.csv which contains these counter values, which you can then manipulate and graph externally (in tools such as Excel for example).

Understanding the test results

I'm now ready to let my test script rip. I set up the script to run for 8 hours over night and wait for the results in the morning. Here's the result sheet from that test:

Overview

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

Report name: 2/20/2000 1:00:09 AM

Run on: 2/20/2000 1:00:09 AM

Run length: 08:00:00

Web Application Stress Tool Version:1.1.289.1

Notes

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

Web Store on Rasnote

Number of test clients: 1

Number of hits: 1407757

Requests per Second: 48.88

Socket Statistics

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

Socket Connects: 1407907

Total Bytes Sent (in KB): 481870.00

Bytes Sent Rate (in KB/s): 16.73

Total Bytes Recv (in KB): 8666648.94

Bytes Recv Rate (in KB/s): 300.93

Socket Errors

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

Connect: 4

Send: 0

Recv: 0

Timeouts: 0

RDS Results

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

Successful Queries: 0

Script Settings

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

Server: 111.111.111.111

Number of threads: 150

Test length: 08:00:00

Warmup: 00:00:00

Cooldown: 00:00:00

Use Random Delay: No

Follow Redirects: Yes

Max Redirect Depth: 15

Clients used in test

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

localhost

Clients not used in test

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

Result Codes

Code Description Count

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

200 OK 1407757

Page Summary

Page Hits TTFB Avg TTLB Avg Auth Query

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

GET /wwstore/ 34384 2344.38 2556.86 No No

GET /wwstore/wwstore.css 34384 82.94 83.40 No No

GET /wwstore/images/WestWindSt 34384 31.84 33.14 No No

GET /wwstore/banners/OOPBook.g 34384 16.49 16.96 No No

GET /wwstore/space.gif 34384 9.31 9.48 No No

POST /wwstore/additem.wws?sku= 34374 7.24 1010.32 No No

GET /wwstore/removeitem.wws?Sk 34366 3067.01 3069.33 No No

POST /wwstore/ShoppingCart.wws 34358 77.22 1889.93 No No

GET /wwstore/ShoppingCart.wws 34347 2787.15 2789.42 No No

GET /wwstore/wwstore.css 34346 79.15 79.66 No No

… additional data stripped here for size

GET /wwstore/images/wcpower.gi 34265 7.94 8.67 No No

POST /wwstore/OrderProfile.wws 34256 7.31 1170.45 No No

GET /wwstore/wwstore.css 34256 73.33 79.51 No No

POST /wwstore/SubmitOrder.wws 34243 75.33 1056.36 No No

GET /wwstore/wwstore.css 34243 74.15 75.66 No No

As you can see there's lots of useful information in this summary. The most useful numbers are the throughput numbers that tell you the total number of hits and how many requests the Web server processed per second. In this example, 1.4 million links were served with an average of almost 49 a second. Impressive for a notebook computer that this sample was run on. Understand that this value is not the number of requests on your backend application, but all links including images and other static pages that the Web server provides.

Also notice the bandwidth information that tells you the average Kbytes received and sent per second. I was a little surprised by how low these numbers are for the amount of traffic generated: 300kb a second average for 1.4 million hits on the Web server in the 8 hour period. That's impressively low (less than a quarter of a T1 connection), but then again the Web Store application is very light on use of images – more image heavy applications will see much higher bandwidth usage.

Looking at the page detail we can see more information about specific requests. For example, it's easy to see which pages are static and which are dynamic based on the request times. TTFB (Total Time the first byte is received) and TTLB (last byte is received) let you get a glimpse at how long (in milliseconds) the client waits for pages. You can easily see the dynamic requests (the .wws pages) taking a couple of seconds as opposed to static links which appear to be next to instant. This can be attributed to the backlog of ISAPI requests in this case. You'll want to watch these numbers carefully in your tests – if the numbers go over 5 seconds you're probably keeping your Web clients waiting too long for each page.

There appears to be a bug with the way the TT values are recorded in the examples above – notice that some of the dynamic pages (.wws) which hit the backend are coming back next to instant (orderprofile.wws) while others (removeitem.wws) are taking 3 seconds. All backend request times are in the 50 millisecond range and all requests are evenly fast. For some reason it looks like POST requests are getting priority processing… in these cases the TTLB value is probably what one should go by. Microsoft is aware of this issue and is working on a fix for future releases. As a work around, you can set up another WAS client running the same script with only a single client – that single client will provide more accurate request retrieval times as there's no interference from multiple clients running simultaneously.

Notice also that WAS does not cache pages like a browser does, so realistically WAS clients are generating more traffic on your Web server than a typical browser would. For example, wwstore.css is the Web store's default Cascading Style Sheet that's used on every page of the store. Typical browsers will cache this static page after the first load. WAS however reloads wwstore.css on every client page that requests it. Note also that the page count is not summarized for all the wwstore.css pages, but rather each client request is separately listed in the link result list. This behavior may change in the future with options for caching provided for WAS clients.

All of this information is very useful as it lets you see how your application performs under a given load. Remember I ran this test without setting up delays between requests which means even 50 clients would easily be able to saturate the backend application as the client will simply have those 50 clients push data down to the client as fast as it can process it! In other words, without delays the number of clients is largely irrelevant – in fact in my tests 50 or 150 performed almost identically. Lower numbers weren't saturating the backend application so the values went down as did the CPU usage. Higher numbers (175 and up actually) started over-saturating the application resulting in slow downs and the TTFB values going up above 5 seconds. Adding more clients could rapidly bring the entire application to an unusable state. However, my goal in this test was to identify how much traffic I can throw at the site, and I have been able to get this information through these tests. I'll look at some additional information that the backend application provided in the next section.

If you want to gauge load for actual user connections you will need to add delays between requests that match the browsing patterns of your users. With delays in place you'll find that you can have lots more users than without delays as the WAS client application is throttled. Regardless of how fast a request finishes the client will have to wait for a specific interval. When I re-ran my tests inserting a 5 second delay I was able to run in excess of 2000 clients before the backend application started bogging down. Note that I had to add users on the Users item of the main script view – the default sets up 200 users. If you run anything more than 200 clients (Threads * Sockets per thread) you have to make sure you add the appropriate amount of users or else you'll get an error message that states the script cannot be run due to too many users for this setup.

Backend Application Logging

In my example of the Web store application, I'm running a Web Connection application, which is Visual FoxPro based pool of COM objects being called of an ISAPI extension. A pool of 4 servers is handling backend requests for database access, and HTML output generation via scripted template HTML pages (similar to ASP).

Understand that your hardware will affect your test environment – obviously a PIII 700 is going to perform differently than PII400. Multi-Processor boxes will drastically change the throughput of your application as opposed to single processor applications. To give you an idea of throughput I was running WAS against my Web Store application on my development notebook:

  • A PIII 450 Dell Inspiron 7500 Notebook
  • 196 Megs
  • Windows 2000, Release
  • West Wind Web Connection 3.0/Visual FoxPro backend application
  • Running 4 pooled COM Server instances

In the eight hour period of the WAS test it logged:

  • 1.4 million Web server requests
  • Over 48 requests per second
  • Serving 150 non-delayed clients

This information is useful, but in reality it doesn't tell me very much about how well the backend application is performing other than it's doing its job. To realistically get performance information about the backend, additional logging by the backend is required. The Web Connection framework happens to handle this optionally as part of the framework. Each hit automatically gets logged into a log file with basic request information – which page, how long it took, the client IP address and a timestamp. This information can be displayed over the Web with a statistics page:

Figure 6 Application logging can provide important additional information about how much traffic was really handled by the backend.
image

as well as being queried out of a database directly for custom reports.

The HTML summary display in this case includes a graph that shows hourly operation of the backend application as well as quick view of the last 200 requests. You can see that as the test was running about 55,000 backend hits were handled by the Web Connections server every hour the test ran (from 1am to 8am). This makes for the following rates of the backend application:

  • 16 requests a second on average
  • Peak of 25 requests a second
  • 1.3 million requests in a 24 hour period

All of this on a PIII 450 Notebook – imagine performance on a multi-processor server additional memory and faster disk access. It's pretty amazing at what sort of traffic you could potentially handle on a single machine running Windows 2000 these days!

However, it's important to note that 55,000+ hits/hour is pretty close to peak load in this example, so it's unlikely you'd ever see 1.3 million hits in a day. Peaks only occur for a few hours a day typically, the rest of the day is less intense. If load goes above the peak additional hardware would be required either with a better server machine (in this case very likely), or additional machines in a Web farm type pool.

Create and run scripts programmatically

Before we finish up I want to mention that Microsoft Web Application Stress tool even includes a COM component that allows you to control the application without the WAS user interface. You can add files to scripts via code, configure the script options and then start and control the operation of the script (Visual FoxPro code shown below):
image

oWas = CREATEOBJECT("WAS.EngControl.1")

oScripts = oWas.Scripts

*** Add a new Script

oScript = oScripts.Add()

oScript.sName = "Web Store Test "

oScript.NumberOfThreads = 10

oScript.SocketsPerThread = 10

oScript.TestTime = 150

oScript.sName = "Test Script from VFP"

oScript.ScriptItems.sServer = "111.111.111.111"

*** Must grab script id - or else walk script collection

lnSCriptID = oScript.ScriptID

*** Add Pages to the script

oItem = oScript.ScriptItems.ADD

oItem.sUrl = "/wwstore/default.wws"

oItem.sVerb = "GET"

oItem = oScript.ScriptItems.ADD

oItem.sUrl = "/wwstore/item.wws"

oItem.sVerb = "GET"

*** Now run the script

oWas.ActiveScriptIndex=lnSCriptID

oWas.StartTest(1)

There's much more to the object model including asynchronous operation and a status property you can check for the status of the current test. A complete if somewhat scattered object reference is provided in the help file.

A final word of warning

You should also realize that this tool (and others like it from hacker toolkits to other stress testing tools) has the potential to do great damage to any public Web site! This tool is incredibly easy to use and it's just as easy to point it at an unsuspecting site and cripple its operation as demonstrated by the recent denial of service attacks on large commerce sites (they didn't use WAS but similar tools). If you're on the receiving end of such an attack you need to be able to have information available to identify the problem and be able to take action such as blocking the offending client(s). Logging and frequent monitoring of your applications are the only way to protect yourself from these kinds of attacks if or when they occur. Understanding how a tool like WAS works can help you identify the problem more rapidly and let you hopefully take action to prevent the attack.

You can protect yourself from WAS at least by using a robots.txt file. Robots.txt is used by well-behaved crawlers and other agents to search and index only parts of your Web site you want to have exposed. To keep WAS out of your Web site add the following to your robots.txt file:

Disallow: /

User-Agent: stress-agent

Other stress testing tools or hacker tools won't be so kind so beware… It's really too bad we have to worry about threats like this, but the reality is that if disruption can be caused, somebody will be there to do it. Be aware and keep an eye on your sites.

I want to thank Matt Odhner, program manager for WAS at Microsoft, for his help and clarification of several issues related to this article.

Rick Strahl is president of West Wind Technologies on Maui, Hawaii. The company specializes in Internet application development and tools focused on Internet Information Server, ISAPI, C++ and Visual FoxPro. Rick is author of West Wind Web Connection, a powerful and widely used Web application framework for Visual FoxPro, West Wind HTML Help Builder, co-author of Visual WebBuilder, a Microsoft Most Valuable Professional, and a frequent contributor to FoxPro magazines and books. His new book "Internet Applications with Visual FoxPro 6.0", was published April 1999 by Hentzenwerke Publishing.