IT기초

μ„œλ²„κ°€ κ°‘μžκΈ° λ‹€μš΄λμ„ λ•Œ 원인 μ°ΎλŠ” 방법 정리

πŸ₯„ν…Œν¬ ν•œ μŠ€ν‘Ό 2026. 5. 25. 17:57

λͺ©μ°¨

  1. μ„œλ²„ λ‹€μš΄, λ‹Ήν™©ν•˜μ§€ 말자
  2. 1단계 – μ„œλ²„κ°€ μ‚΄μ•„μžˆλŠ”μ§€ 확인
  3. 2단계 – μ„œλΉ„μŠ€ μƒνƒœ 확인
  4. 3단계 – μ‹œμŠ€ν…œ μžμ› 확인 (CPU, λ©”λͺ¨λ¦¬, λ””μŠ€ν¬)
  5. 4단계 – 둜그둜 원인 μΆ”μ ν•˜κΈ°
  6. 5단계 – μ„œλ²„κ°€ μ™„μ „νžˆ μ‘λ‹΅ν•˜μ§€ μ•Šμ„ λ•Œ
  7. 원인별 ν•΄κ²° 방법 μš”μ•½
  8. 재발 λ°©μ§€λ₯Ό μœ„ν•œ 체크리슀트
  9. 정리

1. μ„œλ²„ λ‹€μš΄, λ‹Ήν™©ν•˜μ§€ 말자

μ„œλ²„λ₯Ό μš΄μ˜ν•˜λ‹€ 보면 μ–Έμ  κ°€ λ°˜λ“œμ‹œ λ‹€μš΄ 상황을 맞λ‹₯λœ¨λ¦½λ‹ˆλ‹€. μ‚¬μ΄νŠΈμ— κ°‘μžκΈ° 접속이 μ•ˆ λœλ‹€λŠ” 연락을 λ°›κ±°λ‚˜, λͺ¨λ‹ˆν„°λ§ μ•Œλ¦Όμ΄ μšΈλ¦¬λŠ” μˆœκ°„ 머릿속이 ν•˜μ–˜μ§€λŠ” κ²½ν—˜μ€ μ„œλ²„λ₯Ό 닀뀄본 μ‚¬λžŒμ΄λΌλ©΄ λˆ„κ΅¬λ‚˜ κ²ͺ어봀을 κ²ƒμž…λ‹ˆλ‹€.

이런 μƒν™©μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 것은 μΉ¨μ°©ν•˜κ²Œ μˆœμ„œλŒ€λ‘œ 원인을 μΆ”μ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 원인도 λͺ¨λ₯Έ 채 μ„œλ²„λ₯Ό λ¬΄μž‘μ • μž¬λΆ€νŒ…ν•˜λ©΄ μΌμ‹œμ μœΌλ‘œ 볡ꡬ될 수 μžˆμ§€λ§Œ, κ·Όλ³Έ 원인을 ν•΄κ²°ν•˜μ§€ λͺ»ν•΄ 같은 λ¬Έμ œκ°€ λ°˜λ³΅λ©λ‹ˆλ‹€.

이 κΈ€μ—μ„œλŠ” μ„œλ²„κ°€ λ‹€μš΄λμ„ λ•Œ λ‹¨κ³„λ³„λ‘œ 원인을 μ°ΎλŠ” 체계적인 방법을 μ•Œλ €λ“œλ¦½λ‹ˆλ‹€.

2. 1단계 – μ„œλ²„κ°€ μ‚΄μ•„μžˆλŠ”μ§€ 확인

κ°€μž₯ λ¨Όμ € μ„œλ²„ μžμ²΄κ°€ μ‚΄μ•„μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. μ„œλΉ„μŠ€ λ‹€μš΄κ³Ό μ„œλ²„ 자체 λ‹€μš΄μ€ 원인과 ν•΄κ²° 방법이 μ™„μ „νžˆ λ‹€λ¦…λ‹ˆλ‹€.

ping ν…ŒμŠ€νŠΈ λ‚΄ μ»΄ν“¨ν„°μ—μ„œ μ„œλ²„λ‘œ ping을 보내 λ„€νŠΈμ›Œν¬ μ—°κ²° μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

