리눅스

 

 

1.DB 백업 처리

 

크론탭을 사용하여 스크립트를 3일마다 실행하려면,

주기적인 스케줄링을 위해 특정 날짜 패턴을 사용해야 합니다. 크론탭 자체는

"매 3일"을 직접적으로 지원하지 않지만, 몇 가지 대안적인 방법이 있습니다.

가장 간단한 방법은 날짜를 확인하고 조건에 맞을 때만 실행되도록 스크립트 내에서 제어하는 것입니다.

또한,

한 달이 지난 백업 파일을 자동으로 삭제하려면 find 명령어를 사용하여 특정 기간이 지난 파일을 찾고 삭제할 수 있습니다.

이를 db_backup.sh 스크립트에 추가하면 됩니다. 아래는 수정된 스크립트입니다

 

/home/test/db_backup.sh 스크립트

 

#!/bin/bash

DATE=$(date +%Y%m%d)
BACKUP_DIR=/home/test/backup/
TODAY=$(date +%d)

# 백업 디렉토리가 존재하는지 확인하고, 없으면 생성합니다.
if [ ! -d "$BACKUP_DIR" ]; then
  mkdir -p "$BACKUP_DIR"
fi

# 3일마다 실행되도록 제어
if (( TODAY % 3 == 0 )); then
  # 데이터베이스 백업 수행
  mysqldump -u test -p'test1234' test_db> ${BACKUP_DIR}test_${DATE}.sql

  # 백업 성공 여부 확인
  if [ $? -eq 0 ]; then
    echo "Backup successful: ${BACKUP_DIR}test_${DATE}.sql"
  else
    echo "Backup failed"
  fi
else
  echo "Today is not a backup day."
fi

# 한 달이 지난 백업 파일 자동 삭제
find $BACKUP_DIR -type f -name "test_*.sql" -mtime +30 -exec rm {} \;

# 삭제 성공 여부 확인
if [ $? -eq 0 ]; then
  echo "Old backups deleted successfully."
else
  echo "Failed to delete old backups."
fi

 

test 를 바꾸서 사용 하면 된다.

 

스크립트 설명

  1. 날짜와 백업 디렉토리 변수 설정: 현재 날짜와 백업 디렉토리를 설정합니다.
  2. 백업 디렉토리 확인 및 생성: 백업 디렉토리가 존재하지 않으면 생성합니다.
  3. 3일마다 백업 수행: 현재 날짜를 확인하여 3일마다 백업을 수행합니다.
  4. 백업 파일 생성: mysqldump 명령어를 사용하여 백업 파일을 생성합니다.
  5. 한 달이 지난 백업 파일 자동 삭제: find 명령어를 사용하여 백업 디렉토리에서 한 달(30일) 이상된 백업 파일을 찾아 삭제합니다.
  6. 삭제 성공 여부 확인: 오래된 백업 파일 삭제가 성공했는지 확인합니다.

 

크론탭 설정

크론탭을 사용하여 스크립트를 매일 자정에 실행하도록 설정합니다.

  1. 터미널을 열고 크론탭 편집기를 엽니다

 

crontab -e

 

 

크론탭 파일에 다음 줄을 추가합니다:

 

0 0 * * * /home/test/db_backup.sh

 

  1. 이 설정은 매일 자정(00:00)에 스크립트를 실행합니다.

이제 db_backup.sh 스크립트는 3일마다 백업을 수행하고, 한 달이 지난 백업 파일을 자동으로 삭제합니다.

 

 

crontab 실행 명령

 

// 크론탭 시작
service cron start

// 크론탭 중지
service cron stop  

// 작동확인
service cron status 

 

 

스크립트 권한 설정

스크립트가 실행 가능하도록 권한을 설정합니다:

 

chmod +x /home/nolto/db_backup.sh

 

 

 

 

 

 

2.디렉토리  백업 처리

 

#!/bin/bash

DATE=$(date +%Y%m%d)
BACKUP_DIR=/home/test/backup/
UPLOADS_DIR=/home/test/uploads/

