Extra Form
PHP PHP 7.4
CMS WordPress

안녕하세요.

 

VPS에 우분투 + nginx + php +mariadb 를 연결해 다수의 웹사이트를 운영하고 있습니다.

 

웹사이트에 필요한 모든 자료들은 /var/www/ .. 에 넣어두었습니다.

 

그런데 늘 하드 용량이 부족합니다.. 

 

du -sh 로 /var/www/ 이하의 모든 폴더를 계산해봐도, 실제 서버 하드 용량의 30% 정도밖에 차지하지 않습니다.

 

캐쉬나 스왑파일을 다 더해도 반도 안될것 같은데요.. 

 

실제 하드 사용량은 90%를 넘나듭니다. 

 

이걸 어떻게 확인해보거나 해결할 수 있는 방법이 있는지 조언을 구하고 싶습니다.

 

감사합니다.

  • profile
    로그가 쌓이지 않는지 보세요.

    에러로그 및 access로그 등등은 접률이 높은 사이트면 사이트일수록 빠른속도로 용량을 차지할 수 있습니다.

    일레로 라이믹스의 디버그 기능도 마찬가지로 로그가 많이 쌓일 수 있거든요.
  • profile ?
    안녕하세요 람보님.

    답변 감사합니다. 로그 파일을 확인해보았습니다만, 무시해도 될 정도만 차지하고 있더군요 ㅠㅠ

    사실 엑세스 로그가 중요하지 않아 거의 활성화 시키지 않았고, 에러도 crit로만 기록이 되도록 해둔 상황입니다.

    답변 감사합니다.
  • profile

    - /var/lib의 각종 데이터 파일

    - /var/log의 각종 로그

    - 일부 프로그램들이 임시파일이나 로그를 사용한 후 제대로 닫지 않고 좀비 상태로 붙잡고 있는 경우 (아파치, MySQL 등을 재시작하거나 서버를 재부팅했을 때 용량이 확 줄어든다면 이 문제입니다)

    - OpenVZ 기반의 저렴한 VPS에서 디스크를 오버셀링했다가 다른 사용자가 용량을 많이 사용하는 바람에 당초 약속한 용량을 모두 제공하지 못하는 경우 (요즘은 흔하지 않지만, df 명령에서 used와 available의 합계가 전체 용량보다 10% 이상 적다면 의심해 볼 수 있습니다.)

  • profile ?

    안녕하세요 기진곰님.

    답변 감사합니다. 기진곰님의 답변을 보고 확인을 해보았습니다.

    제 경우에는 2번과 3번 문제가 해당되는 듯 합니다.

    /var/lib에 전체 용량의 30%가량을 먹고 있습니다...

     

    다시 확인하니 /var/lib/mysql/에 로그파일 하나가 먹고 있는걸 보고 지워버렸습니다 ;; 

     

    mysql 로그 관련해 다시 한번 확인해보도록 하겠습니다.

     

    감사합니다.
     

  • ? profile

    /var/lib 아래의 어떤 폴더가 용량이 가장 큰가요? /var/lib/mysql이라면 DB입니다. 예를 들어 "인증 세션 DB 사용" 옵션을 켜두신 경우 DB에 세션이 계속 쌓여서 DB 용량이 어마어마하게 늘어날 수 있습니다. 그 밖에도 접속자 통계 관련된 모듈이나 애드온, 파서링크 모듈 등이 DB 용량을 많이 차지합니다.

    만약 DB 타입이 MyISAM이거나, 설치 직후 innodb_file_per_table 옵션을 켜셨다면 가장 용량이 큰 테이블을 쉽게 찾을 수 있고, 해당 테이블을 삭제하거나 비우면 용량이 확보됩니다. 그러나 설치 직후 그 옵션을 켜두지 않았다면 ibdata 파일 하나에 모든 데이터가 들어 있어서 찾기도 힘들고, 지운다고 용량이 회복되지도 않으므로 무척 난감한 상황이 됩니다.

    만약 /var/lib/mysql이 아닌 다른 폴더라면 해당 폴더와 관련된 프로그램을 찾아보셔야 하고요.

    로그파일을 붙잡고 있는 것은 대부분 MySQL보다는 아파치입니다. 서버 전체를 재부팅하지 않고 각 프로그램을 따로 재시작해 보면 범인을 쉽게 찾을 수 있습니다. 대개 /etc/logrotate.d의 설정을 사용해서 정상적인 방법으로 로그를 교체하지 않고 크론탭에서 강제로 로그를 삭제하거나 하면 그런 문제가 생깁니다.

  • profile ?
    안녕하세요 기진곰님. 답변 감사합니다.

    예상하신대로 /var/lib/mysql 폴더였습니다. 그런데 이상한게 폴더 내에 서버명으로 된 .log 파일이 있더군요.

    이 파일이 수십기가를 먹고 있었습니다. 그래서 우선 운영 중인 홈페이지의 DB를 백업 후 해당 파일을 지워버렸습니다만, 아직까지 별 문제는 없네요.

    그치만 왜 그런 로그가 쌓였는지 알수가 없어, 우선 MYSQL에서 활성화 시켜둔 general, error, slow 로그를 비활성화 시켜두었습니다.

    general 로그가 원인이 아닐까 싶습니다만... 조금 더 확인해보도록 하겠습니다.

    늘 친절하고 자세하게 알려주셔서 정말로 감사드립니다.
  • ? profile

    리눅스 배포판이나 설치 방법에 따라 다르지만, /var/log가 아닌 /var/lib/mysql 폴더 안에다가 로그를 쌓아놓는 이상한 녀석도 가끔 보이곤 합니다. 그래도 /var/lib/mysql이라면 차라리 낫네요. /opt에다 로그를 처박아놓는 무개념 서버도 있는데요 뭘...

     

    설정파일의 로그 관련 경로들을 하나씩 확인해 보시기 바랍니다. binlog도 종종 문제를 일으킵니다.

  • profile

    로그파일은 /var/log에 있습니다. /lib는 db가 담기는 파일입니다..직접 lib 폴더내에 있는 파일을 지우시면 안되고 초보시라면 phpmyadmin 설치하셔서 쓸모없는 기록을 지우시는걸 추천드립니다.

    참고로 저같은 경우에는 하드용량이 왜이렇게 부족하지? 해서 찾아보니 시스템 로그와 관련된게 50gb를 먹고있더라고요.

  • profile ?
    안녕하세요 눈팅용님. 답변 감사합니다.

    우선 원인은 /var/lib/mysql에 서버 이름으로 된 거대한 로그가 원인이었습니다.

    그런데 왜 /var/log가 아닌 해당 폴더에 수십기가나 되는 로그가 생기고 있었는지를 잘 모르겠네요..

    답변해주셔서 감사합니다!
  • profile

    간혹 journal 로그가 비정상적으로 커지는 경우도 있는데, 디폴트로 놔두는 것보다는 크기를 제한하는 것도 방법이죠.
    % journalctl --disk-usage
    를 입력하여 현재 용량이 얼마인지 파악해보고, 크기가 비정상적으로 크면 (예를들면) 1GB 정도로 크기를 줄여볼수도 있습니다. 

    /etc/systemd/journald.conf 를 편집하여, SystemMaxUse=1G 로 바꾼 후, 
    % systemctl restart systemd-journald.service
    해주면 앞으로는 1GB를 넘기지 않을 것입니다. 

     

    만약 /var/log/journal/****/ 파일이 단기간에 너무 커지면 로그가 쌓이는 원인을 찾아봐야 할수도 있습니다.

    % journalctl -f

    를 입력하여 뭐가 자꾸 쌓이는지 파악해봐야겠죠. 예상치 못한 시스템 오류나 해킹 시도 같은것이 있을수도요.

  • profile ?
    안녕하세요 토비리님. 답변 감사합니다

    그렇군요!! 이렇게도 하드를 잡아먹고 있었네요.

    이번 문제의 원인은 아니었지만, 확인해보니 journal 로그에서 이미 몇 기가를 먹고 있는걸 보았습니다.

    알려주신 방법으로 설정을 완료하였습니다.

    계속 쓸모없는 로그가 쌓이는지 지켜보도록 하겠습니다. 감사합니다!