서버 접속이 안되는데?
어느날 회사에서 업무를 하던 중 친구한테 연락이 왔다. 같이 하려고 파놓은 마인크래프트 서버가 접속이 안된다는 연락이었다.
처음엔 백업을 위해 새벽마다 서비스 데몬을 재구동하는 Cron이 비정상 동작한 것으로 추정됐고, 다시 서비스를 올리려고 VDI에 붙어서 SSH 연결을 시도했다.
하지만 돌아오는 건 Connection Failed라는 메세지뿐이었고 심상치 않음을 직감했다.
현재 상태부터 파악해보자
우선 다행스럽게도 ProxmoxVE 서버 자체의 문제나 건물 전력 문제는 아니라는 점이다. Windows VDI로 접속이 된다는 것 자체가 최악의 상황은 아니라는 걸 증명해줬다.
ProxmoxVE 웹 콘솔에 접속해서 마인크래프트 서버가 동작 중인 VM 상태부터 확인했다.
웬걸, VM 자체가 종료된 상태였다. 그런데 웹 콘솔 하단에 출력되는 로그에는 별다른 에러 메세지가 보이지 않았다.
일단 서버 복구부터 해야 되니 VM을 구동시키고 마인크래프트 서버 데몬을 올렸다. 다행스럽게도 서비스는 문제가 없었고, 단순한 일시적 오류라고 판단해서 넘어가려 했다.
안일했던 판단
그러고 며칠 뒤 중간고사가 어느 정도 끝나서 여유가 생겨 서버에 접속하려고 하니 접속 실패가 발생했다. 다시 확인해보니 또 VM이 종료된 상태였고, 재발이 됐다는 건 근본적인 해결이 필요하다는 의미였다.
문제 해결을 위한 원인 분석
가장 먼저 확인해야 될 건 당연히 서비스가 동작하는 VM 서버 자체다. 현재 VM 서버 사양은 다음과 같이 구성된 상태다.
| 구분 | 사양 |
|---|---|
| OS | Rocky Linux 9.7 |
| CPU | vCPU 6 Core |
| MEM | 32GB |
| Disk | 100GB |
그리고 설치된 마인크래프트 버전과 모드로더는 다음과 같다.
| 구분 | 버전 |
|---|---|
| Minecraft | 1.21.1 |
| 모드로더 | NeoForge 21.1.220 |
일단 서비스 데몬 분석부터 해보자
혹여나 마인크래프트 서버가 크래시가 발생해서 그 여파로 종료된 건지 확인해봤다.
tail -n 200 /opt/minecraft/server/logs/latest.log
ls /opt/minecraft/server/crash-reports
서비스가 종료됐던 날짜의 마인크래프트 로그를 확인했을 때 어떠한 크래시 로그도 확인되지 않았고, 백업 및 재구동을 지정해둔 Cron 또한 오동작 로그를 확인할 수 없었다.
그렇다면 OS 자체 문제일까?
다음 단계로 OS 환경을 검토해야 됐다. 메모리 과점유로 인한 OOM Killer나 여러 사유로 발생하는 시스템 셧다운을 점검하기 위해 다음과 같이 진행했다.
[minecraft@SRV-minecraft ~]$ journalctl --list-boots
IDX BOOT ID FIRST ENTRY LAST ENTRY
-1 d1916feedb1d463c9927378ef68399f7 Sun 2026-04-26 11:39:24 KST Mon 2026-04-27 03:45:56 KST
0 367ee448223a445e8242291f05debd2f Mon 2026-04-27 08:43:04 KST Mon 2026-04-27 08:45:18 KST
[minecraft@SRV-minecraft ~]$ last -x | head -20
minecraft pts/0 192.168.0.15 Mon Apr 27 08:43 still logged in
runlevel (to lvl 3) Mon Apr 27 08:43 still running
reboot system boot Mon Apr 27 08:43 still running
minecraft pts/0 192.168.0.5 Sun Apr 26 11:39 - 14:30 (02:50)
runlevel (to lvl 3) Sun Apr 26 11:39 - 08:43 (21:03)
reboot system boot Sun Apr 26 11:39 still running
[minecraft@SRV-minecraft ~]$ who -b && uptime -s
system boot 2026-04-27 08:43
2026-04-27 08:43:04
해당 로그를 통해 정상적인 종료가 아닌 호스트 쪽에서 하이퍼바이저를 강제 종료시킨 것으로 확인됐다.
부팅 이력을 보면 -1번 부팅이 04-26 11:39에 시작해서 04-27 03:45에 끊겼고, 0번 부팅이 08:43에 다시 올라왔다. 즉 새벽 4시경에 외부에서 VM이 꺼진 셈이다.
ProxmoxVE 호스트를 살펴보자
운영 호스트인 ProxmoxVE의 Shell을 열어서 점검해봤다.
root@SRV:~# journalctl --since "2026-04-27 03:40" --until "2026-04-27 08:50" \
| grep -i "VMID\|qemu\|oom\|killed\|stop\|shutdown\|reset"
Apr 27 04:00:03 SRV kernel: CPU 5/KVM invoked oom-killer: gfp_mask=0x140dca(GFP_HIGHUSER_MOVABLE|__GFP_COMP|__GFP_ZERO), order=0, oom_score_adj=0
Apr 27 04:00:03 SRV kernel: oom_kill_process+0x110/0x240
Apr 27 04:00:03 SRV kernel: [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name
Apr 27 04:00:03 SRV kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=qemu.slice,mems_allowed=0,global_oom,task_memcg=/qemu.slice/200.scope,task=kvm,pid=2429669,uid=0
Apr 27 04:00:03 SRV kernel: Out of memory: Killed process 2429669 (kvm) total-vm:34555820kB, anon-rss:31487720kB, file-rss:640kB, shmem-rss:0kB, UID:0 pgtables:62920kB oom_score_adj:0
Apr 27 04:00:03 SRV systemd[1]: 200.scope: A process of this unit has been killed by the OOM killer.
Apr 27 04:00:03 SRV systemd[1]: 200.scope: Failed with result 'oom-kill'.
이 로그에 원인이 있었다. 핵심만 추려보면 이렇다.
CPU 5/KVM invoked oom-killer
task_memcg=/qemu.slice/200.scope
task=kvm
Out of memory: Killed process 2429669 (kvm)
200.scope: Failed with result 'oom-kill'
상황 구조를 정리하면 다음과 같다.
[물리 서버 / Proxmox / KVM]
↓
[qemu/kvm 프로세스] ← 호스트 OOM으로 강제 종료
↓
[Rocky Linux VM]
↓
[마인크래프트 서버]
호스트 메모리가 부족해지자 Linux 커널의 OOM Killer가 메모리를 가장 많이 쓰는 프로세스를 골라 죽였고, 그게 하필 마인크래프트 VM을 돌리던 kvm 프로세스였던 것이다.
결론
결과적으로 호스트 메모리 부족으로 인해 VM이 강제 종료된 것으로 확인됐다.
조치는 단순했다. 불필요하게 켜져 있던 다른 VM들을 전부 꺼두는 방향으로 정리했다. 당장은 이걸로 재발을 막을 수 있지만, 장기적으로는 호스트 메모리 사용량을 주기적으로 모니터링하거나 VM별 메모리 상한선을 좀 더 빡빡하게 잡아두는 게 맞겠다는 걸 느꼈다.
요즘 램 값부터 시작해서 여러 부품 가격도 오르는 마당에, 서버가 아예 죽은 줄 알고 꽤 식겁했던 한 주였다. 다행히 하드웨어 문제는 아니었지만, 이번 일을 계기로 호스트 자원 관리를 좀 더 신경 써야겠다는 교훈을 얻었다.
서버야, 앞으로는 좀 건강하게 지내자.