프로세스가 과도한 메모리를 사용할 경우

특별히 이상한 프로세스는 없는데, 시스템의 부하가 갑자기 올라가는 경우가 있다. 심할 경우에는 콘솔에서 키 작동이 되지 않아 제어 자체가 불가능한 경 우도 있는데, 이러한 경우는 어쩔 수 없이 시스템을 재 시작하는 수밖에 없다. 이는 의도적이든 아니든 유저가 cgi나 php 등의 프로그램을 잘못 짜서 과도한 메모리를 소모하는 프로세스를 실행하기 때문인 경우인데, 실제로 시스템의 메 모리를 많이 소모하는 프로그램을 짜는 것은 단 몇 줄의 코드로도 가능하다. 다음과 같이 메모리를 소모하는 간단한 C 코드를 작성해 보자(참고로 스크립트 키드의 악용을 막기 위해 코드 중 일부를 변경하였다).

/* memory.c */

#include
#include

void html_content(void);

int main() {
char *some_memory;
int size_to_allocate = ONE_K;
int megs_obtained = 0;
int ks_obtained = 0;

html_content();
printf("Program Executed !!!

");

while (1) {
for (ks_obtained = 0; ks_obtained < 1024; ks_obtained++) {
some_memory = (char *)malloc(size_to_allocate);
if (some_memory == NULL) exit(EXIT_FAILURE);
sprintf(some_memory, "Hello World");
}
printf("Now allocated %d Megabytes

", megs_obtained);
}
exit(0);
}

void html_content(void)
{
printf("Content-type: text/html

");
}
작성 후 gcc -o memory.cgi memory.c로 컴파일 한 후 이 파일을 http://domain.com/memory.cgi와 같이 웹에서 실행해 보도록 하자. 아무리 메 모리와 CPU의 여유가 있는 시스템이라 하더라도 이 프로그램을 실행하자마자 거의 통제 불능 상태로 되어 결국 시스템 재부팅하게 될 것이다. 이렇듯이 메 모리를 무한정 소모하는 것을 차단하기 위해서는 아파치의 설정 인자 (Directive) 중에서 RLimitMEM을 사용하여 차단할 수 있다. 이 인자는 아파치 웹 서버에서 생성된 특정 프로세스가 작동시 소요 가능한 최대 메모리의 양을 제한하는 것으로 메모리를 많이 소모하는 CGI가 작동할 때 이 인자에서 지정 된 메모리까지만 실행이 되고 그 이상 소요시에는 더 이상 작동하지 않도록 해 준다.


예를 들어 httpd.conf에 다음과 같이 설정하였다면 모든 디렉토리에서는 메모 리를 20MB나 최대 21MB까지만 사용이 가능하고 /home /special/public_html/* 디렉토리 이하에 접근 시에는 특별히 50MB까지 메모리 이용이 가능하게 된다.

RLimitMEM 20480000 21504000


RLimitMEM 51200000 52224000

실제로 위와 같이 설정 후 memory.cgi를 웹에서 호출하면 아래와 같이 일정량 의 메모리만 사용되고 중단하는 것을 확인할 수 있다. 이와 비슷한 인자로 CPU 점유율을 제한하는 RLimitCPU와 사용자당 프로세스의 개수를 제한할 수 있는 RLimitNPROC이 있다. 이에 대해서는 http://httpd.apache.org/docs-2.0/mod/core.html를 참고하기 바란다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/17 13:36 2004/08/17 13:36
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/208

Trackback URL : http://tcbs17.cafe24.com/tc/trackback/208

« Previous : 1 : ... 5781 : 5782 : 5783 : 5784 : 5785 : 5786 : 5787 : 5788 : 5789 : ... 6391 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/05   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Statistics Graph

Site Stats

Total hits:
186732
Today:
201
Yesterday:
789