Pages

Powered by Blogger.

Kiểm tra khi máy Ubuntu bị lỗi

 


Việc máy chủ Ubuntu bị treo cứng (freeze), không thể SSH và phải hard reset (ngắt nguồn) thường do 3 nguyên nhân chính: tràn RAM (Out of Memory), lỗi Kernel (Kernel Panic), hoặc lỗi phần cứng.

Vì bạn đã hard reset, dữ liệu trong RAM đã mất. Bạn cần tìm các log được ghi lại trên ổ cứng ngay trước thời điểm máy bị treo. Dưới đây là quy trình kiểm tra chi tiết:


1. Sử dụng journalctl (Quan trọng nhất)

Trên Ubuntu hiện đại (sử dụng systemd), journalctl là nơi lưu trữ log tập trung. Lệnh quan trọng nhất để xem log của lần khởi động trước (trước khi bạn reset máy) là:

Bash
journalctl -b -1 -e
  • -b -1: Xem log của boot session trước đó (lần chạy máy bị treo).

  • -e: Jump to end (nhảy xuống cuối log, nơi các lỗi cuối cùng thường xuất hiện trước khi sập).

Bạn cần tìm gì ở đây?

Hãy dùng phím mũi tên lên để lội ngược dòng thời gian. Tìm các từ khóa màu đỏ hoặc các dòng có nội dung:

  • Out of memory / OOM Killer: Máy hết RAM và Linux kernel bắt đầu giết tiến trình (thường giết luôn sshd).

  • Kernel panic hoặc Call Trace: Lỗi nghiêm trọng của hệ điều hành hoặc driver.

  • Hardware Error: Lỗi phần cứng.

2. Kiểm tra các file log truyền thống

Nếu journalctl không lưu log cũ (do cấu hình), hãy kiểm tra các file text trong thư mục /var/log.

a. Kiểm tra log hệ thống (Syslog):

Đây là nơi ghi lại hoạt động chung. Bạn cần tìm thời điểm thời gian khớp với lúc máy bị treo.

Bash
grep -i "error\|fail\|panic" /var/log/syslog
# Hoặc xem phần cuối của file syslog cũ (đã được log rotate)
zcat /var/log/syslog.1.gz | tail -n 100

(Lưu ý: Ubuntu có thể đổi tên file thành syslog.1 hoặc nén lại).

b. Kiểm tra log Kernel (Kern.log):

Nơi chứa các thông báo từ nhân Linux (rất quan trọng cho lỗi treo máy).

Bash
cat /var/log/kern.log | tail -n 200

Hãy tìm dòng Out of memory: Kill process.... Đây là thủ phạm phổ biến nhất khiến SSH bị disconnect và console không phản hồi.

c. Kiểm tra log xác thực (Auth.log):

Để chắc chắn không phải do bị tấn công (Brute-force SSH) khiến máy quá tải:

Bash
cat /var/log/auth.log | tail -n 100

3. Các kịch bản phổ biến và dấu hiệu nhận biết

Dấu hiệu trong LogNguyên nhân dự đoánCách khắc phục
Out of memory: Kill process (sshd/mysql/java...)Máy hết RAM. OOM Killer giết tiến trình SSH để cứu hệ thống nhưng thất bại.Tạo thêm Swap file hoặc nâng cấp RAM. Dùng htop để theo dõi.
Dòng log đột ngột dừng lại (không có báo lỗi)Máy bị treo cứng phần cứng (CPU/Power) hoặc Kernel Panic quá nhanh không kịp ghi log.Kiểm tra nguồn điện, nhiệt độ CPU, hoặc RAM.
EXT4-fs error (device sda1): ...Ổ cứng bị lỗi (Read-only filesystem).Backup dữ liệu ngay lập tức và kiểm tra ổ cứng.
Call Trace: [ ... ]Lỗi Driver hoặc Module Kernel.Cập nhật Kernel hoặc kiểm tra driver thiết bị ngoại vi mới cài.

4. Nếu Log hoàn toàn trống trơn (Log dừng đột ngột)

