서버의 하드 용량이 계속 줄어듭니다.
CMS/프레임워크 | WordPress |
---|---|
개발 언어 | PHP 7.4 |
안녕하세요.
VPS에 우분투 + nginx + php +mariadb 를 연결해 다수의 웹사이트를 운영하고 있습니다.
웹사이트에 필요한 모든 자료들은 /var/www/ .. 에 넣어두었습니다.
그런데 늘 하드 용량이 부족합니다..
du -sh 로 /var/www/ 이하의 모든 폴더를 계산해봐도, 실제 서버 하드 용량의 30% 정도밖에 차지하지 않습니다.
캐쉬나 스왑파일을 다 더해도 반도 안될것 같은데요..
실제 하드 사용량은 90%를 넘나듭니다.
이걸 어떻게 확인해보거나 해결할 수 있는 방법이 있는지 조언을 구하고 싶습니다.
감사합니다.
댓글 11
에러로그 및 access로그 등등은 접률이 높은 사이트면 사이트일수록 빠른속도로 용량을 차지할 수 있습니다.
일레로 라이믹스의 디버그 기능도 마찬가지로 로그가 많이 쌓일 수 있거든요.
답변 감사합니다. 로그 파일을 확인해보았습니다만, 무시해도 될 정도만 차지하고 있더군요 ㅠㅠ
사실 엑세스 로그가 중요하지 않아 거의 활성화 시키지 않았고, 에러도 crit로만 기록이 되도록 해둔 상황입니다.
답변 감사합니다.
- /var/lib의 각종 데이터 파일
- /var/log의 각종 로그
- 일부 프로그램들이 임시파일이나 로그를 사용한 후 제대로 닫지 않고 좀비 상태로 붙잡고 있는 경우 (아파치, MySQL 등을 재시작하거나 서버를 재부팅했을 때 용량이 확 줄어든다면 이 문제입니다)
- OpenVZ 기반의 저렴한 VPS에서 디스크를 오버셀링했다가 다른 사용자가 용량을 많이 사용하는 바람에 당초 약속한 용량을 모두 제공하지 못하는 경우 (요즘은 흔하지 않지만, df 명령에서 used와 available의 합계가 전체 용량보다 10% 이상 적다면 의심해 볼 수 있습니다.)
안녕하세요 기진곰님.
답변 감사합니다. 기진곰님의 답변을 보고 확인을 해보았습니다.
제 경우에는 2번과 3번 문제가 해당되는 듯 합니다.
/var/lib에 전체 용량의 30%가량을 먹고 있습니다...
다시 확인하니 /var/lib/mysql/에 로그파일 하나가 먹고 있는걸 보고 지워버렸습니다 ;;
mysql 로그 관련해 다시 한번 확인해보도록 하겠습니다.
감사합니다.
/var/lib 아래의 어떤 폴더가 용량이 가장 큰가요? /var/lib/mysql이라면 DB입니다. 예를 들어 "인증 세션 DB 사용" 옵션을 켜두신 경우 DB에 세션이 계속 쌓여서 DB 용량이 어마어마하게 늘어날 수 있습니다. 그 밖에도 접속자 통계 관련된 모듈이나 애드온, 파서링크 모듈 등이 DB 용량을 많이 차지합니다.
만약 DB 타입이 MyISAM이거나, 설치 직후 innodb_file_per_table 옵션을 켜셨다면 가장 용량이 큰 테이블을 쉽게 찾을 수 있고, 해당 테이블을 삭제하거나 비우면 용량이 확보됩니다. 그러나 설치 직후 그 옵션을 켜두지 않았다면 ibdata 파일 하나에 모든 데이터가 들어 있어서 찾기도 힘들고, 지운다고 용량이 회복되지도 않으므로 무척 난감한 상황이 됩니다.
만약 /var/lib/mysql이 아닌 다른 폴더라면 해당 폴더와 관련된 프로그램을 찾아보셔야 하고요.
로그파일을 붙잡고 있는 것은 대부분 MySQL보다는 아파치입니다. 서버 전체를 재부팅하지 않고 각 프로그램을 따로 재시작해 보면 범인을 쉽게 찾을 수 있습니다. 대개 /etc/logrotate.d의 설정을 사용해서 정상적인 방법으로 로그를 교체하지 않고 크론탭에서 강제로 로그를 삭제하거나 하면 그런 문제가 생깁니다.
예상하신대로 /var/lib/mysql 폴더였습니다. 그런데 이상한게 폴더 내에 서버명으로 된 .log 파일이 있더군요.
이 파일이 수십기가를 먹고 있었습니다. 그래서 우선 운영 중인 홈페이지의 DB를 백업 후 해당 파일을 지워버렸습니다만, 아직까지 별 문제는 없네요.
그치만 왜 그런 로그가 쌓였는지 알수가 없어, 우선 MYSQL에서 활성화 시켜둔 general, error, slow 로그를 비활성화 시켜두었습니다.
general 로그가 원인이 아닐까 싶습니다만... 조금 더 확인해보도록 하겠습니다.
늘 친절하고 자세하게 알려주셔서 정말로 감사드립니다.
리눅스 배포판이나 설치 방법에 따라 다르지만, /var/log가 아닌 /var/lib/mysql 폴더 안에다가 로그를 쌓아놓는 이상한 녀석도 가끔 보이곤 합니다. 그래도 /var/lib/mysql이라면 차라리 낫네요. /opt에다 로그를 처박아놓는 무개념 서버도 있는데요 뭘...
설정파일의 로그 관련 경로들을 하나씩 확인해 보시기 바랍니다. binlog도 종종 문제를 일으킵니다.
로그파일은 /var/log에 있습니다. /lib는 db가 담기는 파일입니다..직접 lib 폴더내에 있는 파일을 지우시면 안되고 초보시라면 phpmyadmin 설치하셔서 쓸모없는 기록을 지우시는걸 추천드립니다.
참고로 저같은 경우에는 하드용량이 왜이렇게 부족하지? 해서 찾아보니 시스템 로그와 관련된게 50gb를 먹고있더라고요.
우선 원인은 /var/lib/mysql에 서버 이름으로 된 거대한 로그가 원인이었습니다.
그런데 왜 /var/log가 아닌 해당 폴더에 수십기가나 되는 로그가 생기고 있었는지를 잘 모르겠네요..
답변해주셔서 감사합니다!
간혹 journal 로그가 비정상적으로 커지는 경우도 있는데, 디폴트로 놔두는 것보다는 크기를 제한하는 것도 방법이죠.
% journalctl --disk-usage
를 입력하여 현재 용량이 얼마인지 파악해보고, 크기가 비정상적으로 크면 (예를들면) 1GB 정도로 크기를 줄여볼수도 있습니다.
/etc/systemd/journald.conf 를 편집하여, SystemMaxUse=1G 로 바꾼 후,
% systemctl restart systemd-journald.service
해주면 앞으로는 1GB를 넘기지 않을 것입니다.
만약 /var/log/journal/****/ 파일이 단기간에 너무 커지면 로그가 쌓이는 원인을 찾아봐야 할수도 있습니다.
% journalctl -f
를 입력하여 뭐가 자꾸 쌓이는지 파악해봐야겠죠. 예상치 못한 시스템 오류나 해킹 시도 같은것이 있을수도요.
그렇군요!! 이렇게도 하드를 잡아먹고 있었네요.
이번 문제의 원인은 아니었지만, 확인해보니 journal 로그에서 이미 몇 기가를 먹고 있는걸 보았습니다.
알려주신 방법으로 설정을 완료하였습니다.
계속 쓸모없는 로그가 쌓이는지 지켜보도록 하겠습니다. 감사합니다!