Workshop: Linux Troubleshooting — แก้ปัญหาเซิร์ฟเวอร์แบบมือโปร

เมื่อ Server มีปัญหา ทักษะการ Troubleshoot อย่างเป็นระบบคือสิ่งที่แยก Sysadmin มือโปรออกจากมือใหม่ ปัญหา Server มักมาจาก 4 แหล่งหลัก ได้แก่ CPU/Memory/Disk ที่เต็ม, Network ที่ขาดหรือช้า, Service ที่ Crash หรือ Hang, และ Log ที่บอกว่าเกิดอะไรขึ้น การรู้ว่าจะดูอะไรก่อน และใช้คำสั่งอะไร ช่วยลดเวลาแก้ปัญหาจากชั่วโมงเหลือไม่กี่นาที

บทความนี้เป็น Workshop เชิงปฏิบัติ ครอบคลุม Troubleshooting ตั้งแต่ระบบ Slow ไปจนถึง Service Down, Disk Full, Network Issue, และ Memory Leak พร้อม Script สรุปสถานะ Server แบบครบวงจร

Framework การ Troubleshoot อย่างเป็นระบบ

ก่อนรันคำสั่งใด ๆ ให้ตั้งคำถาม 3 ข้อ: (1) เกิดอะไรขึ้น? (Symptom) (2) เกิดเมื่อไร? (Timeline) (3) มีอะไรเปลี่ยนแปลงก่อนเกิดปัญหา? (Recent Changes) แล้วจึงเริ่ม Diagnose ตามลำดับ: Resource → Service → Network → Log

# === STEP 1: ภาพรวมระบบ (รันก่อนเสมอ) ===

# uptime — load average และเวลา boot
uptime
# Output: 14:30:01 up 45 days, 2:15, 3 users, load average: 2.41, 1.85, 1.20
# load average: 1min, 5min, 15min — ถ้า > จำนวน CPU core = ระบบ overload

# จำนวน CPU core
nproc
grep -c processor /proc/cpuinfo

# ตรวจสอบ CPU, Memory, Swap ในคำสั่งเดียว
free -h && echo "---" && uptime && echo "---" && df -h /

# who — ใครกำลัง login อยู่บ้าง
who
last -10   # 10 login ล่าสุด

Diagnose CPU High Usage

# top — ดู CPU usage real-time
top
# กด: P = เรียงตาม CPU, M = เรียงตาม Memory, k = kill process, q = ออก

# ดู Process ที่กิน CPU มากสุด 10 อันดับ
ps aux --sort=-%cpu | head -11

# ดู CPU usage แบบละเอียดด้วย htop
htop   # ถ้าไม่มี: apt install htop / dnf install htop

# ดู CPU usage แต่ละ Core
mpstat -P ALL 1 3   # (package: sysstat)
# หรือ
top -d 1   # แล้วกด 1 เพื่อดูทุก Core

# ดูว่า Process ไหนใช้ CPU มากตลอด 10 วินาที
pidstat -u 1 10 | sort -k8 -rn | head -10

# ดู System Call ของ Process ที่น่าสงสัย (PID 1234)
strace -c -p 1234   # สรุป syscall ที่เรียกบ่อย
strace -p 1234 2>&1 | head -20   # ดู syscall แบบ real-time
# ตัวอย่าง: หา Process ที่ทำให้ load สูง
# Load average สูง แต่ CPU usage ต่ำ = I/O Wait

# ดู I/O Wait
iostat -x 1 3   # (package: sysstat)
# %iowait สูง = Disk เป็น Bottleneck

# หา Process ที่รอ I/O อยู่
ps aux | awk '$8 ~ /D/ {print}'   # State D = Uninterruptible Sleep (รอ I/O)

# ดู Disk I/O แบบ real-time
iotop -o   # (package: iotop) — แสดงเฉพาะ Process ที่กำลัง I/O

# ตรวจสอบว่า Disk ช้าหรือไม่
dd if=/dev/sda of=/dev/null bs=1M count=100 2>&1 | tail -1
# ถ้าช้ากว่า 100MB/s = Disk มีปัญหา

Diagnose Memory Issue และ OOM