Nếu thời gian trong log dừng lại trước khi bạn reset khoảng vài tiếng mà không có lỗi gì, khả năng cao là lỗi phần cứng khiến máy "đóng băng" tức thì khiến ổ cứng không kịp ghi dữ liệu.

Lúc này hãy cài đặt các công cụ theo dõi cho lần sau:

a. Cài đặt SAR (System Activity Report):

Công cụ này ghi lại lịch sử sử dụng CPU/RAM mỗi 10 phút. Nếu máy treo, bạn có thể xem lại lúc đó RAM/CPU có bị spike (tăng vọt) không.

Bash
sudo apt install sysstat
# Xem lịch sử RAM ngày hôm nay
sar -r

b. Kiểm tra ổ cứng (S.M.A.R.T):

Bash
sudo apt install smartmontools
sudo smartctl -a /dev/sda  # Thay sda bằng ổ đĩa của bạn

Tìm dòng Reallocated_Sector_Ct hoặc Current_Pending_Sector. Nếu khác 0, ổ cứng sắp hỏng.

c. Kiểm tra nhiệt độ (Overheating):

Bash
sudo apt install lm-sensors
sudo sensors

Bước tiếp theo đề xuất

Bạn hãy thử chạy lệnh sau và dán kết quả 20 dòng cuối cùng vào đây, tôi sẽ giúp bạn phân tích cụ thể:

Bash
journalctl -b -1 -n 20

====

Tình huống thường gặp gây ra lỗi này trên server Ubuntu

  1. Bạn đang dùng card AMD Radeon cũ (thường là RX 460/560, R7 250, R9 270… hoặc FirePro) làm card chính (không có iGPU Intel).
  2. Driver đang dùng là radeon (open-source cũ), không phải amdgpu.
  3. Có một tiến trình nào đó (thường là Xorg, hoặc một ứng dụng đồ họa bị lỗi, hoặc thậm chí là minecraft, electron app, chrome tab…) đang rò rỉ (leak) bộ nhớ GPU rất nhanh.
  4. VRAM chỉ 2–4 GB → đầy trong vài phút → treo cứng.

Cách xác nhận ngay lập tức

Chạy các lệnh sau trên server (nếu còn lên được):

Bash
lspci -k | grep -EA3 'VGA|3D|Display'

Nếu thấy:

text
VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] ...
Kernel driver in use: radeon

→ chính xác là trường hợp này.

Tiếp theo kiểm tra dung lượng VRAM còn lại (nếu chưa treo):

Bash
sudo cat /sys/class/drm/card0/device/mem_info_vram_used
sudo cat /sys/class/drm/card0/device/mem_info_vram_total

Cách khắc phục triệt để (chọn 1 trong các cách sau)

Cách 1 – Tốt nhất: Chuyển sang dùng amdgpu driver (nếu card hỗ trợ)

Hầu hết card từ HD 7000 trở lên đều chạy được amdgpu tốt hơn và ít bị leak hơn.

Bash
sudo add-apt-repository ppa:oibaf/graphics-drivers -y
sudo apt update && sudo apt upgrade
sudo apt install linux-firmware

Thêm kernel parameter:

Bash
sudo nano /etc/default/grub
# Thêm vào dòng GRUB_CMDLINE_LINUX_DEFAULT:
amdgpu.si_support=0 amdgpu.cik_support=0 radeon.si_support=1 radeon.cik_support=1
# Không, ngược lại: để bật amdgpu cho card cũ
# Nếu là card Polaris trở xuống thì dùng:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.si_support=1 radeon.cik_support=0"

Sau đó:

Bash
sudo update-grub
sudo reboot

Cách 2 – Nhanh nhất: Tắt hẳn đồ họa, dùng chế độ console (nếu server không cần GUI)

Bash
sudo systemctl set-default multi-user.target
sudo systemctl stop gdm lightdm sddm
sudo systemctl disable gdm lightdm sddm

→ Server sẽ boot thẳng vào console, không dùng GPU → không bao giờ bị treo vì lỗi này nữa.

Cách 3 – Trung bình: Blacklist driver radeon, ép dùng modesetting hoặc vesa

