Apache 와 HTTP에 대해 잘 아시는분!!!
현재 서버 테스트를 하고 있습니다.
Solaris 8 환경에 Unix C로 코딩을 하였구요..
HTTP를 이용하기 위해 Apache 서버와 fcgi를 사용하였습니다.
Flow는 다음과 같습니다.
Simulator로 제작한 Agent에서 Apache로 xml문서를 전송합니다.
이를 수신한 Apache 서버는 http를 이용해서 이를 서버로 전송합니다.
서버에서는 처리할 걸 다 처리하고 이에 대한 응답을 Apache에 전송하고
Apache는 이를 Agent에게 전송합니다.
위의 과정이 원활히 진행되는것을 확인하여..
스트레스 테스트를 해보기 위해 동시에 다수의 메시지를 전송하여보았습니다.
Agent에서 동시에 5개의 메시지를 생성하여(Fork로 생성 & 전송 하였습니다.) Apache로 전송하고
Apache에서는 이를 동시에 처리하기 위해 http를 처리하는 프로세스를 5개를 띄웠습니다.
( Apache는 큐를 이용하기에 이를 병렬적으로 처리하기 위해 여러개를 띄웠습니다. )
문제는 여기서 발생하였습니다.
5개 메시지는 apache의 프로세스가 잘 떠있으면 무리 없이 진행 되는데..
문제는 CPU 점유율이 엄청 올라간다는 것입니다.
그래서 이번엔 10개의 메시지를 전송해밨습니다.
프로세스가 진행됨에 따라 10개의 프로세스가 CPU를 100%먹는 상황이 발생했고
한 블럭이 메모리 참조를 못 해서 그런지 뻗어버렸습니다.
여기서 궁금한 것이...
Apache에서는 요청를 병렬적으로 처리 하기 위해서는 프로세스를 띄우는 방법외에 다른 방법이 없을까요?
50개 100개에서 테스트 하고 싶은데 10개에서 뻗어버리니 참 난감합니다 ;;
조언 부탁드립니다~
멀티-쓰레드 방식이 있으나~
아파치는 동시접속을 처리하는 방식으로 멀티-프로세스 방식 외에 멀티-쓰레드 방식이
있는 걸로 알고 있습니다. 하지만 쓰레드가 하나 생성되기 위해서도 메모리를 잡아
먹어야 하니.... 별 차이 없을 듯~
anyway, 10개정도로 메모리가 full날지경이면 님의 플랫폼의 메인 메모리 크기가
매우 작나보죠? 보통 1GB메모리에 아파치프로세스가 수백개규모까지 생길 수 있는데....
/***************************************
Being the one is just like being in love.
***************************************/
댓글 달기