# ดู Memory ทั้งหมด
free -h
# Output:
#               total    used    free   shared  buff/cache  available
# Mem:          7.8Gi   5.2Gi   256Mi    512Mi       2.4Gi      1.8Gi
# Swap:         2.0Gi   1.5Gi   512Mi
# available คือสิ่งที่สำคัญ — ถ้าน้อย = ใกล้หมด

# ดู Process ที่กิน Memory มากสุด
ps aux --sort=-%mem | head -11

# ดู Memory usage แบบละเอียด
cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree"

# ดู Memory Leak — Process ที่ Memory เพิ่มขึ้นเรื่อย ๆ
# ติดตาม PID 1234 ทุก 5 วินาที
watch -n 5 'ps -o pid,rss,vsz,comm -p 1234'
# rss = Resident Set Size (RAM จริง), vsz = Virtual Memory
# ตรวจสอบ OOM Killer (Out Of Memory)
# OOM Killer จะ Kill Process เมื่อ Memory หมด

# ดู OOM events ใน Kernel Log
dmesg | grep -i "oom\|out of memory\|killed process"
# หรือ
journalctl -k | grep -i "oom\|killed"

# ตัวอย่าง OOM Message:
# Out of memory: Kill process 15234 (mysqld) score 800 or sacrifice child

# ดู OOM Score ของแต่ละ Process (0-1000, ยิ่งสูงยิ่งถูก Kill ก่อน)
for pid in $(ls /proc | grep '^[0-9]'); do
    score=$(cat /proc/$pid/oom_score 2>/dev/null)
    comm=$(cat /proc/$pid/comm 2>/dev/null)
    [ -n "$score" ] && echo "$score $pid $comm"
done | sort -rn | head -10

# ป้องกัน Process สำคัญถูก OOM Kill
echo -1000 > /proc/$(pgrep -f "nginx")/oom_score_adj   # -1000 = ไม่ Kill เลย

Diagnose Disk Full และ Inode

# ตรวจสอบ Disk Usage
df -h
# ถ้า Use% = 100% = Disk Full

# ตรวจสอบ Inode (ไฟล์จำนวนมากอาจทำให้ Inode หมดแม้ Disk ยังว่าง)
df -i
# ถ้า IUse% = 100% = Inode หมด

