※ 사전 내용 ※
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
'Infra > Apache' 카테고리의 다른 글
Apache - Tomcat 멀티 인스턴스 로드밸런싱 설정(RHEL7, RHEL8) (0) | 2023.10.20 |
---|---|
Apache web Server 컴파일 설치(RHEL 7 & RHEL 8) (0) | 2023.10.17 |
아파치와 톰캣 멀티 인스턴스 연동하기(httpd.conf 설정) (0) | 2023.07.19 |
아파치와 톰캣 연동(CentOS7, RHEL 7) (0) | 2023.07.19 |
apache 설치 및 이름 기반 가상호스트 사용 (0) | 2023.07.19 |