Bash 시스템 모니터링 및 성능 분석
Bash 시스템 모니터링 및 성능 분석
Linux 서버의 성능을 모니터링하고 분석하는 방법을 정리했습니다.
실시간 모니터링
top
전체 CPU, 메모리, Swap 사용량을 실시간으로 확인:
top
유용한 단축키:
Shift + M: 메모리 사용량 순으로 정렬
vmstat
메모리, CPU, I/O 통계:
vmstat 1 99999 # 1초 간격, 99999회
vmstat -a 1 999 # active/inactive 메모리 표시
vmstat -a -S M 1 999 # MB 단위로 표시
메모리 확인
전체 메모리
free -m
프로세스별 메모리
ps aux --sort -rss # RSS 기준 정렬
ps -o pid,user,%mem,command ax | sort -b -k3 -r
프로세스 관리
프로세스 확인
# 특정 프로세스 확인
ps -p 18655 -o comm=
ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
# 모든 사용자 프로세스 상세
ps -ef
# -e: 다른 사용자 프로세스 포함
# -f: 상세 정보
프로세스 검색
ps -ef | grep java
디스크 I/O
iostat
iostat 1 99999 # 1초 간격
히스토리 (sar)
System Activity Report - 과거 기록 조회:
설치 및 설정
sudo yum install sysstat
# 활성화
# /etc/default/sysstat 파일에서
ENABLED="true"
sudo service sysstat restart
CPU 히스토리
sar -u # 히스토리만
sar -u 1 30 # 현재 + 히스토리 (1초 간격, 30회)
메모리 히스토리
sar -r
I/O 히스토리
sar -b
디스크 용량
df -h # 디스크 사용량
ls -lah # 파일 크기
Job Control
프로세스 관련 명령어
| 명령어 | 설명 |
|---|---|
ps |
실행 중인 프로세스 목록 |
kill |
프로세스에 시그널 전송 |
jobs |
현재 쉘의 작업 목록 |
bg |
백그라운드로 전환 |
fg |
포그라운드로 전환 |
백그라운드 작업
# 실행 중인 서비스 일시 중지
Ctrl + Z
# 백그라운드에서 계속 실행
bg
# 쉘에서 분리
disown
# 작업 목록
jobs -l
# 포그라운드로 전환
fg
사용자 관리
현재 사용자
whoami
다른 계정으로 로그인
sudo su - hyun
사용자 추가/관리
# 사용자 추가
sudo adduser username
# sudo 권한 부여
usermod -aG sudo username
# 그룹 확인
groups
특정 앱을 sudo 없이 실행
sudo groupadd docker && sudo usermod -aG docker USERNAME
# 로그아웃 후 다시 로그인 필요
히스토리
명령어 히스토리 보기
history
히스토리에서 실행
history 4 # 마지막 4개
!4 # 4번 명령 재실행
!! # 이전 명령 재실행
히스토리 검색 별칭
.bashrc에 추가:
alias gh='history | grep '
cron (스케줄링)
Linux OS 단에서 사용하는 스케줄링:
crontab -l # 현재 크론 목록
crontab -e # 크론 편집
날짜/시간
DATE=`date +%Y-%m-%d`
DATE=`date +%Y-%m-%d:%H:%M:%S`
date +'%Y-%m-%d'
date +%F
now=`date +%F`
에러 처리
Locale 경고
warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)
해결:
sudo vi /etc/environment
# 추가
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
명령 결과 확인
echo $? # 0이면 성공
도움말
man who # 매뉴얼
help sh # 쉘 내장 명령
which sh # 명령어 위치
type sh # 명령어 유형 및 위치
mkdir --help # 명령어 도움말
유용한 도구들
필터 명령어
| 명령어 | 설명 |
|---|---|
xargs |
입력을 여러 개 받아 각각 실행 |
sort |
정렬 (-n: 숫자, -r: 역순) |
uniq |
중복 제거 (정렬된 데이터에서) |
grep |
패턴 검색 (-v: 반전, -i: 대소문자 무시) |
fmt |
텍스트 포맷팅 |
head/tail |
앞/뒤 출력 |
tr |
문자 변환 |
sed |
스트림 편집 |
awk |
텍스트 처리 언어 |
xargs 예시
ls -p | grep / | xargs open # 하위 폴더 모두 열기
find . -print0 | xargs -0 ls # null 문자로 분리
grep 옵션
grep -A1 pattern # 매칭 다음 1줄도 표시
grep -v 'aa' # aa가 없는 줄
grep -i pattern # 대소문자 무시
grep -n pattern # 라인 번호 표시
sed 예시
MySQL 결과를 CSV로 변환:
mysql -h host -uadmin -p --batch -e "SELECT * FROM table" | \
sed 's/"/""/g;s/^/"/g;s/$/"/g;s/[[:cntrl:]]/","/g' > output.csv
Comments