본문 바로가기

Linux Unix/Command

[ 리눅스 / Linux ] 시스템의 Buffer Cache 비우기

반응형

Linux 시스템에서 버퍼 캐시를 비우는 방법과 이를 정기적으로 수행하는 방법을 설명하겠습니다. 버퍼 캐시는 파일 시스템에서 디스크 I/O 성능을 향상시키기 위해 사용되지만, 때로는 시스템 메모리를 확보하기 위해 수동으로 캐시를 비워야 할 때가 있습니다.

1. 수동으로 버퍼 캐시 비우기

Linux에서 버퍼 캐시를 비우는 명령은 sysctl이 아닌 직접 echo 명령을 사용하여 /proc/sys/vm/drop_caches 파일에 적절한 값을 쓰는 방식으로 수행됩니다. 이는 메모리를 비우는 세 가지 옵션을 제공합니다:

  • 1: 페이지 캐시를 비웁니다.
  • 2: dentries와 inodes를 비웁니다.
  • 3: 페이지 캐시, dentries, inodes를 모두 비웁니다.

먼저, 캐시를 비우기 전에 시스템에서 안전하게 이를 수행할 수 있도록 하는 명령이 필요합니다. 보통 관리자 권한을 필요로 하며, 이를 위해 sudo를 사용합니다.

sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
  • sync 명령은 디스크의 데이터를 동기화하여, 모든 변경 사항이 디스크에 기록되도록 합니다.
  • echo 3 | sudo tee /proc/sys/vm/drop_caches 명령은 페이지 캐시, dentries, inodes를 모두 비우는 명령을 실행합니다.

이 방법은 임시로 메모리를 확보하는데 유용합니다.

2. 정기적으로 버퍼 캐시 비우기

정기적으로 버퍼 캐시를 비우려면 cron 작업을 설정할 수 있습니다. cron은 정기적인 작업을 예약하는 데 사용되는 Linux의 데몬입니다.

2.1 cron 작업 설정

  1. crontab 파일 편집
  2. crontab -e 명령을 사용하여 crontab 파일을 편집합니다. 이 명령을 실행하면 현재 사용자의 crontab 파일이 열립니다.
   sudo crontab -e
  1. 작업 추가
  2. cron 표현식을 사용하여 특정 시간 간격으로 캐시를 비우는 명령을 추가할 수 있습니다. 예를 들어, 매일 자정에 캐시를 비우려면 다음과 같이 설정할 수 있습니다.
   0 0 * * * sync && echo 3 > /proc/sys/vm/drop_caches

위의 예는 매일 자정(00:00)에 sync 명령을 실행하고, 그 후 캐시를 비우는 명령을 수행합니다.

crontab 표현식의 의미는 다음과 같습니다:

  • 첫 번째 0: 분 (0분)
  • 두 번째 0: 시 (0시, 자정)
  • 세 번째 *: 일 (모든 날)
  • 네 번째 *: 월 (모든 달)
  • 다섯 번째 *: 요일 (모든 요일)
  1. 작업 저장 및 종료
  2. 작업을 추가한 후 파일을 저장하고 종료합니다. 이 작업이 설정되면, 지정된 시간에 캐시를 비우는 작업이 자동으로 실행됩니다.

2.2 cron 작업 예제

  • 매 시간마다 캐시를 비우고 싶다면 다음과 같이 설정할 수 있습니다:
   0 * * * * sync && echo 3 > /proc/sys/vm/drop_caches
  • 매일 오후 1시에 캐시를 비우려면 다음과 같이 설정할 수 있습니다:
   0 13 * * * sync && echo 3 > /proc/sys/vm/drop_caches

3. 스크립트로 버퍼 캐시 비우기

정기적인 캐시 비우기 작업을 더 관리하기 쉽게 하려면, 스크립트를 작성하여 cron 작업에 사용하거나 수동으로 실행할 수 있습니다.

3.1 스크립트 작성

/usr/local/bin/clear_cache.sh와 같은 경로에 스크립트를 작성할 수 있습니다.

sudo nano /usr/local/bin/clear_cache.sh

스크립트 내용:

#!/bin/bash

# Sync 데이터
sync

# 캐시 비우기
echo 3 > /proc/sys/vm/drop_caches

# 로그 남기기
echo "[$(date)] Cache cleared by clear_cache.sh" >> /var/log/clear_cache.log

스크립트 저장 후, 실행 권한을 부여합니다.

sudo chmod +x /usr/local/bin/clear_cache.sh

3.2 cron에 스크립트 추가

이제 cron 작업에 이 스크립트를 호출하도록 설정할 수 있습니다.

0 0 * * * /usr/local/bin/clear_cache.sh

이렇게 하면 매일 자정에 clear_cache.sh 스크립트가 실행됩니다.

주의 사항

  • 빈번한 캐시 비우기: 너무 자주 캐시를 비우면 시스템 성능이 저하될 수 있습니다. 캐시는 시스템 성능을 최적화하기 위해 설계되었기 때문에, 빈번한 캐시 비우기는 일반적으로 권장되지 않습니다.
  • 메모리 사용: 캐시를 비워도 실제로 메모리가 필요한 프로그램이 없다면, Linux는 다시 캐시를 채우려고 할 수 있습니다. 따라서 캐시를 비우는 것은 메모리가 부족한 경우에만 사용해야 합니다.
  • 시스템 관리자 권한: 캐시를 비우기 위해서는 관리자 권한이 필요합니다. sudo를 사용하여 명령을 실행하거나 cron 작업을 설정할 때 주의가 필요합니다.

이러한 방법들을 통해 Linux 시스템에서 버퍼 캐시를 관리할 수 있습니다. 적절한 시점과 빈도를 선택하여 캐시를 비우는 것이 중요합니다.

반응형