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 를 바꾸서 사용 하면 된다.
스크립트 설명
- 날짜와 백업 디렉토리 변수 설정: 현재 날짜와 백업 디렉토리를 설정합니다.
- 백업 디렉토리 확인 및 생성: 백업 디렉토리가 존재하지 않으면 생성합니다.
- 3일마다 백업 수행: 현재 날짜를 확인하여 3일마다 백업을 수행합니다.
- 백업 파일 생성: mysqldump 명령어를 사용하여 백업 파일을 생성합니다.
- 한 달이 지난 백업 파일 자동 삭제: find 명령어를 사용하여 백업 디렉토리에서 한 달(30일) 이상된 백업 파일을 찾아 삭제합니다.
- 삭제 성공 여부 확인: 오래된 백업 파일 삭제가 성공했는지 확인합니다.
크론탭 설정
크론탭을 사용하여 스크립트를 매일 자정에 실행하도록 설정합니다.
터미널을 열고 크론탭 편집기를 엽니다
crontab -e
크론탭 파일에 다음 줄을 추가합니다:
0 0 * * * /home/test/db_backup.sh
이 설정은 매일 자정(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
스크립트 설명
- 날짜와 디렉토리 변수 설정: 현재 날짜, 백업 디렉토리 및 업로드 디렉토리를 설정합니다.
- 백업 디렉토리 확인 및 생성: 백업 디렉토리가 존재하지 않으면 생성합니다.
- 3일마다 압축 수행: 현재 날짜를 확인하여 3일마다 업로드 디렉토리를 압축합니다.
- 디렉토리 압축: tar 명령어를 사용하여 업로드 디렉토리를 압축 파일로 생성합니다.
- 한 달이 지난 백업 파일 자동 삭제: find 명령어를 사용하여 백업 디렉토리에서 한 달(30일) 이상된 압축 파일을 찾아 삭제합니다.
- 삭제 성공 여부 확인: 오래된 백업 파일 삭제가 성공했는지 확인합니다.
크론탭 설정
크론탭을 사용하여 스크립트를 매일 자정에 실행하도록 설정합니다.
터미널을 열고 크론탭 편집기를 엽니다:
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 설정은 가능하지만, 다음 조건을 만족해야 안정적으로 실행할 수 있습니다:
- OS와 기타 서비스가 300MB 이하의 메모리를 사용해야 함.
- 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 "%r" %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: 스왑 메모리를 다시 활성화.
크론탭에 추가
- 크론탭 편집:
crontab -e
명령 추가: 매일 자정에 스왑 메모리 정리.
0 0 * * * swapoff -a && swapon -a
4. 메모리 최적화 스크립트 작성
캐시와 스왑 메모리를 동시에 관리하는 스크립트를 작성하면 더 간단하게 관리할 수 있습니다.
스크립트 작성
- 스크립트 생성
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. 주의 사항
- 실시간 최적화 한계: 크론탭은 정기적으로 명령을 실행할 수 있지만, 실시간 모니터링 및 조정은 어려움.
- 실시간 최적화를 원하면 systemd 타이머 또는 메모리 모니터링 도구(zabbix, prometheus)를 사용하는 것이 좋습니다.
- 자동화와 성능 사이의 균형: 캐시와 스왑을 지나치게 자주 초기화하면 성능에 악영향을 미칠 수 있으니 주기를 적절히 설정하세요.
1GB 메모리 서버에서는 크론탭을 사용하는 것이 리소스 소모를 최소화하면서도 기본적인 메모리 관리 작업을 수행할 수 있는 가장 적합한 선택입니다.
특히, 캐시 정리, 스왑 관리, 로그 모니터링 등 주기적인 작업이 필요할 때 크론탭은 간단하면서도 효과적인 도구입니다.
크론탭을 추천하는 이유
경량성:
- 크론탭은 시스템에 기본 내장된 경량 도구로, 추가적인 리소스를 거의 소모하지 않습니다.
- Zabbix, Prometheus 같은 모니터링 도구는 기본적으로 더 많은 메모리를 요구합니다.
단순한 설정:
- 설정이 간단하며, 필요한 작업만 정확히 수행할 수 있습니다.
- 실행 주기를 자유롭게 설정할 수 있어 시스템 리소스 사용을 제어할 수 있습니다.
작업의 자동화:
- 메모리 최적화 작업(캐시 정리, 스왑 관리)을 일정 주기로 자동 실행 가능.
크론탭으로 메모리 관리 설정 방법
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. 모든 작업을 한 스크립트로 통합
스크립트 작성:
- /usr/local/bin/memory_maintenance.sh 파일 생성:
sudo nano /usr/local/bin/memory_maintenance.sh
- 아래 내용을 추가:
#!/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
- 실행 권한 부여:
sudo chmod +x /usr/local/bin/memory_maintenance.sh
크론탭 설정: 스크립트를 30분마다 실행하려면:
*/30 * * * * /usr/local/bin/memory_maintenance.sh
크론탭의 한계
실시간 대응 부족:
- 크론탭은 주기적으로 작업을 실행하기 때문에, 특정 이벤트(예: 메모리 부족)가 발생할 때 즉각 대응하지 못합니다.
정밀 모니터링 부족:
- 서버 상태를 실시간으로 감시하거나 알림을 설정하려면 Zabbix 또는 Prometheus 같은 도구가 필요합니다.
리소스 관리의 정밀성 부족:
- 단순한 캐시/스왑 정리 외에 JVM, MySQL 등의 세부 설정 최적화는 별도 조치가 필요합니다.
결론
1GB 메모리 서버에서는 크론탭이 리소스를 최소화하면서 필요한 메모리 관리 작업을 수행하기에 가장 적합합니다.
- 시스템 리소스가 부족한 상황에서는 크론탭 기반 자동화로도 충분히 운영 가능.
- 실시간 모니터링이 필요하다면 외부 Zabbix 서버나 경량화된 Netdata와 같은 대안을 고려하세요.
댓글 ( 0)
댓글 남기기