일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬
- 동적프로그래밍
- HBase
- 리눅스
- redis
- 자바
- DP
- gradle
- Python
- scala
- 튜토리얼
- leetcode
- OOM
- boj
- Java
- docker
- 주키퍼
- programmers
- 프로그래머스
- 스칼라
- 코드워
- 문제풀이
- Linux
- dynamic programming
- go
- Go언어
- 알고리즘
- golang
- codewars
- zookeeper
- Today
- Total
목록TIL/리눅스 Linux (4)
파이문
😀 0. 프로세스가 죽었다 서버의 프로세스가 메모리 부족으로 kill 되었다는 알람이 왔다. kernel: Out of memory: Kill process () score or sacrifice child 최근 서버에 서비스 몇 개를 더 띄웠는데, 그것 때문에 일어난 영향으로 보였다. 짧은 식견으로는 새로 올린 서비스가 메모리를 많이 잡아먹었고, 그렇기 때문에 새로 올린 서비스가 죽어야 한다고 생각했다. 그러나 실제로 죽은 프로세스는 HBase 의 RegionServer 였다. 확인해보니 HBase RegionServer 의 oom_score 가 더 높았었기 때문이었다. oom_score 는 여기서 짧게 작성한 적이 있는데, 쉽게 말하면 서버의 메모리가 부족할 때 oom_score 가 높은 프로세스가 ..
프로세스는 커널에게 필요한 만큼의 메모리를 요청하고 커널은 메모리 영역을 프로세스에게 주지만, 실제로는 할당은 하지 않고 해당 영역을 프로세스에게 주었다는 것을 저장해 둔다. 이 과정을 Memory commit 이라고 부른다. Memory commit 이 필요한 이유가장 큰 이유는 fork() 와 같은 프로세스를 생성하는 시스템 콜을 처리할 수 있어야 하기 때문이다. 예를 들면 물리 메모리가 4기가 일 때, 3기가 프로세스 A가 돌고 있다고 해 보자. 해당 프로세스가 자식 프로세스 B를 생성하게 (fork) 되면 자식 프로세스 B는 부모 프로세스 A와 마찬가지로 3기가 프로세스일 것이다. 하지만 이미 전체 메모리 4기가에서 3기가를 부모 프로세스 A 가 사용하고 있기 때문에 가용 메모리는 1기가 밖에 되..
메모리 부족 swap 물리 메모리가 부족하게 되면 가상 메모리 방식을 응용한 'swap' 이 일어난다. 스왑은 저장 장치의 일부를 일시적으로 메모리 대신 사용하는 방식이다. 당연한 것이겠지만 메모리 보다 저장 장치에 접근하는 속도가 현저히 느리다. 그래서 시스템이 일시적인게 아니라 만성적으로 메모리가 부족하게 되면 스와핑 / 스왑 인 (스왑 영역을 물리 메모리 영역 으로 되돌리는 것) 과 스왑 아웃 (물리 메모리 영역을 스왑 영역으로) 이 반복되는 스래싱 (thrashing) 상태가 일어난다. 리눅스에서는 스와핑을 페이징이라고 부르기도 한다. 스와핑이 일어나지 않게 하기 (스왑으로 인해 일어나는 성능 하락을 막게 하기 위해) 위해서 아예 스와핑 옵션을 끌 수도 있다. 이 때 사용하는 값이 vm.swapp..