คำตอบสั้น ๆ: เลือกจำนวน vCPU และขนาด RAM ของเซิร์ฟเวอร์จากตัวเลขจริง วัดเครื่องเดิม คำนวณตามงานเว็บ ฐานข้อมูล ERP และ Remote Desktop แล้วเผื่อช่วงพีกอย่างมีเหตุผล
คู่มือนี้อธิบาย vCPU ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
vCPU คือหน่วยประมวลผลที่ผู้ให้บริการคลาวด์จัดให้เครื่องเสมือน บนแพลตฟอร์มส่วนใหญ่ 1 vCPU เท่ากับหนึ่งเธรดของ CPU จริงบนเครื่องแม่ข่าย ไม่ใช่หนึ่งคอร์เต็ม ๆ ส่วน RAM คือหน่วยความจำที่เครื่องได้รับแบบเฉพาะตัว การเลือกจำนวน vCPU และขนาด RAM ให้พอดีจึงเป็นเรื่องของการวัดงานจริง ไม่ใช่การเดาจากสเปกเครื่องเดิมในห้องเซิร์ฟเวอร์
คู่มือนี้เหมาะกับผู้ดูแลระบบที่กำลังจะเปิด Cloud Server เครื่องใหม่ ย้ายระบบจากเครื่องในออฟฟิศ หรือสงสัยว่าเครื่องที่ใช้อยู่เล็กหรือใหญ่เกินไป เมื่อทำครบ คุณจะมีตัวเลขการใช้งานจริงของระบบ คำนวณ RAM และจำนวน vCPU ตามประเภทงาน (เว็บ ฐานข้อมูล ERP และ Remote Desktop) เผื่อพื้นที่ช่วงพีกอย่างมีเหตุผล และรู้ว่าเมื่อไรควรอัปเกรดหรือลดสเปก
สิ่งที่ต้องเตรียม
- รายชื่อระบบที่จะรันบนเครื่อง เช่น เว็บไซต์ ฐานข้อมูล โปรแกรมบัญชีหรือ ERP และจำนวนผู้ใช้ที่ใช้งานพร้อมกันในชั่วโมงที่ยุ่งที่สุด (ไม่ใช่จำนวนบัญชีผู้ใช้ทั้งหมด)
- สิทธิ์ root หรือ sudo บน Linux หรือสิทธิ์ Administrator บน Windows Server ของเครื่องเดิม เพื่อเก็บตัวเลขการใช้ CPU และ RAM
- ข้อมูลอย่างน้อย 1–2 สัปดาห์ที่ครอบคลุมช่วงงานหนัก เช่น สิ้นเดือน วันปิดงบ หรือวันที่มีแคมเปญขาย ถ้ามี Prometheus, Zabbix หรือกราฟของผู้ให้บริการอยู่แล้วให้ใช้ข้อมูลนั้น
- คำแนะนำสเปกจากผู้ผลิตซอฟต์แวร์ที่ใช้ เช่น ERP หรือโปรแกรมบัญชี เพราะบางรายกำหนดขั้นต่ำไว้ชัดเจน
ขั้นตอนที่ 1: แยกงานและหาคอขวดของแต่ละระบบ
ระบบแต่ละประเภทกินทรัพยากรไม่เหมือนกัน การรวมทุกอย่างไว้ในเครื่องเดียวแล้วเลือกสเปกจากความรู้สึก มักได้เครื่องที่ CPU ว่างแต่ RAM เต็ม หรือกลับกัน ให้เขียนตารางสั้น ๆ ว่าแต่ละระบบต้องการอะไรเป็นหลัก
- เว็บไซต์ PHP หรือ Node.js: ใช้ vCPU ตามจำนวนคำขอที่เข้ามาพร้อมกัน และใช้ RAM ตามจำนวน worker ที่เปิดไว้
- ฐานข้อมูล MySQL, MariaDB หรือ PostgreSQL: ต้องการ vCPU ปานกลางแต่อยากได้ RAM มากเพื่อเก็บข้อมูลที่ใช้บ่อยไว้ในหน่วยความจำ ถ้า RAM น้อย ฐานข้อมูลจะไปอ่านดิสก์แทนและช้าลงชัดเจน
- ERP เช่น Odoo หรือโปรแกรมบัญชีบนเว็บ: ต้องการทั้ง vCPU และ RAM ตามจำนวนผู้ใช้พร้อมกัน และมีงานหนักเป็นช่วง เช่น ออกรายงานสิ้นเดือน
- Remote Desktop ให้พนักงานหลายคน: RAM โตตามจำนวน session และโปรแกรมที่แต่ละคนเปิด ส่วน vCPU ต้องพอสำหรับช่วงที่ทุกคนเปิดโปรแกรมพร้อมกันตอนเช้า
ถ้าระบบหนึ่งเป็นงานสำคัญและโหลดไม่แน่นอน เช่น ฐานข้อมูลของร้านค้าออนไลน์ ให้พิจารณาแยกเป็นเครื่องของตัวเอง เพื่อให้ปรับสเปกได้ทีละส่วนและปัญหาของระบบหนึ่งไม่ลามไปอีกระบบ
ขั้นตอนที่ 2: วัดการใช้ vCPU และ RAM ของเครื่องเดิม
เริ่มจากรู้ว่าเครื่องเดิมมีอะไรและใช้ไปเท่าไร บน Linux ใช้คำสั่งต่อไปนี้ ทุกคำสั่งอ่านอย่างเดียว ไม่เปลี่ยนแปลงระบบ
nproc # จำนวน CPU ที่ระบบมองเห็น
lscpu | grep -E 'Model name|^CPU\(s\)|Thread|Core'
free -h # ดูคอลัมน์ available ไม่ใช่ free
uptime # Load average 1, 5, 15 นาที
vmstat 5 12 # ดูคอลัมน์ r, si, so, wa และ st ทุก 5 วินาที 1 นาที
ค่าที่ต้องจดคือ Load average เทียบกับจำนวน vCPU ค่า available ของ RAM และคอลัมน์ใน vmstat ได้แก่ r (โปรเซสที่รอคิว CPU), si/so (การสลับหน้าไป Swap), wa (เวลารอดิสก์) และ st (steal time เวลาที่ hypervisor ให้เครื่องอื่นใช้ CPU ก่อน) ความหมายของแต่ละคอลัมน์อธิบายละเอียดใน คู่มือตรวจสอบ CPU, RAM และ Load Average
บน Windows Server เปิด PowerShell แบบ Administrator แล้วเก็บตัวอย่างทุก 5 วินาทีเป็นเวลา 1 นาที ระหว่างช่วงที่ผู้ใช้ทำงานกันจริง
Get-Counter -Counter '\Processor(_Total)\% Processor Time','\Memory\Available MBytes','\System\Processor Queue Length' -SampleInterval 5 -MaxSamples 12
การวัดครั้งเดียวไม่พอ ให้เก็บต่อเนื่องหลายวันด้วย Performance Monitor บน Windows หรือบน Linux ใช้ sar จากแพ็กเกจ sysstat ถ้าเครื่องอยู่บน THAI DATA CLOUD อยู่แล้ว ดูกราฟย้อนหลังได้จาก Cloud Server Monitoring โดยเลือก Statistic เป็น Max เพื่อเห็นยอดพีก
ขั้นตอนที่ 3: คำนวณ RAM ตามประเภทงาน
RAM คำนวณได้ตรงกว่า CPU เพราะแต่ละโปรเซสใช้หน่วยความจำค่อนข้างคงที่ หลักคือรวมความต้องการของทุกส่วน แล้วเผื่อพื้นที่ให้ระบบปฏิบัติการและแคชไฟล์
เว็บไซต์ PHP-FPM
วัดขนาดเฉลี่ยของโปรเซส PHP-FPM ตอนเว็บทำงานปกติ แล้วคูณด้วย pm.max_children ที่ตั้งไว้ ตัวอย่างนี้ใช้ PHP 8.3 บน Ubuntu 24.04 ถ้าเป็นรุ่นอื่นให้เปลี่ยนชื่อโปรเซส
ps --no-headers -o rss -C php-fpm8.3 | awk '{s+=$1; n++} END {printf "%d processes, avg %.0f MB\n", n, s/n/1024}'
ถ้าวัดได้เฉลี่ย 60 MB และตั้ง pm.max_children = 40 PHP-FPM จะใช้ได้สูงสุดราว 2.4 GB เมื่อทุก worker ทำงานพร้อมกัน ตัวเลขนี้ต้องอยู่ใน RAM ได้โดยไม่ต้องใช้ Swap
ฐานข้อมูล
เอกสารของ MySQL ระบุว่าบนเครื่องที่เป็นฐานข้อมูลอย่างเดียว มักให้ InnoDB buffer pool ได้ถึงราว 80% ของ RAM ส่วนเอกสารของ PostgreSQL แนะนำค่าเริ่มต้นของ shared_buffers ที่ 25% ของ RAM เพราะ PostgreSQL พึ่งแคชของระบบปฏิบัติการด้วย (ดู Resource Consumption ในเอกสาร PostgreSQL) ถ้าฐานข้อมูลอยู่เครื่องเดียวกับเว็บ ให้ลดสัดส่วนลงตามพื้นที่ที่เหลือจริง และอย่าลืมปรับค่าใหม่ทุกครั้งที่เปลี่ยนขนาด RAM
ERP
ผู้ผลิตหลายรายมีสูตรของตัวเอง ตัวอย่างจากเอกสาร Odoo Deploying ใช้หลัก 1 worker ต่อผู้ใช้พร้อมกันราว 6 คน จำนวน worker สูงสุดประมาณ (จำนวน CPU × 2) + 1 และประเมิน RAM ของ worker งานหนักราว 1 GB งานเบาราว 150 MB ตัวอย่างในเอกสารคือเครื่อง 4 CPU 8 เธรด ผู้ใช้พร้อมกัน 60 คน ใช้ 8 worker บวก cron 1 ตัว และ RAM สำหรับ Odoo ราว 3 GB ยังไม่รวม PostgreSQL
Remote Desktop
อย่าใช้ตัวเลขต่อคนจากอินเทอร์เน็ต ให้ทดลองกับผู้ใช้จริง 3–5 คนให้เปิดโปรแกรมที่ใช้ประจำ แล้ววัด RAM ต่อผู้ใช้ด้วยแท็บ Users ใน Task Manager หรือคำสั่งนี้
Get-Process -IncludeUserName | Group-Object UserName |
Select-Object Name, @{n='RAM_MB';e={[math]::Round(($_.Group | Measure-Object WorkingSet64 -Sum).Sum/1MB)}} |
Sort-Object RAM_MB -Descending
ระหว่างทดลองให้ดูการใช้ vCPU ตอนทุกคนเปิดโปรแกรมพร้อมกันด้วย นำค่า RAM เฉลี่ยต่อคนคูณจำนวนผู้ใช้พร้อมกัน แล้วบวก RAM ของระบบปฏิบัติการ Microsoft ระบุขั้นต่ำของ Windows Server 2025 แบบ Desktop Experience ไว้ที่ 2 GB และแนะนำ 4 GB แต่ก็เขียนชัดว่าสเปกที่เหมาะต้องได้จากการทดสอบกับงานจริง (Hardware requirements for Windows Server)
ขั้นตอนที่ 4: คำนวณจำนวน vCPU จากงานที่เกิดพร้อมกัน
จำนวน vCPU ขึ้นกับว่ามีงานที่ต้องประมวลผลพร้อมกันกี่งาน ไม่ใช่จำนวนผู้ใช้ทั้งหมด วิธีอ่านตัวเลขที่เก็บมาในขั้นตอนที่ 2 มีดังนี้
- ถ้า Load average ช่วงพีกต่ำกว่าจำนวน vCPU และคอลัมน์
rใน vmstat แทบไม่เกินจำนวน vCPU แปลว่า CPU ยังพอ - ถ้า Load average สูงแต่ CPU ไม่เต็ม และ
waสูง ปัญหาอยู่ที่ดิสก์ เพิ่ม vCPU ไม่ช่วย ให้วัดความเร็วดิสก์ด้วย fio ก่อน - ถ้าโปรแกรมใช้ CPU 100% แค่คอร์เดียวขณะคอร์อื่นว่าง แปลว่างานนั้นทำงานแบบเธรดเดียว การเพิ่ม vCPU ไม่ทำให้งานนั้นเร็วขึ้น ต้องแก้ที่โปรแกรมหรือ Query
- ถ้า
stสูงต่อเนื่องหลายเปอร์เซ็นต์ เครื่องกำลังแย่ง CPU กับเครื่องอื่นบนแม่ข่าย ให้แจ้งผู้ให้บริการพร้อมผล vmstat
สำหรับเครื่องที่มีหลายระบบ ให้เริ่มจาก vCPU ที่ทำให้การใช้ CPU ช่วงพีกอยู่ราว 60–70% ของทั้งหมด ซึ่งตรงกับระดับที่การ์ด CPU Usage ในหน้า Overview ของเครื่องโซน Zenith บน THAI DATA CLOUD เริ่มขึ้นป้าย Busy (70% ขึ้นไป) เครื่องที่วิ่งอยู่ที่ 90% ตลอดเวลาจะตอบสนองช้าทุกครั้งที่มีงานแทรกเข้ามา เช่น สำรองข้อมูลหรืออัปเดตระบบ