# หา Directory ที่กิน Disk มากสุด
du -sh /* 2>/dev/null | sort -rh | head -10
du -sh /var/* 2>/dev/null | sort -rh | head -10

# หาไฟล์ขนาดใหญ่ที่สุด
find / -type f -size +100M -printf "%s %p\n" 2>/dev/null | sort -rn | head -10

# หาไฟล์ Log ที่ใหญ่ผิดปกติ
find /var/log -type f -size +50M 2>/dev/null | sort

# หา Deleted Files ที่ยังถูก Process ถือไว้ (Disk ไม่คืน)
lsof +L1 | grep deleted | awk '{print $7, $1, $2, $9}' | sort -rn | head -10
# แก้โดย Restart Service นั้น ๆ
# ทำความสะอาด Disk อย่างปลอดภัย

# ล้าง APT Cache (Ubuntu/Debian)
apt clean
apt autoremove --purge

# ล้าง DNF/YUM Cache (RHEL/Rocky)
dnf clean all

# ล้าง Journal Log เก่า (เก็บไว้แค่ 7 วัน)
journalctl --vacuum-time=7d
journalctl --disk-usage   # ดูก่อนว่าใช้เท่าไร

# Rotate Log ที่ไม่ได้ Rotate
logrotate -f /etc/logrotate.conf

# ล้าง Docker Images/Containers ที่ไม่ใช้แล้ว
docker system prune -af   # ระวัง: ลบ Unused Images ทั้งหมด
docker volume prune -f

# ล้าง Old Kernel (Ubuntu)
dpkg --list | grep linux-image | grep -v "$(uname -r)" | awk '{print $2}'
apt remove --purge linux-image-X.X.X-XX-generic   # แทน X ด้วย version จริง

Diagnose Service Down

# ตรวจสอบสถานะ Service
systemctl status nginx
systemctl status mysql
systemctl status php8.2-fpm

# ดู Log ของ Service โดยตรง
journalctl -u nginx --since "1 hour ago" --no-pager
journalctl -u mysql -n 50   # 50 บรรทัดล่าสุด
journalctl -xe   # ดู System Log ล่าสุดพร้อม Error Context

# ดู Service ที่ Failed ทั้งหมด
systemctl --failed
systemctl list-units --state=failed

# ลอง Start Service และดู Error
systemctl start nginx
journalctl -u nginx -f   # ติดตาม Log แบบ real-time ขณะ Start
# Nginx — Troubleshoot ทั่วไป

# ตรวจสอบ Config
nginx -t
# Output ถ้าผ่าน: nginx: configuration file /etc/nginx/nginx.conf test is successful

# ดู Error Log
tail -50 /var/log/nginx/error.log
tail -50 /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c | sort -rn
# $9 = HTTP Status Code

# Port 80/443 ถูกใครใช้อยู่หรือไม่
ss -tlnp | grep ':80\|:443'
lsof -i :80
lsof -i :443
# MySQL/MariaDB — Troubleshoot ทั่วไป

# ตรวจสอบ Error Log
tail -50 /var/log/mysql/error.log
# หรือ
journalctl -u mysql -n 50

# เชื่อมต่อและดู Process List
mysql -u root -p -e "SHOW PROCESSLIST;"
mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"
mysql -u root -p -e "SHOW STATUS LIKE 'Max_used_connections';"

# ตรวจสอบ Disk Space ของ MySQL
du -sh /var/lib/mysql/
# Table ที่ใหญ่ที่สุด
mysql -u root -p -e "SELECT table_schema, table_name, ROUND((data_length+index_length)/1024/1024,1) AS 'MB' FROM information_schema.tables ORDER BY (data_length+index_length) DESC LIMIT 10;"

Diagnose Network Issue

# ตรวจสอบ Network Interface
ip link show
ip addr show

# ดู Route Table
ip route show
# ต้องมี default route: default via X.X.X.X dev eth0

# ทดสอบ Connectivity
ping -c 4 8.8.8.8       # ทดสอบ Internet
ping -c 4 192.168.1.1   # ทดสอบ Gateway

# ทดสอบ DNS
dig google.com
nslookup google.com 8.8.8.8   # ระบุ DNS Server
# ถ้า ping IP ได้แต่ ping domain ไม่ได้ = DNS มีปัญหา

# ตรวจสอบ DNS Config
cat /etc/resolv.conf
systemctl status systemd-resolved   # Ubuntu
# ดู Connection ทั้งหมด
ss -tunapl   # -t=TCP, -u=UDP, -n=numeric, -a=all, -p=process, -l=listening

# ดู Port ที่เปิดอยู่
ss -tlnp   # Listening TCP Ports
ss -ulnp   # Listening UDP Ports

# ดู Connection ที่ ESTABLISHED
ss -tnp | grep ESTABLISHED | wc -l   # จำนวน Active Connection

# ดู Connection จาก IP ที่ทำ DDoS
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

# ตรวจสอบ Firewall
ufw status verbose           # Ubuntu
firewall-cmd --list-all     # RHEL/Rocky

# Packet Loss ทดสอบ
mtr --report google.com    # MTR แสดง route + packet loss ทุก hop
# ดัก Traffic เพื่อ Debug (tcpdump)
# ดู HTTP Request ที่เข้า Port 80
tcpdump -i eth0 port 80 -n

# ดู DNS Query
tcpdump -i eth0 port 53 -n

# บันทึก Traffic เพื่อวิเคราะห์ใน Wireshark
tcpdump -i eth0 -w /tmp/capture.pcap -c 1000

# ดู Network Throughput
iftop -i eth0   # (package: iftop)
nethogs eth0    # แสดงตาม Process (package: nethogs)
nload eth0      # แสดง Bandwidth In/Out

อ่านและวิเคราะห์ Log อย่างมีประสิทธิภาพ

# Log ที่สำคัญบน Linux Server
# /var/log/syslog หรือ /var/log/messages — System log ทั่วไป
# /var/log/auth.log หรือ /var/log/secure — Authentication, SSH
# /var/log/kern.log — Kernel messages
# /var/log/dmesg — Boot/Hardware messages
# /var/log/nginx/error.log — Nginx errors
# /var/log/mysql/error.log — MySQL errors

# ดู Log แบบ real-time
tail -f /var/log/syslog
journalctl -f   # systemd journal

# กรอง Log ตาม Keyword
grep -i "error\|fail\|critical" /var/log/syslog | tail -20
journalctl -p err --since "2 hours ago"   # Priority: emerg, alert, crit, err, warning, notice, info, debug

# ดู Log ในช่วงเวลาเฉพาะ
journalctl --since "2026-04-16 10:00" --until "2026-04-16 11:00"
journalctl --since "1 hour ago"
# วิเคราะห์ Auth Log — หา SSH Brute Force
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -10
# IP ไหนที่ Login ผิดบ่อย

# หา Successful Login
grep "Accepted password\|Accepted publickey" /var/log/auth.log | tail -20

# หา sudo usage
grep "sudo" /var/log/auth.log | tail -20

# วิเคราะห์ Nginx Access Log — หา Status Code 5xx
awk '$9 >= 500' /var/log/nginx/access.log | tail -20

# หา URL ที่ถูก Request มากสุด
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# Bandwidth usage จาก Access Log
awk '{sum += $10} END {print sum/1024/1024 " MB"}' /var/log/nginx/access.log

Diagnose Application — PHP และ Web App

# PHP-FPM — Troubleshoot
systemctl status php8.2-fpm
journalctl -u php8.2-fpm -n 50

# ดู PHP Error Log
tail -50 /var/log/php8.2-fpm.log
# หรือตาม Config ใน php.ini
grep "error_log" /etc/php/8.2/fpm/php.ini

# ตรวจสอบ PHP-FPM Pool Config
grep -E "pm.max_children|pm.start_servers|pm.min_spare_servers|pm.max_spare_servers" \
    /etc/php/8.2/fpm/pool.d/www.conf

# ดูว่า PHP-FPM Worker เต็มหรือไม่
# (ถ้า max_children เต็ม = Request จะ Queue)
php-fpm8.2 -t   # ตรวจสอบ Config
# WordPress — Troubleshoot ทั่วไป

# เปิด WP Debug Mode (แก้ wp-config.php)
# define('WP_DEBUG', true);
# define('WP_DEBUG_LOG', true);
# define('WP_DEBUG_DISPLAY', false);

# ดู WordPress Error Log
tail -50 /var/www/html/wp-content/debug.log

# ตรวจสอบ Permission (ปัญหาที่พบบ่อย)
ls -la /var/www/html/
find /var/www/html -type f -name "*.php" ! -perm 644 | head -10
find /var/www/html -type d ! -perm 755 | head -10

# แก้ Permission ให้ถูกต้อง
chown -R www-data:www-data /var/www/html/
find /var/www/html -type f -exec chmod 644 {} \;
find /var/www/html -type d -exec chmod 755 {} \;

# ทดสอบ Database Connection จาก Command Line
mysql -u wpuser -p -h localhost wordpress -e "SELECT 1;"

Diagnose Boot Problems

# ดู Boot Log
dmesg | head -50       # Kernel Boot Messages
dmesg | grep -i "error\|fail\|warn" | head -20

# ดู Boot Time ของแต่ละ Service
systemd-analyze blame | head -20   # Service ที่ใช้เวลา Boot นานสุด
systemd-analyze time   # รวม Boot Time ทั้งหมด
systemd-analyze critical-chain   # Critical Path ของ Boot

# ดู Service ที่ Fail ตอน Boot
journalctl -b -p err   # Log ใน Boot ปัจจุบันที่ Level Error ขึ้นไป
journalctl -b -1       # Log จาก Boot ครั้งก่อน (ก่อน Reboot)

# ตรวจสอบ fstab (ถ้า Mount ผิดพลาดจะ Boot ไม่ได้)
cat /etc/fstab
mount -a   # ทดสอบ Mount ทุก Entry โดยไม่ต้อง Reboot
# ถ้า Error = fstab มีปัญหา แก้ก่อน Reboot

Script สรุปสถานะ Server แบบครบวงจร

#!/bin/bash
# /usr/local/bin/server-diag.sh
# Server Diagnostic Script — รันเพื่อดูภาพรวมปัญหาทั้งหมด

RED='\033[0;31m'
YELLOW='\033[1;33m'
GREEN='\033[0;32m'
NC='\033[0m'

echo "=========================================="
echo "  SERVER DIAGNOSTIC — $(hostname)"
echo "  $(date)"
echo "=========================================="

# --- CPU ---
echo -e "\n${GREEN}[CPU]${NC}"
LOAD=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1 | tr -d ' ')
CORES=$(nproc)
LOAD_INT=${LOAD%.*}
if [ "$LOAD_INT" -ge "$CORES" ]; then
    echo -e "  ${RED}WARNING: Load Average ${LOAD} >= ${CORES} cores${NC}"
    echo "  Top CPU processes:"
    ps aux --sort=-%cpu | awk 'NR>1 && NR<=6 {printf "    %-8s %-6s %s\n", $11, $3"%", $1}'
else
    echo -e "  ${GREEN}OK: Load Average ${LOAD} / ${CORES} cores${NC}"
fi

# --- Memory ---
echo -e "\n${GREEN}[Memory]${NC}"
AVAIL=$(free -m | awk '/^Mem:/{print $7}')
TOTAL=$(free -m | awk '/^Mem:/{print $2}')
AVAIL_PCT=$((AVAIL * 100 / TOTAL))
SWAP_USED=$(free -m | awk '/^Swap:/{print $3}')
if [ "$AVAIL_PCT" -lt 10 ]; then
    echo -e "  ${RED}WARNING: Only ${AVAIL}MB available (${AVAIL_PCT}%)${NC}"
    ps aux --sort=-%mem | awk 'NR>1 && NR<=4 {printf "    %-8s %-6s %s\n", $11, $4"%", $1}'
else
    echo -e "  ${GREEN}OK: ${AVAIL}MB available (${AVAIL_PCT}%)${NC}"
fi
[ "$SWAP_USED" -gt 512 ] && echo -e "  ${YELLOW}WARNING: Swap used: ${SWAP_USED}MB${NC}"

# --- Disk ---
echo -e "\n${GREEN}[Disk]${NC}"
df -h | awk 'NR>1 && /^\// {
    usage=$5+0
    if (usage >= 90) printf "  \033[0;31mCRITICAL: %s at %s\033[0m\n", $6, $5
    else if (usage >= 80) printf "  \033[1;33mWARNING: %s at %s\033[0m\n", $6, $5
    else printf "  \033[0;32mOK: %s at %s\033[0m\n", $6, $5
}'

# --- Services ---
echo -e "\n${GREEN}[Services]${NC}"
FAILED=$(systemctl --failed --no-legend 2>/dev/null | wc -l)
if [ "$FAILED" -gt 0 ]; then
    echo -e "  ${RED}FAILED Services: ${FAILED}${NC}"
    systemctl --failed --no-legend | awk '{printf "    - %s\n", $1}'
else
    echo -e "  ${GREEN}OK: No failed services${NC}"
fi

# Check specific services
for SVC in nginx apache2 mysql mariadb php8.2-fpm redis-server; do
    systemctl is-active "$SVC" >/dev/null 2>&1 && \
        echo -e "  ${GREEN}[+] ${SVC}: running${NC}" || \
        systemctl list-unit-files "$SVC.service" >/dev/null 2>&1 && \
        echo -e "  ${RED}[-] ${SVC}: stopped${NC}"
done

# --- Network ---
echo -e "\n${GREEN}[Network]${NC}"
if ping -c 1 -W 2 8.8.8.8 >/dev/null 2>&1; then
    echo -e "  ${GREEN}OK: Internet reachable${NC}"
else
    echo -e "  ${RED}CRITICAL: Cannot reach 8.8.8.8${NC}"
fi

CONN_COUNT=$(ss -tn | grep ESTABLISHED | wc -l)
echo "  Active connections: ${CONN_COUNT}"

# --- Recent Errors ---
echo -e "\n${GREEN}[Recent Errors (last 1h)]${NC}"
ERROR_COUNT=$(journalctl -p err --since "1 hour ago" --no-pager -q 2>/dev/null | wc -l)
if [ "$ERROR_COUNT" -gt 10 ]; then
    echo -e "  ${RED}WARNING: ${ERROR_COUNT} errors in last hour${NC}"
    journalctl -p err --since "1 hour ago" --no-pager -q 2>/dev/null | tail -5 | sed 's/^/    /'
else
    echo -e "  ${GREEN}OK: ${ERROR_COUNT} errors in last hour${NC}"
fi

# --- OOM ---
echo -e "\n${GREEN}[OOM Events]${NC}"
OOM=$(dmesg --since "1 day ago" 2>/dev/null | grep -i "oom\|killed process" | wc -l)
if [ "$OOM" -gt 0 ]; then
    echo -e "  ${RED}WARNING: ${OOM} OOM events in last 24h${NC}"
    dmesg --since "1 day ago" 2>/dev/null | grep -i "killed process" | tail -3 | sed 's/^/    /'
else
    echo -e "  ${GREEN}OK: No OOM events${NC}"
fi

echo -e "\n=========================================="
echo "  Diagnostic complete: $(date)"
echo "=========================================="

Quick Reference — คำสั่ง Troubleshoot ที่ใช้บ่อยที่สุด

# ===== CHEAT SHEET: Linux Server Troubleshooting =====

# SYMPTOM: Server ช้า / Load สูง
uptime                           # ดู Load Average
ps aux --sort=-%cpu | head -11   # Process กิน CPU สูง
iotop -o                         # Process กิน I/O สูง
iostat -x 1 3                    # I/O Wait ของ Disk

# SYMPTOM: Memory เต็ม
free -h                          # ภาพรวม Memory
ps aux --sort=-%mem | head -11   # Process กิน Memory สูง
dmesg | grep -i oom              # OOM Kill events

# SYMPTOM: Disk Full
df -h                            # Disk Usage แต่ละ Partition
df -i                            # Inode Usage
du -sh /var/* | sort -rh | head  # Directory ใหญ่ที่สุด
lsof +L1 | grep deleted          # Deleted Files ที่ยังถือไว้

# SYMPTOM: Service Down
systemctl --failed               # Service ที่ Failed
journalctl -u SERVICE -n 50      # Log ของ Service
nginx -t                         # Test Nginx Config
ss -tlnp                         # Port ที่เปิดอยู่

# SYMPTOM: ต่อ Internet ไม่ได้
ip route show                    # ตรวจ Default Route
ping 8.8.8.8                     # ทดสอบ IP
dig google.com                   # ทดสอบ DNS
ss -tnp | grep ESTABLISHED       # Active Connections

# SYMPTOM: SSH เข้าไม่ได้
# จาก Console/KVM:
systemctl status sshd
ss -tlnp | grep :22
ufw status / firewall-cmd --list-all
cat /var/log/auth.log | grep sshd | tail -20

# LOG LOCATIONS
# /var/log/syslog           — System (Ubuntu/Debian)
# /var/log/messages         — System (RHEL/Rocky)
# /var/log/auth.log         — Auth/SSH (Ubuntu/Debian)
# /var/log/secure           — Auth/SSH (RHEL/Rocky)
# /var/log/nginx/error.log  — Nginx
# /var/log/mysql/error.log  — MySQL
# journalctl -xe            — systemd journal (ทุก distro)

สรุป

การ Troubleshoot Server อย่างมีประสิทธิภาพเริ่มจาก Framework ที่ชัดเจน ได้แก่ ดู Symptom, Timeline, และ Recent Changes ก่อนเสมอ แล้วจึง Diagnose ตามลำดับ Resource (CPU/Memory/Disk) → Service → Network → Log เครื่องมือหลักที่ต้องรู้จัก ได้แก่ top/htop, free, df/du/lsof, systemctl/journalctl, ss/ip, และ dmesg Script server-diag.sh ช่วยสรุปสถานะทุกด้านในคำสั่งเดียว ทำให้ระบุปัญหาได้เร็วขึ้นอย่างมาก

แนะนำบริการ DE

การ Troubleshoot Server ต้องการ Root Access เพื่อรันคำสั่งวิเคราะห์ระบบอย่าง dmesg, iotop, strace และดู Log โดยตรง Cloud VPS ของ DE ให้ Root Access เต็มรูปแบบ พร้อม Console Access ผ่าน KVM เพื่อ Rescue เมื่อ SSH เข้าไม่ได้ เหมาะสำหรับ Sysadmin ที่ต้องการควบคุม Server อย่างสมบูรณ์

สำหรับผู้ที่ต้องการโฮสต์เว็บโดยไม่ต้องดูแล Server เอง Cloud Hosting ของ DE มีทีมดูแลระบบตลอด 24 ชั่วโมง และ Monitor Server อัตโนมัติ ทำให้ไม่ต้องกังวลเรื่องการ Troubleshoot เหล่านี้