메뉴 건너뛰기

서버/호스팅

휘즈 2018.11.23 03:02
조회 수 : 453

프로세스 (Process)

프로세스의 사전적 의미는 아래와 같습니다.

컴퓨터에서 연속적으로 실행되고 있는 프로그램

부연 설명하면 프로세스는 컴퓨터에 설치되어 있는 게임이나 문서작성프로그램 등 프로그램이 메모리상에 실행되는 작업입니다.

과거의 OS, MS-DOS 등은 한번에 한가지 작업밖에 할 수 었었습니다.

최근의 OS들은 한번에 여러가지 작업을 할 수 있고 여러개의 프로세스를 동시에 실행하는 것을 멀티태스킹이라합니다.

멀티태스킹이 되는 대표적인 운영체제가 윈도우, 유닉스 그리고 리눅스입니다.

웹서버는 여러사람이 동시에 사용하는 것이니 당연히 멀티태스킹이되어야 하겠지요.

 

프로세스는 메모리 영역을 독립적으로 할당받아 실행됩니다. 따라서 각 프로세스는 서로 영향을 미치지 않습니다.

예를 들어 아파치 프로세스가 5개 실행되고 있는데 그중 1개가 문제가 생겨 중단된다고 해도 나머지 4개는 영향을 받지 않고 계속 실행됩니다. 

 

스레드 (Thread)

스래드의 사전적 의미는 아래와 같습니다.

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

스레드는 프로세스내에서 동작하는 여러 실행의 흐름입니다.

프로세스는 기본적으로 1개의 스레드를 갖고 있고 1개 이상의 스레드를 가질 수 있으며 이를 멀티스레드라고 합니다. 

스레드는 메모리에서 stack만 따로 할당을 받고 나머지 부분은 메모리영역을 공유합니다.

따라서 동시에 여러 작업을 하더라도 반응속도가 빠르고 메모리 사용이 적습니다.

단점은 같은 프로세스내의 여러 스레드 중 1개가 문제가 생겼을 때 그프로세스 내의 모든 스레드가 영향을 받는다는 것입니다.

 

웹서버

apache

아파치는 예전 부터 지금까지 가장많이 사용되고 있는 프로그램입니다.

아파치는 3가지 MPM( Multi-Processing Module)이 있습니다.

prefork, worker, event

1. prefork mpm

prefork mpm은 1개의 메인프로세스에 최대 1024개의 자식 프로세스를 생성하여 요청을 처리합니다.

1개의 프로세스에 1개의 스레드만 있어 안정적이나 메모리를 많이 사용합니다.

prefork 방식을 사용하는 경우는 사용하는 아파치 모듈이 스레드에 안전하지 않은(non thread safe) 경우에 사용합니다.

대표적인 것이 php입니다. php는 스레드에 안전하지 않기 때문에 아파치 모듈에서 스레드로 사용할 수 없고 각각의 프로세스에서 사용하게 됩니다.

따라서 php를 아파치 모듈로 사용할 겅우에는 prefork mpm을 사용하여야 하고 다중 스레드를 사용하는 worker, event mpm에는 php-fpm을 사용하여 별도의 프로세스로 연결해야 합니다.

그런데 css, js, 이미지 파일 등 정적파일은 php모듈이 필요하지 않습니다. 그러나 prefork mpm은 모든 프로세스가 php모듈을 포함하고 있으므로 필요 이상의 메모리를 사용합니다.

아파치가 nginx에 비해 정적파일 처리에 불리하고 메모리 사용량이 많다는 단점은 prfork mpm을 사용할 경우 극명하게 나타납니다.

prefork mpm을 사용할 경우 동시접속자 처리에 매우 불리하고 동시접속자 수를 늘리기 위해서는 KeepAlive를 off하거나 KeepAliveTimeout를 짧게해야 합니다.

 

2. worker mpm

worker mpm은 프로세스당 여러개의 스레드를 연결합니다.

메모리 사용량이 적어 동시접속이 많은 경우 사용합니다.

 

3. event mpm

event mpm은 2,4 버전부터 사용할 수 있으며 worker mpm을 더욱 개선한 것입니다.

 

worker mpm, event mpm에서는 non thread safe인 php를 아파치에 모듈로 포함할 수 없고 php-fpm을 사용하여야 합니다.

nginx

아파치의 prefork mpm이 너무 무거워 많은 동시접속자수를 처리하기에는 한계가 있어 lighthttpd등 웹서버를 경량화하기 위한 노력이 있었고 많은 인기가 있었습니다.

그러나 nginx가 나오면서 가벼운 웹서버로서는 nginx가 최고의 인기를 구가하게 되었습니다.

nginx 는 event-driven방식의 경량 웹서버입니다.

nginx의 event-dirven 방식은 아파치의 event mpm과는 다릅니다.
메모리를 훨씬 적게 사용하면서 동시접속에 효율적입니다.

( 참조 : https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/ )

 

 

 

 

 

 

파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )