๋ฆฌ๋ ์ค ์์คํ ์ด์ ์ค ๋ก๊ทธ ํ์ผ ์ ๋ฆฌ, ๋์คํฌ ์ฉ๋ ํ๋ณด, ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ ์ ๊ฒ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ํ์ธ์ ์ํด ์์ฃผ ์ฌ์ฉํ๋ ๋ช ๋ น์ด ํจํด(One-Liner)์ ์ ๋ฆฌํฉ๋๋ค. RedHat/CentOS 7 ํ๊ฒฝ์ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค.
Test Environment
- OS: CentOS 7, RedHat 7.2
- Shell: Bash
1. ํ์ผ ๊ฒ์ ๋ฐ ์ ๋ฆฌ (File Management)
์๋ฒ ์ด์ ์ค ๊ฐ์ฅ ํํ ์ด์๋ ๋ก๊ทธ ํ์ผ๋ก ์ธํ ๋์คํฌ ํ(Disk Full)์
๋๋ค. find ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋๋ ํ์ผ์ ๊ฒ์ํ๊ณ ์ญ์ ํ๋ ํจํด์
๋๋ค.
์ต๊ทผ ์์ ๋ ํ์ผ ์ฐพ๊ธฐ
์ค์ ํ์ผ(xml ๋ฑ)์ด ์ต๊ทผ์ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํ ๋ ์ฌ์ฉํฉ๋๋ค.
# ์ต๊ทผ 7์ผ ์ด๋ด(-7)์ ์์ ๋ xml ํ์ผ ๊ฒ์
find . -type f -name "*.xml" -mtime -7 -print
์ค๋๋ ๋ก๊ทธ ํ์ผ ์ญ์
๋ก๊ทธ ๋๋ ํ ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ์ผ์ ๊ธฐ๊ฐ์ด ์ง๋ ํ์ผ์ ์ญ์ ํฉ๋๋ค. ์ญ์ ๋ช ๋ น(rm)์ ์คํํ๊ธฐ ์ , ๋ฐ๋์ ์กฐํ(ls)๋ฅผ ๋จผ์ ์ํํ์ฌ ๋์์ ๊ฒ์ฆํด์ผ ํฉ๋๋ค.
# 1. ๋์ ํ์ธ (7์ผ์ด ์ง๋ ๋ก๊ทธ ํ์ผ ์กฐํ)
find /log/server1 -name "*.log" -mtime +7 -print
# 2. ์ญ์ ์คํ (๋ฐฉ๋ฒ A: -delete ์ต์
์ฌ์ฉ)
find /log/server1 -name "*.log" -mtime +7 -delete
# 2. ์ญ์ ์คํ (๋ฐฉ๋ฒ B: -exec rm ์ฌ์ฉ, ๊ฐ์ฅ ๋ฒ์ฉ์ )
find /log/server1 -name "*.log" -mtime +7 -exec rm -f {} \;
# 3. 30์ผ ์ด์ ๋ ๋ก๊ทธ ํ์ผ๋ง ๊ฐ์ ์ญ์
find /log/server1 -type f -name "*.log" -ctime +30 -exec rm -rf {} \;
๋์ฉ๋ ํ์ผ ๊ฒ์
๋์คํฌ ์ฉ๋์ ๋ง์ด ์ฐจ์งํ๋ ํ์ผ์ ์ฐพ์ต๋๋ค.
# 3GB ์ด์์ธ ํ์ผ์ ์ฐพ์ ์ฉ๋๊ณผ ํจ๊ป ์ถ๋ ฅ
find . -size +3000000k -exec ls -lh {} \+
๋ ์ง์ ํ์ผ ์ ๋ ฌ ๋ณด๊ธฐ
๊ธฐ๋ณธ ls -l์ ๋ ์ง ํฌ๋งท์ด ๋ณด๊ธฐ ํ๋ค ๋ ISO ํฌ๋งท์ผ๋ก ๋ณํํ์ฌ ํ์ธํฉ๋๋ค.
ls --time-style="+%Y-%m-%d %H:%M:%S" -altr | grep ^- | more
2. ๋คํธ์ํฌ ์ํ ์ ๊ฒ (Network Monitoring)
์น ์๋ฒ๋ DB ์๋ฒ์ ํ์ฌ ์ฐ๊ฒฐ ์ํ๋ฅผ ํ์ธํ์ฌ ํธ๋ํฝ ์คํ์ดํฌ๋ ์ฐ๊ฒฐ ๋์(Leak)๋ฅผ ์ ๊ฒํฉ๋๋ค.
๋์ ์ ์์ ์ ํ์ธ (Web Server)
ESTABLISHED ์ํ๋ ํ์ฌ ์ฐ๊ฒฐ์ด ์๋ฆฝ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
# 80 ํฌํธ ๋์ ์ ์์ ์ ์นด์ดํธ
netstat -nap | grep :80 | grep ESTABLISHED | wc -l
# 8080 ํฌํธ(WAS) ๋์ ์ ์์ ์ ์นด์ดํธ
netstat -nap | grep :8080 | grep ESTABLISHED | wc -l
DB ์ฐ๊ฒฐ ํ(Connection Pool) ํ์ธ
WAS์์ DB๋ก ๋งบ์ ์ฐ๊ฒฐ ๊ฐ์๋ฅผ ํ์ธํฉ๋๋ค. ํฌํธ ๋ฒํธ๋ก grepํ์ฌ ์ ๋ ฌํฉ๋๋ค.
# ํน์ ํฌํธ์ ์ฐ๊ฒฐ๋ ์์ผ ์ ๋ณด ํ์ธ
netstat -anp | grep {port_number}
# ์ฐ๊ฒฐ ๊ฐ์ ์นด์ดํธ
netstat -anp | grep {port_number} | wc -l
3. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๊ฒ (Memory Check)
๋ฆฌ๋
์ค์ free ๋ช
๋ น์ด๋ ๋ฒํผ/์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌํจํ์ฌ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์, ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ(Actual Used)๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด์๋ ๋ณ๋์ ์ฐ์ฐ์ด ํ์ํ ๋๊ฐ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ณ์ฐ ์คํฌ๋ฆฝํธ (Shell)
์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ๋๋น ์ค์ ์ฌ์ฉ๋ฅ ์ ๋ฐฑ๋ถ์จ(%)๋ก ๊ณ์ฐํ๋ ์คํฌ๋ฆฝํธ์ ๋๋ค.
#!/bin/sh
# free ๋ช
๋ น์ด์ ์ถ๋ ฅ ์ปฌ๋ผ ์์น๋ OS ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ํ์ธ ํ์ (awk $2, $3...)
# Total Memory
TOTAL=`free | grep ^Mem | awk '{print $2}'`
# Used Memory (OS ๊ด์ )
USED1=`free | grep ^Mem | awk '{print $3}'`
# Used Memory (Buffer/Cache ์ ์ธ, CentOS 6 ์ดํ ๊ตฌ๋ฒ์ ๋ฐฉ์)
# USED2=`free | grep ^-/+ | awk '{print $3}'`
# CentOS 7 ์ด์ (available ์ปฌ๋ผ ๋ฑ ๊ณ ๋ ค ํ์ํ๋ ๋จ์ ๊ณ์ฐ ์)
# ๋ฒํผ/์บ์๋ฅผ ํฌํจํ ๋จ์ ์ฌ์ฉ๋ฅ
NOMINAL=$((100*USED1/TOTAL))
echo "Memory Usage: ${NOMINAL}%"
One-Liner (๊ฐํธ ๊ณ์ฐ)
awk๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ค๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ถ๋ ฅํฉ๋๋ค.
# ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ๋๋น ์ฌ์ฉ๋(Used) ๋น์จ
awk '/^Mem/ {printf("Used: %u%%", 100*$3/$2);}' <(free -m)
# (์ฐธ๊ณ ) ๋ฒํผ/์บ์๋ฅผ ์ ์ธํ ์ค ์ฌ์ฉ๋ฅ ๊ณ์ฐ์ free -m์ available ์ปฌ๋ผ์ ํ์ฉํ๋ ๊ฒ์ด ์ ํํฉ๋๋ค.
free -m | awk 'NR==2{printf "Memory Usage: %.2f%%\n", ($3/$2)*100 }'
Next Step:
๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ์ ๋ช
๋ น์ด๋ค์ ~/.bash_profile์ alias๋ก ๋ฑ๋กํด๋๋ฉด, ๊ธด ๋ช
๋ น์ด๋ฅผ ํ์ดํํ๋ ์๊ณ ๋ฅผ ๋๊ณ ์คํ๋ก ์ธํ ์ฌ๊ณ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.