ping μ„œλ²„IPμ£Όμ†Œ

응닡이 였면 μ„œλ²„λŠ” μ‚΄μ•„μžˆμ§€λ§Œ νŠΉμ • μ„œλΉ„μŠ€κ°€ 죽은 κ²ƒμž…λ‹ˆλ‹€. 응닡이 μ—†λ‹€λ©΄ μ„œλ²„ μžμ²΄κ°€ λ‹€μš΄λ˜μ—ˆκ±°λ‚˜ λ„€νŠΈμ›Œν¬ λ¬Έμ œκ°€ μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

SSH 접속 μ‹œλ„ ping이 돼도 SSH둜 접속해 λ΄…λ‹ˆλ‹€. SSH 접속이 되면 μ„œλ²„λŠ” 정상 λ™μž‘ 쀑이고, νŠΉμ • μ„œλΉ„μŠ€μ— λ¬Έμ œκ°€ 생긴 κ²ƒμž…λ‹ˆλ‹€. SSH도 μ•ˆ λœλ‹€λ©΄ μ„œλ²„ 자체의 μ‹¬κ°ν•œ λ¬Έμ œμ΄λ―€λ‘œ ν΄λΌμš°λ“œ μ„œλΉ„μŠ€μ˜ μ½˜μ†”(μ›Ή 기반 원격 접속)을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

3. 2단계 – μ„œλΉ„μŠ€ μƒνƒœ 확인

SSH 접속이 됐닀면 μ„œλΉ„μŠ€ μƒνƒœλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. μ›Ή μ„œλ²„κ°€ μ‘λ‹΅ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ Nginx μƒνƒœλΆ€ν„° ν™•μΈν•©λ‹ˆλ‹€.

sudo systemctl status nginx

active (running) μƒνƒœκ°€ μ•„λ‹ˆλΌλ©΄ μ„œλΉ„μŠ€κ°€ 죽은 κ²ƒμž…λ‹ˆλ‹€. 둜그λ₯Ό 확인해 μ™œ μ’…λ£ŒλλŠ”μ§€ νŒŒμ•…ν•΄μ•Ό ν•©λ‹ˆλ‹€.

sudo journalctl -u nginx -n 100

λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„λ„ ν•¨κ»˜ ν™•μΈν•©λ‹ˆλ‹€.

sudo systemctl status mysql

4. 3단계 – μ‹œμŠ€ν…œ μžμ› 확인 (CPU, λ©”λͺ¨λ¦¬, λ””μŠ€ν¬)

μ„œλΉ„μŠ€ μžμ²΄λŠ” μ‹€ν–‰ 쀑인데 응닡이 λŠλ¦¬κ±°λ‚˜ μ—†λ‹€λ©΄ μžμ› 뢀쑱이 원인일 수 μžˆμŠ΅λ‹ˆλ‹€.

CPU μ‚¬μš©λŸ‰ 확인 top λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•΄ CPUκ°€ 100%에 λ‹¬ν•΄μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. νŠΉμ • ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό λ…μ ν•˜κ³  μžˆλ‹€λ©΄ 그것이 μ›μΈμž…λ‹ˆλ‹€.

top

λ©”λͺ¨λ¦¬ 확인 λ©”λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•˜λ©΄ μ„œλ²„κ°€ μŠ€μ™‘ μ˜μ—­μ„ μ‚¬μš©ν•˜κ²Œ 되고, 이 경우 μ„±λŠ₯이 κΈ‰κ²©νžˆ μ €ν•˜λ©λ‹ˆλ‹€.

free -h

available 값이 거의 0에 가깝닀면 λ©”λͺ¨λ¦¬ 뢀쑱이 μ›μΈμž…λ‹ˆλ‹€.

λ””μŠ€ν¬ 확인 λ””μŠ€ν¬κ°€ 가득 μ°¨λ©΄ 둜그 기둝, 파일 생성 λ“± λͺ¨λ“  μ“°κΈ° μž‘μ—…μ΄ μ‹€νŒ¨ν•©λ‹ˆλ‹€. μ„œλ²„κ°€ λ‹€μš΄λ˜λŠ” κ°€μž₯ ν”ν•œ 원인 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

df -h

