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


https://charsyam.wordpress.com/2013/01/24/%EC%9E%85-%EA%B0%9C%EB%B0%9C-redis-vm-overcommit_memory-%EC%9D%84-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94/


Posted by '김용환'
,