아파치 mpm(multi-processing module) 의 방식
- worker MPM: 프로세스당 스레드 여러개
- prefork MPM: 프로세스당 스레드 1개
- 자식 프로세스는 최대 1024개 까지 가능
- 스레드 방식보단 안정적 → 스레드 안전성 이슈가 없음
- event MPM
- worker에 기반을 두고 있음
- worker나 prefork는 요청 처리 프로세스/스레드가 1:1로 점유하고 있음
- event방식은 요청 처리를 전담하는 리스너 스레드를 두어 과도한 오버헤드를 막음
prefork 설정
StartServers: 서버 시작 시 자식 프로세스 개수
MinSpareServers: 유휴(idle) 상태로 있을 자식프로세스의 최소 개수
MaxSpareServers: 유휴(idle) 상태로 있을 자식프로세스의 최대 개수
MaxClients: 동시 요청을 처리할 최대 프로세스의 개수
- 동시 요청 이상의 요청이 올 경우
ListenBackLog 에 의해 대기큐에 큐잉됨
- OS의 최대 file discriptor 값과도 연관
- Tomcat의 maxThreads 값을 고려하여 설정해야함
- 무조건 키우기 보단 성능 측정 후 적정한 값을 세팅해야함
- 그렇지 않다면 너무 많은 요청을 받아들여 오히려 처리량이 떨어질 수 있음
- 2.3.13 이후버전에서는 MaxRequestWorkers 로 변경
ServerLimit
- 생성 가능한 프로세스의 최대 개수
- MaxClients 보다 높게하지 말 것 - 쓸데없이 미사용되는 메모리가 할당 될 수 있음
MaxRequestsPerChild
- 자식 프로세스가 MaxRequestsPerChild 만큼의 요청을 받은 후에는 프로세스 다시 생성(0 이면 자식 프로세스를 재생성 하지 않음)
- 즉, 오래된 프로세스를 죽이고 새로 생성 하기 위한 용도로 메모리 누수(leak) 등이 있을 경우 이를 회피하기 위한 목적도 있음