Bash
sudo bash -c "echo 'blacklist radeon' > /etc/modprobe.d/blacklist-radeon.conf"
sudo update-initramfs -u
sudo reboot

→ Xorg sẽ fallback sang driver modesetting (chậm nhưng không bị leak VRAM).

Cách 4 – Tạm thời: Hạn chế bộ nhớ GPU cho Xorg

Bash
sudo mkdir -p /etc/X11/xorg.conf.d
sudo nano /etc/X11/xorg.conf.d/20-radeon.conf

Nội dung:

conf
Section "Device" Identifier "Radeon" Driver "radeon" Option "AccelMethod" "none" # hoặc "shadow" Option "DRI" "false" EndSection

→ Tắt tăng tốc 3D → ít tiêu tốn VRAM hơn rất nhiều.

Kết luận

Lỗi bạn gặp không phải lỗi phần cứng, mà là lỗi driver radeon cũ bị rò rỉ bộ nhớ GPU cho đến khi đầy → treo cứng toàn hệ thống. Giải pháp triệt để nhất nếu server không cần GUI: chuyển sang chế độ console (cách 2). Nếu vẫn muốn giữ GUI thì chuyển sang driver amdgpu hoặc blacklist radeon.

Bạn đang dùng card gì (kết quả của lspci) và server có cần GUI không? Mình sẽ đưa lệnh chính xác nhất cho bạn luôn.


====

Kiểm tra nhanh tình trạng thực tế ngay bây giờ

Chạy 3 lệnh này rồi paste kết quả:

Bash
# 1. Xem driver đang dùng là gì
lspci -nnk | grep -EA3 'VGA|3D|Display'

# 2. Xem module nào đang load
lsmod | grep -E 'amdgpu|radeon'

# 3. Xem card có đang ở trạng thái runtime suspended không
cat /sys/class/drm/card0/device/power/runtime_status

====

Cách duy nhất để monitor VRAM khi card đang suspended (nếu vẫn muốn xem)

Đánh thức card tạm thời rồi xem:

Bash
# Đánh thức GPU
echo on | sudo tee /sys/class/drm/card0/device/power/runtime_suspend

# Xem ngay lập tức (sẽ thấy số)
echo "VRAM used : $(( $(cat /sys/class/drm/card0/device/mem_info_vram_used) / 1048576 )) MB / $(( $(cat /sys/class/drm/card0/device/mem_info_vram_total) / 1048576 )) MB"

# Cho GPU ngủ lại để tiết kiệm điện
echo auto | sudo tee /sys/class/drm/card0/device/power/runtime_suspend

Hoặc cài amdgpu-top – nó tự đánh thức card khi chạy:

Bash
sudo apt install amdgpu-top   # chỉ cần cài 1 lần
amdgpu-top                    # chạy là thấy ngay VRAM, temp, power…

Tóm lại: Bạn không cần lo lắng nếu không thấy file mem_info_vram_used. Đó chính là dấu hiệu GPU đang ngủ → ngủ ngon → không tiêu thụ điện → không leak → không treo máy.

Bạn cứ chạy 3 lệnh kiểm tra ở trên để mình xác nhận lần cuối là “đã khỏi bệnh hoàn toàn” nhé!


====

Nếu sau này muốn bật lại GUI (tùy chọn, không bắt buộc)

Chỉ cần:

Bash
sudo systemctl set-default graphical.target
sudo apt install --reinstall xserver-xorg-video-amdgpu
sudo reboot

====

Nếu bạn muốn bật GUI lên ngay trên utadesktop (vì đây là máy desktop)

Chỉ cần 3 lệnh là GUI hoạt động trở lại ngay lập tức, và lần này sẽ dùng driver amdgpu đúng cách, không còn radeon, không còn leak:

Bash
# 1. Chuyển lại chế độ GUI
sudo systemctl set-default graphical.target

# 2. Cài (hoặc cài lại) display manager nhẹ nhất + driver amdgpu
sudo apt update
sudo apt install --reinstall xserver-xorg-video-amdgpu lightdm

# 3. Reboot
sudo reboot




0 comments:

Post a Comment