linux에서는 swap을 사용할 수 있고, 설정에 따라서 linux oom killer가 프로세스를 종료시킬 수 있다.
운영을 하면서 Nosql, Java, DB, Redis를 사용시 프로세스 종료가 일어나는 최악의 상황을 발생하기 위해서는 이 부분을 반드시 알아야 한다. 이런 oom killer의 설정은 vm.overcommit_memory 커널 설정에 의존을 가지고 있다.
디폴트 값은 0인 휴리스틱(메모리 요구시 kill)이다. (참고로 1은 overcommit 사용, 2는 overcommit 사용하지 않음- vm.overcommit_memory_ratio 적용 값)
메모리를 다 썼을 때, 프로세스를 종료되게 할 것인가, 안할 것인가에 대한 고민이 있다. 문제가 될 만한 상황이라도 종료보다는 차라리 잘 진행되기를 바라는 경우가 있다. (redis master의 데이터를 slave 로 보낼때, swap을 만들어도 메모리가 없는 상황에서..)
overcommit을 사용하려면, 다음과 같이 설정한다.
$ sysctl -a | grep overcommit
vm.overcommit_memory=2
$ sysctl vm.overcommit_memory=1
$ echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
참조 자료
https://www.kernel.org/doc/Documentation/vm/overcommit-accounting
The Linux kernel supports the following overcommit handling modes 0 - Heuristic overcommit handling. Obvious overcommits of address space are refused. Used for a typical system. It ensures a seriously wild allocation fails while allowing overcommit to reduce swap usage. root is allowed to allocate slightly more memory in this mode. This is the default. 1 - Always overcommit. Appropriate for some scientific applications. Classic example is code using sparse arrays and just relying on the virtual memory consisting almost entirely of zero pages. 2 - Don't overcommit. The total address space commit for the system is not permitted to exceed swap + a configurable amount (default is 50%) of physical RAM. Depending on the amount you use, in most situations this means a process will not be killed while accessing pages but will receive errors on memory allocation as appropriate. Useful for applications that want to guarantee their memory allocations will be available in the future without having to initialize every page.
The overcommit policy is set via the sysctl `vm.overcommit_memory'.
http://knight76.tistory.com/entry/Swap-%EB%A9%94%EB%AA%A8%EB%A6%AC
http://blog.lastmind.net/archives/188
http://www.hanbit.co.kr/network/view.html?bi_id=1313
http://mimul.com/pebble/default/2013/05/10/1368171783727.html
http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html
'unix and linux' 카테고리의 다른 글
awk 의 -v 옵션은 변수를 지정 (0) | 2015.07.20 |
---|---|
Redis에 부하 주지 않고 swap 메모리 생성하기 (0) | 2015.06.21 |
리눅스 콘솔에서의 set -o vi 와 set -o emacs (0) | 2015.05.19 |
liux에서 netstat (tcp socket) 상태 보기 (0) | 2015.04.20 |
curl https 서버 연결 (0) | 2015.04.20 |