서버 메모리 풀 로드로 인한 프리징 현상에 대해서..
안녕하세요..
23일부터 오늘 까지 이유를 알수 없는 메모르 풀 로드로 인해 서버의 프리징 현상이 계속 되고 있습니다.(2~4시간 간격)
해당 상황이 있을때 아파치를 내렷다 다시 바로 올리면 상황이 해제 됩니다..
콘솔에서 watch -d -n 1 "netstat -nlpa |grep SYN" 입력후 나오는 ip 들이 수백개는 아니고
많아야 같은 아이피 10개~15개정도 됩니다. (로봇 아이피로 파악되고 있습니다.)
헌데, 메모리가 급증하고, 스왑까지 다 사용해서 서버가 약 1분에서 길게는 5분까지 멈춰버리네요.
콘솔 입력도 안되구요.
해당 상황이 일어날때 watch -d -n 1 "netstat -nlpa |grep SYN" 에서 봐도 동일 ip 가 많지 않습니다..
top 으로 봤을때 httpd 가 메모리 차지 비율이 계속 늘어나며 현재 메모리 8기가와 스왑까지 다 사용합니다. 트래픽은 늘어나지 않습니다. 동시접속 1초단위로 봤을때도 20명 남짓인 상황에서도 나더라구요.
또한, 아파치 에러로그를 살펴봐도 그리큰 문제가 있는 에러가 없습니다..
아파치 컴파일은 최근에 메모리 사용량을 조절한게 있지만,다시 원상태로 복구 했습니다.
사양은 아래와 같이 사용하고 있습니다.
cpu : XEON sandyBridge E3-1230
ram : 4GB >> 오늘 4기가 추가 증설.
(총 8기가에 스왑은 동일합니다. httpd 가 8기가의 메모리를 다 잡아먹으며, 약 1~5분 프리징 현상 후 아래의 메세지와 함께 정상으로 돌아옵니다.)
아래 스샷 처럼 httpd 메모리 점유가 mysql 보다 원래 높은지요. 해당 메모리 점유율이 조금씩 증가합니다..(우측하단은 동접 입니다.)
상황이 일어날때 messages 파일을 보니
Sep 28 20:17:12 xxxxx kernel: httpd[32531]: segfault at 0000006d0000007f rip 0000003e0cc72cd1 rsp 0000000043f3c340 error 6
상황이 진전중에는 이런 메세지구요.
Sep 28 20:23:39 xxxxxxxx kernel: Free swap = 0kB
Sep 28 20:23:39 xxxxxxxx kernel: Total swap = 2096472kB
Sep 28 20:23:39 xxxxxxxx kernel: Free swap: 0kB
Sep 28 20:23:39 xxxxxxxx kernel: 1310720 pages of RAM
Sep 28 20:23:39 xxxxxxxx kernel: 302229 reserved pages
Sep 28 20:23:39 xxxxxxxx kernel: 5777 pages shared
Sep 28 20:23:39 xxxxxxxx kernel: 1 pages swap cached
Sep 28 20:23:39 xxxxxxxx kernel: Out of memory: Killed process 32511, UID 99, (httpd).
Sep 28 20:24:18 xxxxxxxx snmpd[2334]: Connection from UDP: [127.0.0.1]:56938
이미 확인을 해보셨을 것 같습니다만 생각나는데로
이미 확인을 해보셨을 것 같습니다만 생각나는데로 써보자면...
1. httpd를 컴파일해서 직접 설치하셨나보네요. 배포판에 맞는 이미 패키징된 걸 쓰시거나 업그레이드를 해보시길.
2. 메모리를 많이 잡아먹는 CGI 프로세스가 있을 가능성
3. httpd 특정 모듈이 문제를 일으키는 경우도 있습니다. 모듈을 하나씩 disable 시켜보세요.
- 예를 들자면 httpd가 하는 일은 별다는 게 없는데 php모듈이나 기타 다른 CGI관련 모듈이 문제일 수도 있을 것이고
4. 로봇 처리 확인
말씀해주신 부분들에 대해 체크 해보도록
말씀해주신 부분들에 대해 체크 해보도록 하겠습니다..
말씀 감사합니다..
apache dos 취약점?
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3192
DOS 공격을 받는게 아닌가 싶습니다.
문제 상황 당시의 아파치 로그를 보여주시는 게 분석에
문제 상황 당시의 아파치 로그(에러로그 말고 access_log)를 보여주시는 게 분석에 더 도움이 될 듯 합니다.
댓글 달기