VM Windows 10 trên Proxmox thỉnh thoảng mất kết nối RDP: bốn nguyên nhân cần loại trừ trước khi reboot
Tình huống "RDP không vào được, reboot VM thì vào lại bình thường" là một trong những lỗi gây khó chịu nhất với máy ảo Windows chạy liên tục trên Proxmox. Vấn đề là thao tác reboot xóa sạch mọi dấu vết, khiến người quản trị không bao giờ biết được nguyên nhân thực sự. Trong trường hợp này, Proxmox thường không phải là thủ phạm đầu tiên cần nghi ngờ.
Khả năng 1: dịch vụ TermService hoặc RDP listener bị treo
Dấu hiệu nhận biết khá rõ: VM vẫn chạy, ping vẫn được, Console trên Proxmox vẫn vào Windows bình thường, nhưng RDP không kết nối được.
RDP phụ thuộc vào RDP-Tcp listener. Microsoft hướng dẫn kiểm tra bằng lệnh qwinsta. Ở trạng thái bình thường, kết quả phải hiển thị dòng rdp-tcp với trạng thái Listen. Nếu không thấy Listen, lỗi nằm ở dịch vụ hoặc listener của RDP chứ không phải hypervisor.
Điều quan trọng: lần sau khi lỗi xảy ra, đừng reboot ngay. Hãy vào Proxmox, chọn VM, mở Console rồi khởi chạy PowerShell với quyền Admin và chạy lần lượt Get-Service TermService, qwinsta, và Get-NetTCPConnection -LocalPort 3389 -State Listen.
Nếu không có listener, thử Restart-Service TermService -Force. Trường hợp RDP vào lại được ngay sau đó, gần như có thể khẳng định dịch vụ RDP của Windows bị lỗi, còn VM và Proxmox vẫn khỏe mạnh.
Khả năng 2: card mạng VirtIO hoặc network stack bị treo
Đây là khả năng đáng quan tâm với VM Windows trên Proxmox. Biểu hiện khác với trường hợp trên: Console vẫn vào được, Windows vẫn chạy, ứng dụng vẫn hoạt động, nhưng cả ping lẫn RDP đều timeout.
Kiểm tra bằng Get-NetAdapter và ipconfig /all. Nếu adapter VirtIO có dấu hiệu bất thường, thử Restart-NetAdapter -Name "Ethernet". Mạng trở lại ngay lập tức đồng nghĩa vấn đề nằm ở VirtIO NIC hoặc network stack của Windows, không liên quan đến RDP.
Proxmox khuyến nghị Windows guest sử dụng VirtIO drivers để đạt hiệu năng tốt nhất, và driver cần được cài đúng cũng như cập nhật phù hợp.
Khả năng 3: máy ảo Windows thực sự bị nghẽn
Nếu khi RDP chết mà vào Console thấy Windows có chuột giật, giao diện treo, Task Manager không mở được, màn hình đen, disk hoặc CPU chạm 100%, RAM gần cạn, thì RDP chỉ là nạn nhân chứ không phải nguyên nhân.
Chuỗi nhân quả có thể đi theo hai hướng. Hướng thứ nhất bắt nguồn từ chính ứng dụng bên trong: MetaTrader hoặc EA gây rò rỉ CPU, RAM, handle, làm Windows chậm dần, TermService không phản hồi và RDP chết theo. Hướng thứ hai bắt nguồn từ host: PVE chịu áp lực RAM hoặc ballooning khiến VM thiếu bộ nhớ, pagefile và disk I/O tăng vọt, dẫn tới RDP timeout.
Proxmox sử dụng memory ballooning để thay đổi lượng RAM mà guest nhận được trong lúc chạy. Với một VM chuyên chạy EA 24/7, nếu host dư RAM, cấu hình nên thiên về memory cố định và tắt ballooning, thay vì để Maximum 8 GB, Minimum 2 GB và bật ballooning. Mục tiêu của loại VM này là ổn định, không phải nhồi được càng nhiều máy ảo càng tốt.
Khả năng 4: chỉ session RDP bị treo
Trường hợp cuối cùng: VM, mạng, cổng 3389 và TermService đều bình thường, nhưng session người dùng bị lỗi. Lệnh qwinsta có thể cho thấy nhiều session cũ ở trạng thái Disc. Khi đó chỉ cần đăng xuất session treo bằng logoff kèm ID session rồi kết nối lại, không cần khởi động lại toàn bộ Windows.
Thứ tự chẩn đoán cho lần sau
Quy trình nhanh nhất bắt đầu từ Console trên Proxmox. Nếu Console cũng treo, vấn đề nằm ở Windows, CPU, RAM, disk hoặc ứng dụng đang chạy. Nếu Console bình thường, chuyển sang ping VM: ping thất bại thì nghi VirtIO và network stack; ping thành công thì kiểm tra cổng 3389. Cổng đóng dẫn về TermService và listener, cổng mở dẫn về session hoặc khâu xác thực RDP.
Trên máy client, lệnh Test-NetConnection <IP-VM> -Port 3389 cho kết quả TcpTestSucceeded : True nghĩa là mạng và cổng RDP đã thông tới Windows.
Nên cài QEMU Guest Agent
VM Windows trên PVE nên có đủ VirtIO drivers và QEMU Guest Agent. Thành phần này giúp Proxmox quan sát và quản lý guest tốt hơn, đặc biệt hữu ích với máy ảo chạy không người trực. Khi sự cố xảy ra, quản trị viên có thể lần lượt xác định PVE còn sống, VM còn sống, Guest Agent còn sống và Windows đang gặp vấn đề gì, thay vì chỉ còn mỗi lựa chọn reboot VM.