리눅스
메모리란?
- 좁은 의미로는 메인 메모리(RAM)
- 컴퓨터에서 메모리는 유일한 작업 공간
프로세스는 cpu에서 바로 계산할 수 없고 반드시 메모리 적재 후에 실행할 수 있다.
리눅스 메모리 관리란?
- 작업공간을 필요로 하는 프로세스를 위해 리눅스가 메인메모리를 관리하고 운영하는 방법
(메모리를 필요로하는 프로세스를 리눅스가 관리해좀)
메모리 오버레이
: 할당 받은 메모리보다 큰 프로세스를 실행시키기 위해 프로세스의 크기를 일정량 잘라서 메모리에 적재하는 방법
만약, 프로세스의 크기보다 할당받은 메모리 크기가 작다면?
-> 보조메모리 (하드디스크나 SSD)를 사용한다.
가상 메모리
- 하드디스크, SSD
- 실제 디스크를 마치 메모리처럼 사용하는 것
- 프로세스는 실제 메모리로 인식함
추가 용어
- 페이지 : 가상 메모리 시스템에서 메모리를 다룰 때 사용하는 최소 크기 단위, 리눅스에서는 4KB
- 스왑 아웃 : 메인 메모리의 프로세스에서 일정 페이지를 잘라서 가상메모리로 가져가는 것
- 스왑 아웃 : 가상 메모리에 옮겨 두었던 프로세스의 페이지를 다시 메인 메모리로 가지고 오는 것
가상 메모리와 성증
- 가상 메모리와 메모리를 스왑하는 비용때문에 큰 성능 저하가 발생한다.
- 스와핑이 발생하지 않도록 메모리 여유율을 잘 해야한다.
- vmstat으로 모니터링 할 수 있다.
vmstat
컬럼중에
- free : 사용 가능한 메모리양
- so(swap out)
free가 0이거나 so가 지속적으로 숫자가 올라간다면 메모리에 성능저하가 일어나고 있다.
vmstat [딜레이][횟수]
ex) vmstat 1 5 -> 1초간 5번의 간격으로 출력
vmstat 1 >> log.txt
파일에 로그를 남길 수 있음
메모리 항목 (파일 캐시)
- swpd : 사용하고 있는 가상 메모리양
- free : 사용 가능한 메인 메모리양
- buff : 파일 시스템의 메타 데이터와 관련된 블록들을 저장하는 캐시
- cache : cache는 파일의 내용을 저장하고 있는 캐시
파일 캐시
- 파일 I/O는 상대적으로 메모리보다 속도가 느린 디스크의 리소스를 사용하는 작업.
- 때문에 파일 I/O 작업이 많이 발생하면 성능이 떨어지게 됨.
- 이를 개선하기 위해 리눅스는 한 번 읽음 파일의 내용을 메모리에 캐시해 두었다가 사용함.
-> buff, cache
프로세스가 파일 i/o 작업을 요청하면 파일이 메모리로 이동한다. ㅏ그러면 리눅스가 느리니까 캐시해야한다고 해서 메모리에 캐시를 해준다. 이때 이게 buff와 cache
추천책
실무로 배우는 서버 관리(?)
참조
https://www.youtube.com/watch?v=OPdjLaW0flU&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=104