업무중에 리눅스 서버의 "/" 파일시스템이 임계치 이상 올라갔다는 알림이 발생했고,
해당 파일시스템 정리를 하기 위해, 서버에 접속해서 df -h , 명령어와 du -shx / 명령어로 확인을 해보았다.
근데 이게 웬걸.. df 로 나오는 용량과 du 명령어로 나오는 용량이 거의 100G 넘게 차이가 나는게 아닌가??
그래서 조치를 하기 위해 나름의 분석 및 조사 결과
파일을 삭제했지만, df에 반영이 되지 않은것으로 확인 되었다.
보통 시스템을 오래 켜두면 발생하는 현상이라고 하는데, (uptime을 쳐보니 1000일이 훌쩍 넘어가있었음)
그 이유는 특정 프로세스가 file descriptor 를 연 후에 file descriptor 가 가리키는 파일을 지웠는데 그 프로세스가 여전히 파일을 읽고 쓰고 있는 것이라고 한다.
따라서 해당 문제가 되는 프로세스를 lsof 명령어로 찾을 수 있다.
# yum install lsof -y
# lsof | grep deleted
예시를 보여주기 위해 용량이 크지 잡지 않은 것들로 캡쳐를 했지만, 저렇게 deleted로 잡히는 것들은 아직 존재하는 프로세스이기 때문에, 왼쪽에 있는 PID로 kill 해주면 된다.
# kill -9 205242 (예시입니다.)
* 가장 좋은 방법은 서버 리부팅이 제일 좋겠죠??