blog.git

blog

~ Personal research notes. blog.sqzer.com
git clone https://github.com/debuman/blog.git

content/writing/var-log-promox-meogtong-troubleshooting.md (4144B)

      1 ---
      2 title: "Promox 먹통 Troubleshooting"
      3 titleKo: ""
      4 date: 2025-12-03
      5 deck: ""
      6 type:
      7 tags: []
      8 draft:
      9 ---
     10 
     11 몇달 전부터 계속해서 Promox 와 Promox에서 돌아가고 있는 VM들의 서비스에 접근이 안되는 문제가 발생했다.
     12 
     13 정확한 이슈는 다음과 같다.
     14 
     15 - Promox 서버 자체에 GUI, SSH 접근 불가
     16 - Promox 서버 내의 VM과 서비스들 접근 불가 및 네트워크 오류
     17 - 웹 애플리케이션은 클라우드 터널링 떨어진것 확인
     18 - 위와 같은 이슈가 발생하면 물리적 전원 버튼을 눌러 시스템을 재부팅 하고 VM 서버들을 재부팅하면 접근 정상화, 서비스 정상화가 됨.
     19 - 하지만 몇일 지나지 않아 똑같은 이슈가 지속적으로 발생
     20 
     21 Promox 에서[“journalctl -e” or “journalctl -b -1 -e”](https://openpesto.com/etc-systemd-journalctl/)명령어로 시스템이 죽기직전 로그를 확인해본 결과 로그 내에 별다른 이슈 없었음.
     22 
     23 그렇다면 시스템이 한순간에 Freeze 된 상태가 된것으로 판단.
     24 
     25 서버에서 사용중인 **Intel I219-LM 칩셋 랜카드와 리눅스 기본 드라이버인 e1000e 사이에 유명한 TCP Offload(부하 분산) 버그가 있는것으로 확인.**[**[1]**](https://bugzilla.kernel.org/show_bug.cgi?id=118721&ref=openpesto.com)[**[2]**](https://forum.proxmox.com/threads/intel-nic-e1000e-hardware-unit-hang.106001/?ref=openpesto.com)[**[3]**](https://sourceforge.net/p/e1000/bugs/572/?ref=openpesto.com)
     26 
     27 해당 버그를 쉽게 설명하면 랜카드가 "내가 CPU 대신 이 데이터를 처리해 줄게!"라고 나섰다가, 감당하지 못하고 그냥 뻗어버리는 현상.
     28 
     29 원인은 해당 로그에서 확인할 수 있었음.
     30 
     31 ```bash
     32 $ lspci | grep -i ethernet
     33 Dec 02 23:21:58 devastator kernel: e1000e 0000:00:1f.6 eno2: Detected Hardware Unit Hang:
     34 ```
     35 
     36 - 해석: 리눅스 커널이 eno2라는 이름의 네트워크 장치(인텔 I219-LM)가 "하드웨어적으로 멈췄음(Hang)"을 감지
     37 - 상황: 랜카드가 멈추니 네트워크가 끊기고, Tailscale(VPN)도 연결이 끊어지며(controlhttp: context aborted), 시스템 전체가 네트워크 불능 상태에 빠진 것
     38 
     39 ### 해결 방법 (TCP Offload 끄기)
     40 
     41 랜카드가 무리하지 않도록 "너는 그냥 데이터만 전달해, 처리는 CPU가 할게"라고 설정을 바꿈.
     42 
     43 A. ethtool 설치
     44 
     45 ```bash
     46 $ apt update && apt install ethtool -y
     47 ```
     48 
     49 B. TCP Offload 끄기
     50 
     51 ```bash
     52 $ ethtool -K eno2 tso off gso off
     53 ```
     54 
     55 C. 재부팅 해도 유지되도록 설정 (영구 적용)
     56 
     57 C.1 네트워크 설정 파일 열기
     58 
     59 ```bash
     60 $ vim /etc/network/interfaces
     61 ```
     62 
     63 C.2 iface eno2(네트워크 인터페이스 이름) inet ... 라고 적힌 부분 찾기
     64 
     65 C.3 해당 설정 블록 바로 아래줄에 다음 내용 추가 (들여쓰기)
     66 
     67 ```bash
     68  $ post-up ethtool -K eno2 tso off gso off
     69 ```
     70 
     71 Ex)
     72 
     73 ```plaintext
     74 auto eno2
     75 iface eno2 inet manual
     76     post-up ethtool -K eno2 tso off gso off
     77 ```
     78 
     79 ### 요약
     80 
     81 해당 이슈는 **하드웨어(Intel I219)가 주장하는 스펙**과 **리눅스 드라이버(e1000e)가 보내는 데이터**간의 불일치로 인해 발생하였다.
     82 
     83 1. 원인: 리눅스 커널은 CPU 부하를 줄이기 위해 패킷 분할(Segmentation) 작업을 랜카드에 떠넘긴다. (TSO: TCP Segmentation Offload)
     84 2. 버그: 하지만 I219 칩셋의 특정 리비전은 버퍼 관리 미흡으로 인해, 과도한 TSO 요청이 들어오면 DMA 컨트롤러가 꼬이면서 칩셋 자체가 멈춰버린다. (Hang)
     85 3. 해결: ethtool -k eno2 tso off gso off 명령어는 커널에게 "이 랜카드의 TSO, GSO 기능을 사용하지 말고 CPU가 직접 패킷을 쪼개서 보내" 라고 지시하는 것
     86 
     87 ## References
     88 
     89 [1] [https://bugzilla.kernel.org/show_bug.cgi?id=118721](https://bugzilla.kernel.org/show_bug.cgi?id=118721&ref=openpesto.com)
     90 
     91 [2] [https://forum.proxmox.com/threads/intel-nic-e1000e-hardware-unit-hang.106001/](https://forum.proxmox.com/threads/intel-nic-e1000e-hardware-unit-hang.106001/?ref=openpesto.com)
     92 
     93 [3] [https://sourceforge.net/p/e1000/bugs/572/](https://sourceforge.net/p/e1000/bugs/572/?ref=openpesto.com)