Use% ν•­λͺ©μ΄ 100%에 가깝닀면 λ””μŠ€ν¬ 뢀쑱이 μ›μΈμž…λ‹ˆλ‹€. 둜그 νŒŒμΌμ΄λ‚˜ μž„μ‹œ νŒŒμΌμ„ 정리해야 ν•©λ‹ˆλ‹€.

5. 4단계 – 둜그둜 원인 μΆ”μ ν•˜κΈ°

μžμ›μ΄ 정상인데도 μ„œλΉ„μŠ€κ°€ μ£½μ—ˆλ‹€λ©΄ 둜그λ₯Ό μƒμ„Ένžˆ μ‚΄νŽ΄λ΄μ•Ό ν•©λ‹ˆλ‹€.

μ‹œμŠ€ν…œ 둜그 확인 μ„œλ²„ μ „μ²΄μ—μ„œ λ°œμƒν•œ 였λ₯˜λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

sudo tail -n 100 /var/log/syslog

μ„œλΉ„μŠ€λ³„ 였λ₯˜ 둜그 확인

sudo tail -n 100 /var/log/nginx/error.log

OOM Killer λ™μž‘ μ—¬λΆ€ 확인 λ©”λͺ¨λ¦¬κ°€ μ™„μ „νžˆ λΆ€μ‘±ν•˜λ©΄ λ¦¬λˆ…μŠ€ 컀널이 νŠΉμ • ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°•μ œ μ’…λ£Œν•˜λŠ” **OOM Killer(Out of Memory Killer)**κ°€ λ™μž‘ν•©λ‹ˆλ‹€. 이 경우 μ•„λž˜ λͺ…λ Ήμ–΄λ‘œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

sudo dmesg | grep -i "killed process"

OOM Killerκ°€ Nginxλ‚˜ MySQL을 μ’…λ£Œν–ˆλ‹€λ©΄ λ©”λͺ¨λ¦¬ 증섀 λ˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 해결이 ν•„μš”ν•©λ‹ˆλ‹€.

6. 5단계 – μ„œλ²„κ°€ μ™„μ „νžˆ μ‘λ‹΅ν•˜μ§€ μ•Šμ„ λ•Œ

SSH도 접속이 μ•ˆ 되고 ping도 μ•ˆ λœλ‹€λ©΄ μ„œλ²„ μžμ²΄κ°€ μ™„μ „νžˆ λ‹€μš΄λœ κ²ƒμž…λ‹ˆλ‹€. 이 경우 ν΄λΌμš°λ“œ μ„œλΉ„μŠ€μ˜ 관리 μ½˜μ†”μ„ 톡해 λŒ€μ‘ν•©λ‹ˆλ‹€.

AWS EC2의 경우 AWS μ½˜μ†”μ—μ„œ EC2 μΈμŠ€ν„΄μŠ€ μƒνƒœλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€κ°€ stopped μƒνƒœλΌλ©΄ Start λ²„νŠΌμœΌλ‘œ μž¬μ‹œμž‘ν•©λ‹ˆλ‹€. μ‹€ν–‰ 쀑인데 응닡이 μ—†λ‹€λ©΄ μΈμŠ€ν„΄μŠ€ μž¬λΆ€νŒ…(Reboot) λ˜λŠ” κ°•μ œ 쀑지 ν›„ μ‹œμž‘(Stop → Start)을 μ‹œλ„ν•©λ‹ˆλ‹€.

μž¬μ‹œμž‘ ν›„μ—λŠ” λ°˜λ“œμ‹œ 둜그λ₯Ό 확인해 원인을 νŒŒμ•…ν•˜κ³ , 재발 λ°©μ§€ 쑰치λ₯Ό μ·¨ν•΄μ•Ό ν•©λ‹ˆλ‹€.

7. 원인별 ν•΄κ²° 방법 μš”μ•½

