모든 운영체제에서 처리 속도와 관련된 이슈 중. 공통점은 Disk I/O이다.
모든 튜닝의 기본으로도 손꼽히는 Disk I/O를 줄이기 위해 리눅스 운영체제에서는 Buffer/Caches 전략이 사용된다.
리눅스 운영체제는 물리적인 메모리에 자주 사용되는 파일의 내용이나, 파일 위치 등 여러 정보를 Buffer/Cache에 자동으로 할당하여 다음 같은 파일의 Access를 위해 관리된다.
하지만, 이런 전략은 물리적인 메모리의 부족 현상을 일으켜 하드디스크에 설정된 Swap 메모리 영역을 사용하게 된다.
따라서, 성능적인 부분에서 역효과를 나타내게 되므로 관리가 필요하다.
Buffer/Caches 비우기
리눅스 운영체제에는 drop_caches를 제공하는데 /proc/sys/vm/drop_caches 위치에 존재한다.
총 3단계의 Buffer/Cache 반납 전략을 제공한다. 아래와 같다.
- 1단계 - Page Cache 비우기
- 2단계 : dentries + inodes 비우기
- 3단계 : 모두 비우기
** 엔터프라이즈 및 프로덕션 환경이라면 Page Cache만 지울 것을 권장한다.
Page Cache
- 물리적인 저장/통신 장치과 데이터를 주고받을 때 먼저 메모리에 적재한 후 데이터를 주고받는다. 디스크에서 I/O 할 때 페이지 단위로 I/O를 하게 되는데 디스크에서 읽은 해당 Page를 말한다. (운영체제 - Memory를 공부하면 자세하게 알 수 있다.)
dentries, inodes
- 파일의 자료구조를 의미한다. 빠른 데이터 접근을 위해 Slab의 자료구조에 추가되어 사용된다. dentries는 경로명 탐색을 위한 Cache 역할도 수행한다.
Sync
sync 명령어의 역할은 Buffer/Cache에 적재되고 수정되어 메모리에 남겨있는 수정사항을 Disk에 Write하여 Sync를 맞추는 역할을 한다.
Buffer/Cache를 비우기 전에 Sync를 먼저 맞춰주고 비워야 데이터의 손실을 막을 수 있다.
사용법
[root@localhost ~] # free -m
total used free shared buff/cache available
Mem: 15736 8134 3256 426 4346 6884
스왑: 2047 1 2046
[root@localhost ~] # sync
[root@localhost ~] # echo 1 > /proc/sys/vm/drop_caches
[root@localhost ~] # free -m
total used free shared buff/cache available
Mem: 15736 8134 6256 426 1346 6884
스왑: 2047 1 2046
- free -m 명령어로 처음 buffer/cache 는 4346MB 약 4기가...정도를 잡고 있었다.
- sync 명령어로 변경 사항을 디스크와 Sync를 맞춰준다.
- 1번 전략으로 Page Cache만 비워준다.
- buffer/cache가 3000MB가 줄어든 것을 볼 수 있다.
Crontab 스케줄링
이러한 Buffer/Cache를 주기적으로 지워주길 원한다면 crontab을 이용하여 지워줄 수 있다.
-e 옵션으로 crontab으로 실행할 명령어를 정의할 수 있다 처음 사용한다면 어떤 Editor (vim?)를 사용할 건지 선택하게 된다.
[root@localhost ~] # crontab -e
0 1 * * * sync && echo 1 > /proc/sys/vm/drop_caches
[root@localhost ~] #
[root@localhost ~] #
[root@localhost ~] # crontab -l
0 1 * * * sync && echo 1 > /proc/sys/vm/drop_caches
0 1 * * *은 "분 시간 일 월 요일" 순서이다.
0분 1시 모든 일, 모든 월, 모든 요일 이므로 매일 오전 1시에 실행한다는 것이다.
'Linux > CentOS' 카테고리의 다른 글
[Linux] UTC, KST 타임존 설정 (0) | 2022.02.03 |
---|---|
[Linux] 리눅스 서버 시간 동기화 하기. (0) | 2022.02.03 |
[CentOS] JDK + Apache Tomcat 설치하기 (0) | 2021.12.30 |