라엘이는 게임서버를 하나 운영하고 있다.
게임서버는 웹이나 DB서버보다 자원을 많이 필요로 하기에 모니터링과 튜닝을 잘해야 한다.
1. CPU 사용량
게임서버는 일반적으로 사람의 활동 시간과 일치하는 경향이 있다.
또한 주말마다(불금 ~ 일요일) 접속자가 늘어나므로 CPU 상태를 잘 보아야한다.
CPU 사용량이 150%를 넘어서면 간헐적인 렉 현상이 일어난다.
> 해결책 : 게임의 속성을 잘 조절해서 부하량을 낮추어야 한다. 또는 코어를 왕창 할당하면 됨.

2. 메모리 사용량
CPU 만큼 중요한게 메모리이다.
물론 메모리가 부족하면 새로운 프로세스가 생성이 안되는 문제가 발생하기도 하지만, 작은 여유 공간에 데이터를 넣었다가 뺏다가 intensive(강렬) 한 작업을 해야하기 때문에 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
Conversation
In the margins
0 notes
No comments yet. Be the first to leave a note.