운영하던 홈페이지에 갑자기 에러가 발생했다.
"Connect Error: Too many connections"
처음보는 에러라 당황했는데 인터넷 검색해 보니 mysql의 max_connections 설정을 수정하란다. 그래서 mysql 접속하려는데 서버 속도가 너무 늦다. 직감적으로 mysql 문제는 아닌 거 같았다.
#] service httpd restart
전자 기계가 안 될 때는 다시 리부팅!!! 그런데 서버를 재실행 하려는데 에러가 생긴다.
Job for httpd.service failed because a configured resorce limit was exceeeded. see "systemctl status httpd.service" and "journalctl -xe" for details.
에러 메시지를 보니 내 직감이 거의 맞는 거 같다. 어쨌든 시스템 리소스 부족이다. 이럴 땐 주 메모리 부족이 원인 일 때도 있지만 저장장치(hdd, ssd)가 꽉 찬 경우 흔하게 발견된다. 옛날에 윈도우도 자주 이런 증상을 보였었다. 웹서버의 경우 log 파일이 가끔 이런 문제를 일으킨다. 가끔 악성코드가 특정 파일을 감염시켜 파일 크기를 무한대로 키워 서버를 다운 시키기도 한다. (웹서버의 경우 index.* 파일이 주로 악성코드 감염되기 쉽다.)
]# du -sh /*
디렉토리별로 사용량을 검사해 보니 짐작 했던 곳에서 과도한 사용량을 보이고 있다.
"df -h /" 명령으로 해도 상관은 없지만 마운트 된 저장소의 디렉토리까지 보려면 du가 편하다.
/var에서 용량을 과도하게 사용하고 있는 걸 확인 했으니 cd /var로 들어가 문제를 일으키고 있는 디렉토리나 파일을 찾아야 한다.
]# cd /var
]# du -sh *
VPS에서(가상서버호스팅) 할당받은 총 용량이 30GB인데 ./log 디렉토리에서 24GB를 거의 독차지하고 있다.
]# cd log
]# du -sh *
log/httpd 디렉토리 사용량이 늘어난 거 보니 아파치(httpd) 로그 파일에서 뭔가 문제가 생겼던 것이다.
]# cd httpd
]# du -sh *
크기가 과도한 log 파일을 들을 보니 며칠 전부터 조짐이 있어왔다.
]# rm -rf 파일(혹은 디렉토리)
]# service httpd start
문제가 있는 log 파일을 삭제하고 아파치를 재실행하니 다시 정상으로 돌아왔다.
[Sun Jan 06 00:59:48.558386 2019] [php7:error] [pid 9779] [client 66.249.65.217:59509] PHP Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in /home/**ac/www/bbs/visit_insert.inc.php:12\nStack trace:\n#0 /home/**ac/www/common.php(562): include_once()\n#1 /home/**ac/www/bbs/_common.php(3): include_once('/home/**ac/www/...')\n#2
Log 파일을 열어보니 이런 내용들이 계속 쌓여 있었다. 접속한 아이피를 조회하니 검색 로봇이다. 아마도 특정 페이지 오류에 접근했다 반복해서 log 기록이 쌓인 거 같다. 오류난 페이지 visit_insert.inc.php는 그누보드에서 사용하는 방문자 통계에 기능을 추가하기 위해 내가 별도로 제작한 라이브러리 파일이다. 일단 오류난 페이지를 찾아 프로그램을 수정해 log가 발생하지 않도록 추가 조치를 하였다.
'프로그래밍 > Web server & Linux' 카테고리의 다른 글
Let's encrypt 실행 할 때 에러 메시지 Another instance of Certbot is already running. (0) | 2019.09.06 |
---|---|
Let's Encrypt 보안서버 SSL 설치 후 2개월 지나니 갱신하라는 안내 메일이 왔다 (0) | 2019.09.06 |
리눅스 CentOS7.x에 메일서버 sendmail 설치하기 (0) | 2019.09.06 |