본문 바로가기

23년 2학기 학교공부/컴퓨터네트워크

[CN] locust로 서버 성능 테스트하기 (파이썬)

목차

    728x90
    반응형
    SMALL

    📁 Locust

     

     

     

    가장 유명한 도구 중하나인 locust. locust라는 도구를 이용하면 가상의 클라이언트 n개를 만들고 그 가상의 사용자들이 우리의 웹서버로 get post delete같은 요청을 하는 일련의 테스트 과정을 만들 수 있음. 

     

     

    📁 Locust 설치 방법 (윈도우)

     

     

    📁 Stress test vs. Load test

     

    스트레스 테스트는 극한의 환경들, 추운 환경, 더운 환경, 먼지가 많은 환경에서 어떻게 동작하는가, 그런 곳에서 에러 컨트롤이 되는가를 보는 것. 이럴때는 보통 에러 메세지를 보고 시스템을 복원하는 등의 작업을 함.

     

    Load test는 하나의 PC, 우리의 서버가 몇명까지 서빙이 되고 케어할 수 있는가를 봄. 그래서 사용자 수, 동시 접속자 수, 응답 속도 등을 봄.

     

     

    📁 locust 실습

     

    from locust import HttpUser, task
    
    class User(httpUesr) :
    	@task
        def get_index(self) :
        	self.client.get('/')

    User라는 클래스가 생성되어 우리가 목표로 하는 타겟 서버에 '/' get 요청을 계속 보낸다.

     

     

    터미널에 locust 라고 입력해서 실행하면 접속할 수 있는 http 링크를 보여줌.

     

    spawn rate란 초당 몇 명의 유저를 만들어낼거냐. 이때 유저를 만든다는건 프로세스를 만든다는 것, 그러면 PCB가 만들어지고, 그 안의 control block들을 만들려면 시간이 필요함.

     

    즉 spawn rate가 지나치게 높으면 일반적으로 못만듬. 일반적인 컴퓨터에서는 100이 한계라고 알려져있음. 100을 넘기면 이런 메세지가 뜸.

     

    요청이 계속되고, Average (ms) 부분은 평균 14386ms로 응답이 돌아오고 있다.

    상단 STATUS가 지금은 STOPPED이지만 실행중일때는 SPAWNING인데, 그 아래에 현재 유저의 수가 쓰여있음.

     

    상단 RPS가 초당 request를 몇개 보내는지. 근데 이게 증가를 멈추는 지점이 있는데 유저가 너무 많아지면 프로세스 매니지먼트가 안되는 지경에 도달함.

     

    90%ile (ms) 는 유저의 90%가 29000ms안에 응답을 받았고, 99%ile (ms)는 유저의 99%가 33000ms 안에 응답을 받았음. 즉 대부분 29초 안에 응답을 받았는데, 33초가 걸린 애들도 있다는 뜻.

     

     

    차트를 보면 rps가 줄어드는 지점이 있는데, 그 지점의 유저들 수가 있어야 rps를 유지할 수 있다 그런말임. 거기서멈췄어야함.

     

     

    connection reset error : 피어에서 커넥션을 끊었다. 웹서버가 너의 연결을 끊었다. 더이상 요청을 못받는 다는 뜻.

    timeout error : 서버 연결은 됐는데 요청을 받지 않을때. (대기열 기능 없을때)

     

     

     

    rps 차트가 급감하는 지점 없이 완만하게 끝까지 가는 차트면 이 실험은 어느정도 신뢰 가능하다, 현실과 비슷하게 진행이 됐다라고 봐도 됨.

     

    rps가 급감했다가 급증하는 경우가 있음. 이건 os가 클라이언트를 관리하다가 요청을 못보냈다는 얘기고, 이런 차트는 신뢰할 수 없는 실험이 됨. 웹서버도 정상 동작했다고 볼 수 없음.

     

     

     

    사실 localhost는 PC 외부로 나가는 인터페이스가 아니라 내부에 존재하기 때문에 웹서버에 대한 제대로 된 측정을 할 수 없음.

     

    예를 들어 크기가 큰 이미지를 localhost에서 서빙할때 wireshark로 패킷을 캡쳐해보면 패킷 크기가 65545와 같이 엄청 크다. 즉 로컬호스트는 소켓처럼 동작하는 파일이다. 

     

     

    그래서 두개의 pc로 서로의 nic로 요청해보자.

     

     

     

    📁 Failure

     

     

    728x90
    반응형
    LIST