# 백업 디렉토리가 존재하는지 확인하고, 없으면 생성합니다.
if [ ! -d "$BACKUP_DIR" ]; then
  mkdir -p "$BACKUP_DIR"
fi

# 3일마다 실행되도록 제어
TODAY=$(date +%d)
if (( TODAY % 3 == 0 )); then
  # uploads 디렉토리 압축
  tar -czf ${BACKUP_DIR}uploads_${DATE}.tar.gz -C ${UPLOADS_DIR} .

  # 압축 성공 여부 확인
  if [ $? -eq 0 ]; then
    echo "Backup successful: ${BACKUP_DIR}uploads_${DATE}.tar.gz"
  else
    echo "Backup failed"
  fi
else
  echo "Today is not a backup day."
fi

# 한 달이 지난 백업 파일 자동 삭제
find $BACKUP_DIR -type f -name "uploads_*.tar.gz" -mtime +30 -exec rm {} \;

# 삭제 성공 여부 확인
if [ $? -eq 0 ]; then
  echo "Old backups deleted successfully."
else
  echo "Failed to delete old backups."
fi

 

 

스크립트 설명

  1. 날짜와 디렉토리 변수 설정: 현재 날짜, 백업 디렉토리 및 업로드 디렉토리를 설정합니다.
  2. 백업 디렉토리 확인 및 생성: 백업 디렉토리가 존재하지 않으면 생성합니다.
  3. 3일마다 압축 수행: 현재 날짜를 확인하여 3일마다 업로드 디렉토리를 압축합니다.
  4. 디렉토리 압축: tar 명령어를 사용하여 업로드 디렉토리를 압축 파일로 생성합니다.
  5. 한 달이 지난 백업 파일 자동 삭제: find 명령어를 사용하여 백업 디렉토리에서 한 달(30일) 이상된 압축 파일을 찾아 삭제합니다.
  6. 삭제 성공 여부 확인: 오래된 백업 파일 삭제가 성공했는지 확인합니다.

크론탭 설정

크론탭을 사용하여 스크립트를 매일 자정에 실행하도록 설정합니다.

  1. 터미널을 열고 크론탭 편집기를 엽니다:

 

crontab -e

 

크론탭 파일에 다음 줄을 추가합니다:

 

0 0 * * * /home/test/db_backup.sh

 

이제 db_backup.sh 스크립트는 3일마다 /home/test/uploads 디렉토리를 압축하고, 한 달이 지난 압축 파일을 자동으로 삭제합니다.

 

 

 

 

 

 

 

3.Tuned를 설치

1. Tuned 기본 동작

Tuned를 설치하고 활성화하면 기본적으로 balanced 프로파일이 적용됩니다.
balanced 프로파일은 성능과 에너지 소비 간의 균형을 맞추도록 설계된 기본 설정입니다.

설치 및 활성화

sudo apt install tuned -y
sudo systemctl enable tuned
sudo systemctl start tuned

 

2. 최적화 프로파일 확인 및 설정

Tuned는 시스템 사용 목적에 따라 다양한 프로파일을 제공합니다.

프로파일 목록 확인

tuned-adm list

 

Available profiles:
- balanced
- throughput-performance
- latency-performance
- powersave
- virtual-guest
- virtual-host

 

프로파일 적용

원하는 최적화 프로파일을 적용하려면:

sudo tuned-adm profile <profile_name>

예: CPU와 디스크 I/O를 최적화하려면:

 

sudo tuned-adm profile throughput-performance

적용된 프로파일 확인

tuned-adm active

 

3. 주요 프로파일 설명

  • balanced: 기본 프로파일로, 전력 소비와 성능 간의 균형을 유지합니다.
  • throughput-performance: 고성능을 목표로 CPU 주파수와 I/O 설정을 조정합니다. 데이터베이스 서버 등에 적합합니다.
  • latency-performance: 응답 시간을 줄이는 데 초점. 실시간 애플리케이션에 적합합니다.
  • powersave: 에너지 소비를 최소화합니다.
  • virtual-guest: 가상 머신에서 성능을 최적화합니다.
  • virtual-host: 가상 머신 호스트 환경을 위해 조정됩니다.

 

