CentOS 메모리 관리
(1) 메모리 사용량 상위 10개 프로세스
ps aux --sort=-%mem | head -11
(2) 또는 더 보기 좋게
ps -eo pid,user,%mem,%cpu,rss,command --sort=-%mem | head -11
(3) Swap을 메모리로 되돌리고 싶다면 물리 메모리에 여유가 있을 때 swap을 비울 수 있습니다.
swapoff -a && swapon -a
⚠️ 주의: swapoff는 swap의 내용을 메모리로 다시 올리는 작업이라 잠시 시스템이 느려질 수 있습니다. 서비스 운영 중이라면 트래픽이 적은 시간에 하세요.
(4) 캐시만 정리하려면 (필요시)
# 페이지 캐시만 정리 (안전)
sync && echo 1 > /proc/sys/vm/drop_caches
# 페이지 캐시 + dentries + inodes (좀 더 강력)
sync && echo 3 > /proc/sys/vm/drop_caches
♣ 다만 캐시 정리는 일반적으로 권장하지 않습니다. 리눅스가 알아서 관리하거든요.
(5) 모니터링
# 메모리 추이 보기 (5초마다)
watch -n 5 free -h
# MySQL 커넥션 상태
watch -n 10 'mysql -u root -p비밀번호 -e "SHOW STATUS LIKE \"Threads_%\";"'
(6) swappiness
리눅스는 실제 메모리(RAM)가 부족해지면 디스크의 일부 공간을 메모리처럼 쓰는 스왑(Swap) 공간을 활용합니다.
vm.swappiness 값은 시스템이 실제 RAM 대신 이 스왑 공간을 얼마나 적극적으로 사용할지 결정하는 0에서 100 사이의 비율(가중치)입니다.
값이 높을수록 (예: 60 이상): RAM 공간이 아직 남아있어도 디스크의 스왑 공간을 적극적으로 사용합니다.
값이 낮을수록 (예: 10 이하): RAM 공간을 최대한 끝까지 쥐어짜서 쓰고, 정말 어쩔 수 없을 때만 디스크(스왑)를 사용합니다.
vm.swappiness=10
CentOS의 기본(Default) swappiness 값은 보통 30 또는 60으로 설정되어 있습니다.
이를 10으로 낮추겠다는 것은 "웬만하면 속도가 느린 디스크(Swap)로 데이터 넘기지 말고, 최대한 빠른 실제 RAM 안에서 다 해결해라"라고 시스템에 명령하는 것입니다.
💡 왜 이렇게 설정하나요?
디스크(HDD/SSD)는 RAM보다 속도가 훨씬 느립니다. 시스템이 스왑을 자주 쓰기 시작하면 서버가 눈에 띄게 버벅이는 '데드락'에 가까운 현상이 발생할 수 있습니다.
따라서 데이터베이스(MySQL, Oracle)나 웹 서버 등 빠른 반응 속도가 생명인 서버 환경에서는 이 값을 10 이하로 낮춰서 성능을 방어합니다.
※ 주의할 점 (영구 적용 방법)
sysctl vm.swappiness=10 명령어는 임시 적용입니다. 서버를 재부팅하면 CentOS의 기본값으로 다시 돌아가 버립니다.
만약 이 설정을 서버가 꺼져도 계속 유지(영구 적용)하고 싶다면 아래 작업을 해주셔야 합니다.
sudo vi /etc/sysctl.conf
파일 맨 아래에 다음 내용 추가 후 저장: vm.swappiness = 10
저장한 설정 바로 반영하기: sudo sysctl -p