※ 사전 내용 ※

1. 프로그램(Program)

- OS 상에서 실행할 수 있는 파일

- 메모리에 올라가 있지 않고, 실행되기를 기다리는 정적 데이터의 묶음

- 프로그램을 실행하면, 메모리에 올라가게 되고 동적 상태가 된다.

 

2. 프로세스(Process)

- 메모리에 올라와 실행되고 있는 프로그램 인스턴스

- 각 프로세스는 OS에게 독립된 메모리 영역을 할당받는다. 각 프로세스의 메모리 영역은 타 프로세스가 접근할 수 없다.

- 각 프로세스는 Code / Data / Stack / Heap 로 구성된 독립적인 메모리 영역이다.

 

3. 쓰레드(Thread)

- 하나의 프로세스 내에서 실행되는 여러 흐름의 단위

- 쓰레드는 프로세스 내의 Stack을 할당받고 Heap, Code, Data는 쓰레드간에 공유한다.

 

4. 멀티 프로세스

- 하나의 프로그램을 처리할 때, 여러 프로세스를 사용하여 처리

- 여러 프로세스 중 하나의 프로세스가 죽어도 타 프로세스에 영향을 받지 않고 정상적으로 처리된다.

- 멀티 쓰레딩 방식에 비해서 리소스 사용량이 많다.

 

5. 멀티 쓰레딩(Multi-Threading)

- 멀티 쓰레딩은 하나의 프로세스를 여러 개의 쓰레드로 구성하여 처리

- 각 쓰레드는 서로 자원을 공유하고 효율적으로 처리하기 때문에,  빠른 처리속도와 효율적인 리소스 사용 효과가 있다.

 

참고 URL

https://goodmilktea.tistory.com/24

 

 

Apache MPM

 

1. Apache MPM이란?

- Apache가 받은 요청을 처리하기 위해서 자식 프로세스에게 분배하는 모듈

- 종류 : Prefork, Worker, Event

 

2. Prefork 방식

1) 특징

- 1개의 요청에 1개의 프로세스를 할당하여 처리한다.

- 1개 프로세스에 1개의 쓰레드를 갖는다.

- 자식 프로세스들을 "StartServers" 설정값만큼 미리 생성한다.(최대 1024개까지 생성 가능)

* 요청 : 프로세스 : 쓰레드 = 1 : 1: 1

→ 1개의 요청에 대해 1개의 프로세스 속에 있는 1개 쓰레드에서 처리

 

2) 장점

- 각 요청은 각 프로세스가 처리하기 때문에, 특정 프로세스에서 문제가 발생해도 타 프로세스에 영향이 없다.

- 쓰레드간 독립적으로 메모리를 사용하므로 안정적이다.

 

3) 단점

- 다량의 요청을 처리하기 위해서는 많은 수의 프로세스가 필요하기 때문에 리소스 사용량이 증가한다.

- 통신량이 많은 서버에서는 상대적으로 불리하다.

 

3. Worker 방식

1) 특징

- 여러 개의 요청에 대해 1개 프로세스 내에 여러 쓰레드를 생성 및 할당하여 처리하는 방식

- 1개 프로세스 내에 여러 쓰레드를 생성한다.

* 요청 : 프로세스 : 쓰레드 = 5 : 1 : 5

→ 5개의 요청에 대해서 1개 프로세스 내 5개의 쓰레드가 처리

 

2) 장점

- 1개 프로세스에 할당된 리소스를 여러 쓰레드가 공유하므로 리소스 사용량이 비교적 적고 효율적으로 쓸 수 있다.

- 통신량이 많은 서버에서 비교적 유리하다.

 

3) 단점

- 각 프로세스 내에 여러 쓰레드가 있으므로, 프로세스 오류 발생하면 해당 프로세스의 모든 쓰레드가 영향받는다.

 

4. Event 방식

1) 특징

- Worker 방식을 토대로 하며, Nginx에서 사용하는 방식

- 고정된 프로세스 개수를 생성하여 처리한다.

 

2) 장점

- 동시에 요청이 많더라도 프로세스와 쓰레드 생성에 대한 비용이 발생하지 않는다.

- Event-driven(비동기 방식)을 이용하여 처리하며, 요청이 순서대로 처리되기까지 대기/중단되는 현상이 감소할 수 있다.

 

3) 단점

- 특정 요청에 대한 처리 시간이 길어진다면, 다른 요청의 처리 시간도 길어지는 현상이 발생할 수 있다.

 

5. MPM 지시어

1) Prefork

 

<IfModule mpm_prefork_module>

  StartServers                 64
  MinSpareServers         128
  MaxSpareServers         256
  ServerLimit                   2048
  MaxClients                   2048
  MaxRequestsPerChild     512

</IfModule>
StartServers Apache start시 자식 프로세스 개수
MinSpareServers Apache가 유지할 최소 자식 프로세스 개수
MaxSpareServers Apache가 유지할 최대 자식 프로세스 개수
ServerLimit Apache가 생성 가능한 최대 자식 프로세스 개수
(설정 값 이상 자식 프로세스를 생성 불가)
MaxClients 동시에 접속 할 수 있는 Client의 최대 값
MaxRequestsPerChild 1개의 자식 프로세스가 받을 수 있는 최대 요청 개수

 

2) Worker방식

 

<IfModule mpm_worker_module>
  StartServers                 3
  MinSpareThreads        256
  MaxSpareThreads        512
  ThreadLimit               4096
  ThreadsPerChild        128
  ServerLimit                32
  MaxClients               4096
  MaxRequestsPerChild  10000
</IfModule>
StartServers Apache start시 자식 프로세스 개수
MinSpareThreads Request spike를 처리할 최소한의 idle 쓰레드 개수
MaxSpareThreads idle 쓰레드 최대 개수
ThreadLimit 자식 프로세스 1개에 구성할 수 있는 최대 값
ThreadsPerChild 자식 프로세스가 생성할 쓰레드 개수
ServerLimit 생성 가능한 자식 프로세스의 개수
MaxClients
(=MaxRequestWorker)
동시에 처리될 커넥션 최대 개수
MaxRequestsPerChild
(=MaxConnectionsPerChild)
자식 프로세스가 처리할 request/커넥션 개수

 

 

참고 URL1

https://m.blog.naver.com/viaweb/222190352925

 

참고 URL2

https://sangchul.kr/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%95%84%ED%8C%8C%EC%B9%98-%EC%9B%B9%EC%84%9C%EB%B2%84-MPMprefork-worker-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95

+ Recent posts