4. 커스터마이징

특정 시스템 요구에 맞게 프로파일을 수정할 수도 있습니다.

프로파일 복사

sudo cp -r /usr/lib/tuned/balanced /etc/tuned/custom-profile

 

 

설정 파일 수정

/etc/tuned/custom-profile/tuned.conf 파일을 열어 CPU, I/O, 스왑 등 설정을 수정합니다.

커스텀 프로파일 적용

sudo tuned-adm profile custom-profile

 

 

 

5. 자동 최적화 작동 여부 확인

Tuned가 작동 중인지 확인하려면:

sudo tuned-adm verify

 

 

 

 

 

1G 이하 서버일 때  톰켓 서버 최적화 설정

 

1. JVM 메모리 구성 확인

JVM 메모리 설정은 기본적으로 다음과 같은 영역으로 나뉩니다:

  • Heap 영역: -Xmx와 -Xms로 설정하며, 애플리케이션에서 객체를 저장.
  • Non-Heap 영역: 메타데이터, 클래스 정보, JIT 컴파일 코드 등 저장.
  • Stack 영역: 각 스레드의 실행 스택에 사용.
  • OS 메모리: Tomcat 및 기타 애플리케이션 운영.

1GB 서버 환경 메모리 분포 예시

  • OS 및 기본 서비스: 약 200~300MB 사용.
  • Tomcat 프로세스: 약 50~100MB 사용 (기본 Heap 외 메모리).
  • JVM Heap: -Xmx512M 사용 시 최대 512MB.

2. -Xmx512M 설정이 가능한 조건

1GB 메모리 환경에서 -Xmx512M 설정은 가능하지만, 다음 조건을 만족해야 안정적으로 실행할 수 있습니다:

  1. OS와 기타 서비스가 300MB 이하의 메모리를 사용해야 함.
  2. Tomcat의 스레드 수와 애플리케이션 크기가 적절히 최적화되어 있어야 함.

설정 적용

Tomcat 환경변수 파일(setenv.sh 또는 catalina.sh)에 아래와 같이 설정:

export CATALINA_OPTS="-Xms256M -Xmx512M -XX:MaxMetaspaceSize=128M"

 

 

  • -Xms256M: 초기 Heap 크기를 설정.
  • -XX:MaxMetaspaceSize=128M: 메타스페이스 크기를 제한.

3. 추가적인 최적화 방법

1) 스레드 수 제한

server.xml에서 최대 스레드 수를 줄여 메모리 사용을 줄입니다:

<Connector port="8080" protocol="HTTP/1.1" maxThreads="50" minSpareThreads="10" enableLookups="false" connectionTimeout="20000" />

 

2) 불필요한 웹 애플리케이션 제거

기본적으로 설치된 불필요한 예제 애플리케이션을 제거:

rm -rf $CATALINA_HOME/webapps/examples rm -rf $CATALINA_HOME/webapps/docs rm -rf $CATALINA_HOME/webapps/host-manager rm -rf $CATALINA_HOME/webapps/manager

 

 

3) GC 설정 변경

메모리 사용을 효율적으로 관리하기 위해 G1GC 또는 ZGC와 같은 가비지 컬렉터를 설정:

export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC"

 

4) 로그 설정 최적화

불필요한 로그를 최소화하여 디스크 및 메모리 사용량을 줄입니다:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" rotatable="false"/>

 

 

4. 설정 후 메모리 사용 점검

1) 메모리 사용 확인

Linux 환경에서 top 또는 htop으로 Tomcat의 메모리 사용량 확인:

top -p $(pgrep -f tomcat)

 

 

2) JVM Heap 상태 점검

JVM 메모리 사용 현황을 확인하려면 JConsole 또는 VisualVM과 같은 도구를 사용:

jstat -gc <pid>

 

 

