캐쉬 메모리를 주기적으로 지워서 메모리 확보하기
페이지 정보
작성자 서방님 댓글 0건 조회 211회 작성일 18-04-06 17:00본문
출처 : https://blog.lael.be/post/1090
게임서버는 웹이나 DB서버보다 자원을 많이 필요로 하기에 모니터링과 튜닝을 잘해야 한다.
1. CPU 사용량
게임서버는 일반적으로 사람의 활동 시간과 일치하는 경향이 있다.
또한 주말마다(불금 ~ 일요일) 접속자가 늘어나므로 CPU 상태를 잘 보아야한다.
CPU 사용량이 150%를 넘어서면 간헐적인 렉 현상이 일어난다.
> 해결책 : 게임의 속성을 잘 조절해서 부하량을 낮추어야 한다. 또는 코어를 왕창 할당하면 됨.
2. 메모리 사용량
CPU 만큼 중요한게 메모리이다.
CPU 가 느리면 렉이 걸리지만… 메모리가 부족하게 되면 게임서버가 다운된다.
접속자가 없을 때 게임서버가 자동 재부팅되도록 설정해 두었지만.. 메모리 사용량이 순 증가 하는 현상이 발생하더라.
tar 압축 같은 Disk I/O 할 때 캐쉬메모리가 대폭 증가하는 것을 알 수 있다.
프로그램을 끄면 USER 메모리는 해제가 되는데 캐쉬 메모리는 자동해제가 되지 않는다.
그래서 캐쉬메모리의 크기는 커지기만 한다.
이 공간을 주기적으로 초기화 해서 메모리를 확보해보도록 하자.
* 사용한 메모리(2351MB) = 유저 프로그램 메모리(1.96GB=2007MB) + 캐쉬 메모리(330 MB)
캐쉬 메모리를 지워보자.
#sync && echo 3 > /proc/sys/vm/drop_caches
캐쉬메모리가 비워지고 전체적인 메모리 사용량이 줄어든 것을 볼 수 있다.
매 시간마다 캐쉬메모리를 지우도록 설정
#crontab -e
0 * * * * sync && echo 3 > /proc/sys/vm/drop_caches
서버 호스트 PC를 한달동안 재부팅 안해도 메모리 공간이 원활하게 유지된다.
주의 사항
캐시메모리는 속도가 다른 장치간의 속도 개선을 위해 사용된다. 특히 디스크 I/O의 경우.
디스크 I/O 가 활발히 일어나는 시스템에서 drop_caches 를 사용하면, 일시적으로 CPU 부하량이 크게 증가한다. (다운될 정도는 아니다)
이런 경우 drop_caches 를 아예 사용하지 않거나, 사람이 접속하지 않는 시간대에 실행하도록 하자.
drop_caches 는 non destructive operation 이기 때문에 자주써도 데이터 손실이 발생하지 않는다.
캐쉬 메모리중에 write buffer 라는 파일 쓰기 대기 버퍼(dirty cache 라고도 함)가 있는데, 이러한 것들은 drop_cache 로 사라지지 않는다.
sync 명령어는 이러한 write buffer 내용을 디스크에 쓰고 drop 할 수 있는 cache 로 바꾼다.
즉, sync 후에 drop_caches 를 하면 최대한 많은 메모리가 확보되는 것이다.
As this is a non-destructive operation, and dirty objects are not freeable, the user should run “sync” first in order to make sure all cached objects are freed.
* 매일 새벽 4시에 캐시메모리를 비우는 방법. (저는 아래와 같이 사용합니다.)
#crontab -e
0 4 * * * sync && echo 3 > /proc/sys/vm/drop_caches
댓글목록
등록된 댓글이 없습니다.