CPU를 극단적으로 사용하는 애플리케이션 만들기

LJH·2021년 5월 21일
4

DevOps 강의 (feat. Foo)

목록 보기
3/16
post-custom-banner

해당 내용은 Class101의 현직 대기업 개발자 푸와 함께하는 진짜 백엔드 시스템 실무! 강의를 기반으로 작성했습니다.

😀 목표

  • 컴퓨터가 어떻게 프로그램을 실행시키는지 알아보기
  • 프로그램과 프로세스의 차이 알기
  • CPU bound 애플리케이션과 I/O bound 애플리케이션 알기
  • hash연산을 위해 CPU를 극단적으로 사용하는 애플리케이션 만들기
  • GCP 인스턴스에 CPU bound 애플리케이션 수동 배포해보기

1. 컴퓨터가 프로그램을 실행시키는 과정

  • 하드디스크에 저장되어 있는 프로그램이 실행되게 되면 메모리에 올라가 프로세스가 된다.
    프로세스 중 일부는 CPU 스케줄링에 의해 CPU에서 실행된다.
  • 그럼 왜 중간에 메모리가 끼어있을까? 하드디스크와 CPU의 속도차이가 심하기 때문이다.
    아무리 CPU가 빨라도 하드디스크가 느리기 때문에 효율을 제대로 낼 수가 없다.

I/O

Input/Output으로 입출력을 의미한다. 하나의 프로세스가 I/O를 수행하는 동안 CPU는 놀지않고 다른 프로세스를 실행시킨다. I/O의 종류에는 하드디스크 뿐만아니라 DB, 네트워크에 대한 I/O도 있다.

I/O Burst vs CPU Burst

하나의 프로세스가 실행중일 때 I/O 하는 시간을 I/O Burst 라고 하며, CPU에서 실행되는 시간을 CPU Burst 라고 한다.

I/O Bound vs CPU Bound

해당 프로세스가 전체적으로 I/O를 많이 하는 애플리케이션이라면 I/O Bound 어플리케이션이라고 이야기하고, CPU를 많이 사용하는 애플리케이션이라면 CPU Bound 어플리케이션이라고 한다.


2. Hash

CPU를 많이 사용하는 애플리케이션 즉 CPU Bound 어플리케이션을 만드는 방법은 여러가지가 있지만 Hash연산을 많이 반복하는 방법을 이용한다. Hash 중 MD5 Hash 연산을 사용한다.


3. 애플리케이션 다운로드 후 실행

  • 링크 에서 다운받을 수 있다.

  • 하나의 컨트롤러만 존재하는 간단한 애플리케이션이다.
  • 간단하게 getDigest 메서드는 url로 전송된 input값을 10만번 반복해서 hash하여 리턴한다는것만 알아두자.
  • 애플리케이션을 실행 후 localhost:80/hash/1234 경로로 접속하면 1234가 hash화 되어 나온 문자열을 볼 수 있다.

4. GCP 인스턴스에서 애플리케이션 실행하기

4-1. jar파일 추출

  • 우측의 maven 클릭 → LifeCycle → deploy 클릭 하면 jar파일을 얻을 수 있다.

  • 좌측 target 폴더 아래에 .jar 파일이 생성된걸 볼 수 있다.

  • 이제 jar 파일을 github에 올리고 gcp 인스턴스에서 pull해오면 된다.

4-2. 새 인스턴스 생성

  • 과정은 이전과 동일하다. 인스턴스 이름과 리전만 다르다.

4-3. 인스턴스에서 jar파일 다운로드 후 실행

우선 wget과 java를 설치해준다.

  • wget은 http, ftp 포로토콜을 이용해 파일을 다운로드 받기 위한 소프트웨어이다.
    sudo yum install wget
    sudo yum install java

  • 처음에는 에러가 나서 댓글을 살펴보니 에러나면 CentOS8로 바꿔서 해야된다고 한다..
    근데 그냥 한번 더 입력해봤더니 그냥 됐다.

git 에서 jar 파일 다운로드

wget https://github.com/lleellee0/class101-files/raw/main/cpu-0.0.1-SNAPSHOT.jar

jar파일 실행

sudo java -jar cpu-0.0.1-SNAPSHOT.jar

접속

시간 확인

  • 기본적으로 19ms정도가 걸리고 hash/123 url로 접속 즉 hash 10만번을 수행하면
    101ms정도가 나온다.
  • 그러면 101 - 19 = 80ms가 hash 10만번을 수행해서 걸리는 시간이라는걸 알 수 있다.
post-custom-banner

0개의 댓글