원인증상해결 방법
μ„œλΉ„μŠ€ 비정상 μ’…λ£Œ νŠΉμ • μ„œλΉ„μŠ€λ§Œ 응닡 μ—†μŒ systemctl restart둜 μž¬μ‹œμž‘
CPU κ³ΌλΆ€ν•˜ topμ—μ„œ CPU 100% 원인 ν”„λ‘œμ„ΈμŠ€ 확인 ν›„ 처리
λ©”λͺ¨λ¦¬ λΆ€μ‘± freeμ—μ„œ available 거의 0 λΆˆν•„μš”ν•œ ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ, λ©”λͺ¨λ¦¬ 증섀
λ””μŠ€ν¬ ν’€ dfμ—μ„œ Use% 100% 둜그·μž„μ‹œνŒŒμΌ 정리, λ””μŠ€ν¬ 증섀
OOM Killer λ™μž‘ dmesgμ—μ„œ killed process λ©”λͺ¨λ¦¬ λˆ„μˆ˜ ν•΄κ²°, λ©”λͺ¨λ¦¬ 증섀
μ„œλ²„ 자체 λ‹€μš΄ ping, SSH λͺ¨λ‘ λΆˆκ°€ ν΄λΌμš°λ“œ μ½˜μ†”μ—μ„œ μž¬μ‹œμž‘

8. 재발 λ°©μ§€λ₯Ό μœ„ν•œ 체크리슀트

μ„œλ²„λ₯Ό λ³΅κ΅¬ν•œ ν›„μ—λŠ” λ°˜λ“œμ‹œ 재발 λ°©μ§€ 쑰치λ₯Ό μ·¨ν•΄μ•Ό ν•©λ‹ˆλ‹€.

원인이 된 둜그λ₯Ό μ €μž₯해두고 λ‚˜μ€‘μ— λΆ„μ„ν•©λ‹ˆλ‹€. λ””μŠ€ν¬κ°€ λ¬Έμ œμ˜€λ‹€λ©΄ logrotate 섀정을 μ κ²€ν•˜κ³  λΆˆν•„μš”ν•œ νŒŒμΌμ„ μ •κΈ°μ μœΌλ‘œ μ •λ¦¬ν•˜λŠ” cron μž‘μ—…μ„ μ„€μ •ν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬κ°€ λ¬Έμ œμ˜€λ‹€λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”λͺ¨λ¦¬ 섀정을 μ κ²€ν•©λ‹ˆλ‹€. CPU κ³ΌλΆ€ν•˜κ°€ λ¬Έμ œμ˜€λ‹€λ©΄ μ–΄λ–€ μš”μ²­μ΄ μ›μΈμ΄μ—ˆλŠ”μ§€ access 둜그λ₯Ό λΆ„μ„ν•©λ‹ˆλ‹€. 그리고 λͺ¨λ‹ˆν„°λ§ 도ꡬλ₯Ό μ„€μ •ν•΄ μžμ› μ‚¬μš©λŸ‰μ΄ μž„κ³„μΉ˜λ₯Ό λ„˜μœΌλ©΄ μ•Œλ¦Όμ„ 받도둝 ν•©λ‹ˆλ‹€.

9. 정리

μ„œλ²„ λ‹€μš΄ μ‹œ λŒ€μ‘ μˆœμ„œλ₯Ό μ •λ¦¬ν•©λ‹ˆλ‹€.

1λ‹¨κ³„λ‘œ pingκ³Ό SSH둜 μ„œλ²„ 생쑴 μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 2λ‹¨κ³„λ‘œ systemctl status둜 μ„œλΉ„μŠ€ μƒνƒœλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 3λ‹¨κ³„λ‘œ top, free, df둜 μžμ› μ‚¬μš©λŸ‰μ„ ν™•μΈν•©λ‹ˆλ‹€. 4λ‹¨κ³„λ‘œ 둜그 νŒŒμΌμ—μ„œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λΆ„μ„ν•©λ‹ˆλ‹€. 5λ‹¨κ³„λ‘œ μ„œλ²„ μžμ²΄κ°€ λ‹€μš΄λλ‹€λ©΄ ν΄λΌμš°λ“œ μ½˜μ†”μ—μ„œ μž¬μ‹œμž‘ν•©λ‹ˆλ‹€.

볡ꡬ ν›„μ—λŠ” 원인을 λΆ„μ„ν•˜κ³  재발 λ°©μ§€ 쑰치λ₯Ό λ°˜λ“œμ‹œ μ·¨ν•΄μ•Ό ν•©λ‹ˆλ‹€.