Docker - Stress Test

Docker

부하 테스트

부하 테스트 프로그램인 stress를 통하여 cpu와 메모리 부하테스트를 실행할 수 있다.

CPU 부하테스트

  • 특정 CPU core를 100%를 사용하도록 부하를 발생시킨다
  • stress --cpu 2 : 2개 cpu를 100% 사용한다.

메모리 부하테스트

  • 프로세스 수와 설정한 메모리만큼의 부하를 발생시킨다.
  • stress --vm 2 --vm-bytes 150m : 2개 프로세스를 150MB로 실행

메모리 100m를 할당하고 90m의 부하를 발생시켰을 때는 성공적으로 작동하지만, 100m를 할당하고 150m의 부하를 주었을 때는 OOM(Out Of Memory) killer를 통해 프로세스가 바로 kill된다.

1
2
3
4
5
6
7
8
9
10
$ docker run -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 90m -t 5s
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: info: [1] successful run completed in 5s

$ docker run -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 150m -t 5s
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: FAIL: [1] (415) <-- worker 9 got signal 9
stress: WARN: [1] (417) now reaping child worker processes
stress: FAIL: [1] (421) kill error: No such process
stress: FAIL: [1] (451) failed run completed in 0s

OOM disable

--oom-kill-disable=true 속성을 통해 Out Of Memory가 발생했을 때 컨테이너가 kill되는 것을 방지할 수 있다.

확인하는 방법에는 아래와 같이 2가지가 있다.

1. docker inspect

docker inspect를 통해 컨테이너 속성을 확인해보면 아래와 같다.

  • memory는 100MB
  • swap-memory는 설정하지 않았기 때문에 200MB (default=memory의 2배)
  • OomKillDisable : true
$ docker run -d -m 100m --name m4 --oom-kill-disable=true nginx

$ docker inspect m4
1
2
3
4
5
6
7
8
9

#### 2. cgroup

실제 resource는 `cgroup-memory-doker-containerID` 디렉토리에 설정해준다.

아래 코드를 통해 확인해보면 `oom_kill_disable 1`이 설정되어있는 것을 확인할 수 있다.

```shell
cat /sys/fs/cgroup/memory/docker/[containerId]/memory.oom_control
Author

Inwoo Jeong

Posted on

2022-01-14

Updated on

2022-01-14

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

댓글