5. 결론

  • -Xmx512M 설정은 1GB 환경에서 가능하지만, OS와 Tomcat의 기본 메모리 사용량을 고려해야 합니다.
  • 추가적으로 스레드 수 제한, 애플리케이션 최적화, GC 설정 등을 통해 안정성을 확보해야 합니다.
  • 메모리 사용이 과도할 경우, -Xmx256M로 설정을 줄이거나 더 많은 RAM을 확보하는 것을 추천합니다.

 

 

 

 

 

 

크론탭(crontab)을 사용해 실시간으로 메모리 최적화

 

리눅스에서는 캐시 메모리를 수동으로 정리하여 사용 가능한 메모리를 확보할 수 있습니다

sudo sync && sudo sysctl -w vm.drop_caches=3

 

  • sync: 디스크로 데이터를 강제로 기록.
  • vm.drop_caches=3: 페이지 캐시, 디렉토리 엔트리, inode 캐시를 모두 삭제.

 

2. 크론탭을 사용한 자동 캐시 정리

크론탭 설정

크론탭 편집

crontab -e


 

    명령 추가: 10분마다 캐시를 정리하려면 아래를 추가

    */10 * * * * sync && sysctl -w vm.drop_caches=3
    
    
    

     

    주의사항

    • 캐시를 너무 자주 정리하면 성능이 저하될 수 있으니, 적절한 주기를 설정하세요.
    • 시스템 로그(/var/log/syslog)를 통해 메모리 사용량을 모니터링하며 주기를 조정하세요.

     

    3. 스왑 메모리 관리

    스왑 메모리가 과도하게 사용될 경우 성능이 저하될 수 있습니다. 크론탭을 사용해 정기적으로 스왑 메모리를 비울 수 있습니다.

    스왑 메모리 정리 명령어

    sudo swapoff -a && sudo swapon -a
    
    
    
    • swapoff -a: 모든 스왑 메모리를 비활성화.
    • swapon -a: 스왑 메모리를 다시 활성화.

    크론탭에 추가

    1. 크론탭 편집:
    crontab -e
    
    
    

    명령 추가: 매일 자정에 스왑 메모리 정리.

    0 0 * * * swapoff -a && swapon -a
    
    

     

    4. 메모리 최적화 스크립트 작성

    캐시와 스왑 메모리를 동시에 관리하는 스크립트를 작성하면 더 간단하게 관리할 수 있습니다.

    스크립트 작성

    1. 스크립트 생성
    sudo nano /usr/local/bin/clear_memory.sh
    
    

     

    2.스크립트 내용 추가

    #!/bin/bash
    sync && sysctl -w vm.drop_caches=3
    swapoff -a && swapon -a
    echo "$(date): Memory cleared" >> /var/log/memory_clear.log
    
    
    

     

    3.스크립트 실행 권한 부여

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

     

     

    크론탭에 추가

    스크립트를 1시간마다 실행하려면:

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

     

    5. 메모리 사용 상태 확인

    최적화 후 시스템의 메모리 상태를 확인하려면:

    free -h
    
    
    

    또는:

    top
    
    
    

     

    6. 주의 사항

    1. 실시간 최적화 한계: 크론탭은 정기적으로 명령을 실행할 수 있지만, 실시간 모니터링 및 조정은 어려움.
      • 실시간 최적화를 원하면 systemd 타이머 또는 메모리 모니터링 도구(zabbix, prometheus)를 사용하는 것이 좋습니다.
    2. 자동화와 성능 사이의 균형: 캐시와 스왑을 지나치게 자주 초기화하면 성능에 악영향을 미칠 수 있으니 주기를 적절히 설정하세요.

     

     

    1GB 메모리 서버에서는 크론탭을 사용하는 것이 리소스 소모를 최소화하면서도 기본적인 메모리 관리 작업을 수행할 수 있는 가장 적합한 선택입니다.

    특히, 캐시 정리, 스왑 관리, 로그 모니터링 등 주기적인 작업이 필요할 때 크론탭은 간단하면서도 효과적인 도구입니다.

     

     

    크론탭을 추천하는 이유

    1. 경량성:

      • 크론탭은 시스템에 기본 내장된 경량 도구로, 추가적인 리소스를 거의 소모하지 않습니다.
      • Zabbix, Prometheus 같은 모니터링 도구는 기본적으로 더 많은 메모리를 요구합니다.
    2. 단순한 설정:

      • 설정이 간단하며, 필요한 작업만 정확히 수행할 수 있습니다.
      • 실행 주기를 자유롭게 설정할 수 있어 시스템 리소스 사용을 제어할 수 있습니다.
    3. 작업의 자동화:

      • 메모리 최적화 작업(캐시 정리, 스왑 관리)을 일정 주기로 자동 실행 가능.

    크론탭으로 메모리 관리 설정 방법

    1. 캐시 정리

    캐시 메모리 정리를 10분마다 실행하려면 크론탭에 아래를 추가:

    */10 * * * * sync && sysctl -w vm.drop_caches=3
    

     

     

    • 캐시 정리 명령어:
      • sync: 디스크 쓰기 작업 완료.
      • vm.drop_caches=3: 캐시를 정리.

    2. 스왑 메모리 정리

    스왑 메모리 정리를 하루에 한 번 자정에 실행:

    0 0 * * * swapoff -a && swapon -a
    

     

    • 스왑 메모리 정리:
      • swapoff -a: 스왑 메모리를 비활성화.
      • swapon -a: 스왑 메모리를 다시 활성화.

    3. 로그 확인 및 기록

    메모리 사용 현황을 정기적으로 기록하고 확인:

    */30 * * * * free -h >> /var/log/memory_usage.log
    

     

     

    • free -h 명령으로 메모리 사용 상태를 기록.
    • /var/log/memory_usage.log 파일에 저장.

     

    4. 모든 작업을 한 스크립트로 통합

    스크립트 작성:

    1. /usr/local/bin/memory_maintenance.sh 파일 생성:
      sudo nano /usr/local/bin/memory_maintenance.sh
      

       

       

     

    1. 아래 내용을 추가:
    #!/bin/bash
    # 캐시 정리
    sync && sysctl -w vm.drop_caches=3
    
    # 스왑 정리
    swapoff -a && swapon -a
    
    # 메모리 사용 로그 기록
    free -h >> /var/log/memory_usage.log
    echo "$(date): Memory maintenance completed" >> /var/log/memory_maintenance.log
    

     

     

     

    1. 실행 권한 부여:
      sudo chmod +x /usr/local/bin/memory_maintenance.sh
      

       

       

    크론탭 설정: 스크립트를 30분마다 실행하려면:

    */30 * * * * /usr/local/bin/memory_maintenance.sh
    

     

     

    크론탭의 한계

    1. 실시간 대응 부족:

      • 크론탭은 주기적으로 작업을 실행하기 때문에, 특정 이벤트(예: 메모리 부족)가 발생할 때 즉각 대응하지 못합니다.
    2. 정밀 모니터링 부족:

      • 서버 상태를 실시간으로 감시하거나 알림을 설정하려면 Zabbix 또는 Prometheus 같은 도구가 필요합니다.
    3. 리소스 관리의 정밀성 부족:

      • 단순한 캐시/스왑 정리 외에 JVM, MySQL 등의 세부 설정 최적화는 별도 조치가 필요합니다.

    결론

    1GB 메모리 서버에서는 크론탭이 리소스를 최소화하면서 필요한 메모리 관리 작업을 수행하기에 가장 적합합니다.

    • 시스템 리소스가 부족한 상황에서는 크론탭 기반 자동화로도 충분히 운영 가능.
    • 실시간 모니터링이 필요하다면 외부 Zabbix 서버나 경량화된 Netdata와 같은 대안을 고려하세요.

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    about author

    PHRASE

    Level 60  라이트

    정신은 꽁무니에 차고 다닌다 , 정신없이 엉뚱한 짓을 잘하거나, 건망증이 심하여 할 일을 잊어버리기를 잘한다는 말.

    댓글 ( 0)

    댓글 남기기

    작성
    •    
    •    
    •