[ 작업 환경 ]

ncloud 인스턴스

Centos 7.3

 

 

 

 

 [ 문제 인식 ]

 

1. Naver Cloud Platform에서 기본적으로 제공해주는 모니터링 기능의 메모리 사용량 그래프 확인하였습니다.

 

 

 

 

 [ 문제 분석 ]

 

1. 해당 서버에서 가동중인 프로그램을 재가동해보아도 해당 문제가 해결되지 않는 것을 확인하였습니다.

 => 서버에서 작동하는 프로그램의 문제가 아님을 알 수 있었습니다.

 

2. 서버를 재부팅할 경우 메모리 사용량이 0으로 줄어들고, 다시 프로그램들을 가동하면 점진적으로 사용량이 높아지는 것을 확인하였습니다.

 => 1번의 내용과 종합해볼 경우, 버그는 아니고 시스템적인 부분이 원인임을 추측할 수 있었습니다.

 

 

 

 

 

 [ 문제 원인 ]

 

 무언가가 출력되도록 하는 리눅스 커맨드 (ex. ls -al , cat acces_log.txt 등) 입력하여 텍스트들이 출력되는 동안 buff/cache 수치가 증가함을 확인하였습니다. 데이터가 많은 파일을 cat으로 출력되도록 해둔 후 아래 커맨드 여러차례 입력시 buff/cache 수치가 계속 증가함을 확인할 수 있었으나, 해당 작업을 하지 않고 아래 커맨드를 여러차례 입력시에는 buff/cache 수치가 증가하지 않았습니다. 적어도 출력 데이터가 있는 상황에서 buff/cache 수치가 증가됨을 알았습니다.

 

필자의 경우 서버에 원격으로 접속해 여러 작업을 하거나, 가동중인 프로그램의 log 데이터를 모니터링하기 위해 아래와 같은 커맨드를 입력하고 장시간 유지하는 경우가 잦아 위와 같이 메모리 사용량이 단기간에 크게 증가한 것으로 보입니다.

tail -f server_log.txt

 

 

 

 

 [ 해결 방법 및 설명 ]

 

cat /proc/sys/vm/drop_caches

0 으로 return될 경우, 캐시 메모리를 drop하지 않는 설정으로 적용되어있다는 것입니다.

이는 default 값입니다.

 

아래 커맨드를 통해 메모리들을 해제할 수 있습니다.

아래 명령어를 입력하는 순간 메모리들이 해제되며, 재입력하더라도 재입력 시점 기준으로 존재하는 메모리들을 해제합니다.

echo 3 > /proc/sys/vm/drop_caches

 

위와 같이 작업해주더라도 시간이 지나면 다시 메모리 사용량은 증가하게 되므로, 메모리를 정리하는 커맨드가 주기적으로 입력되었으면 할 경우, crontab을 활용하면 됩니다.

 

매일 오전 5시에 메모리 해제 스케줄링 예시

# crontab -e

0 5 * * * echo 3 > /proc/sys/vm/drop_caches

 

 3 이 아니라 다른 수치로 해당 파일 내용을 변경할 경우에 대한 내용은 아래 박스를 참조해주시면 도움이 되겠습니다.

# pagecache 해제 명령어
echo 1 > /proc/sys/vm/drop_caches

# dentry 및 inode 캐시메모리 해제 명령어
echo 2 > /proc/sys/vm/drop_caches

# pagecache, dentry, inode 캐시메모리 모두 해제 시
echo 3 > /proc/sys/vm/drop_caches

 

 

 

+ Recent posts