vCPU และ RAM: เลือกสเปกเซิร์ฟเวอร์ให้พอดีกับงานจริง

เลือกจำนวน vCPU และขนาด RAM ของเซิร์ฟเวอร์จากตัวเลขจริง วัดเครื่องเดิม คำนวณตามงานเว็บ ฐานข้อมูล ERP และ Remote Desktop แล้วเผื่อช่วงพีกอย่างมีเหตุผล

โดย ทีมงาน THAI DATA CLOUD อ่าน 15 นาที

แชร์FacebookXLINELinkedIn
vCPU — vCPU และ RAM: เลือกสเปกเซิร์ฟเวอร์ให้พอดีกับงานจริง
vCPU และ RAM: เลือกสเปกเซิร์ฟเวอร์ให้พอดีกับงานจริง

คำตอบสั้น ๆ: เลือกจำนวน 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 หรือโปรแกรมบัญชี เพราะบางรายกำหนดขั้นต่ำไว้ชัดเจน
ตารางเปรียบเทียบงานเว็บ ฐานข้อมูล ERP และ Remote Desktop ว่าใช้ vCPU หรือ RAM เป็นหลัก และตัวเลขที่ต้องวัดก่อนเลือกสเปก
รู้ก่อนว่างานไหนกิน CPU งานไหนกิน RAM แล้วค่อยรวมเป็นสเปกเครื่อง

ขั้นตอนที่ 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

ผลคำสั่ง nproc, uptime และ free -h บนเครื่อง 4 vCPU ที่ Load average สูงกว่าจำนวน vCPU และเริ่มใช้ Swap
Load สูงกว่าจำนวน vCPU และ Swap ถูกใช้ คือสัญญาณว่าเครื่องเริ่มตึงทั้ง CPU และ RAM

บน 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% ตลอดเวลาจะตอบสนองช้าทุกครั้งที่มีงานแทรกเข้ามา เช่น สำรองข้อมูลหรืออัปเดตระบบ

ขั้นตอนที่ 5: เผื่อพื้นที่แล้วเลือกสเปกเริ่มต้น

รวม RAM จากขั้นตอนที่ 3 แล้วบวกส่วนของระบบปฏิบัติการและแคชไฟล์อีกราว 20–30% ส่วน vCPU ให้ปัดขึ้นจากตัวเลขในขั้นตอนที่ 4 (เครื่องตัวอย่างนี้ใช้ 4 vCPU ตามผลวัดช่วงพีก) ตัวอย่างการคำนวณเครื่องเว็บร้านค้าที่มี MariaDB อยู่ในเครื่องเดียวกัน

  • ระบบปฏิบัติการและบริการพื้นฐาน: 1 GB
  • MariaDB buffer pool 2 GB และส่วนอื่นของฐานข้อมูลอีกราว 0.5 GB
  • PHP-FPM 40 worker × 60 MB: 2.4 GB
  • Redis สำหรับ cache: 0.5 GB
  • รวม 6.4 GB เผื่อแคชไฟล์และช่วงพีก จึงเลือก 8 GB

ถ้าตัวเลขก้ำกึ่งระหว่างสองขนาด ให้เลือกขนาดเล็กก่อนเมื่องานยังเติบโตไม่ชัด เพราะการปรับขึ้นทำได้เมื่อมีข้อมูลยืนยัน แต่ถ้าเป็นระบบที่หยุดไม่ได้ในช่วงปิดงบหรือแคมเปญ ให้เลือกขนาดที่ใหญ่กว่าไว้ก่อนแล้วค่อยลดหลังผ่านช่วงนั้น

ขั้นตอนเลือกสเปก vCPU และ RAM ตั้งแต่แยกงาน วัดเครื่องเดิม คำนวณ RAM และ CPU เผื่อช่วงพีก จนถึงทบทวนหลังใช้งานจริง
สเปกแรกเป็นแค่จุดเริ่ม ตัวเลขหลังใช้งานจริงสองสัปดาห์คือสิ่งที่ใช้ตัดสินขั้นต่อไป

ขั้นตอนที่ 6: ทดสอบ แล้วปรับ vCPU และ RAM จากข้อมูลจริง

หลังเปิดใช้งาน 1–2 สัปดาห์ ให้กลับมาดูกราฟช่วงพีกอีกครั้ง ถ้า CPU ช่วงทำงานค้างสูงเกิน 70% หลายวัน หรือ RAM ส่วน available เหลือน้อยจนเริ่มใช้ Swap ให้แก้ที่แอปก่อน แล้วจึงอัปเกรดตาม คู่มือการ Upgrade/Downgrade สเปค Cloud Server ถ้าตรงกันข้าม คือ CPU ไม่เคยเกิน 20% และ RAM เหลือครึ่งหนึ่งตลอด ให้วางแผนลดสเปกตามคู่มือ Right-sizing

การเปลี่ยนสเปกบนคลาวด์มักต้องหยุดและเปิดเครื่องใหม่ จึงควรสำรองข้อมูลก่อน แจ้งผู้ใช้ล่วงหน้า และทำนอกเวลางาน หลังปรับแล้วตรวจด้วย nproc และ free -h (หรือ Task Manager บน Windows) ว่าระบบเห็นทรัพยากรใหม่ครบ จากนั้นปรับค่าของแอปให้ใช้ทรัพยากรเพิ่ม เช่น pm.max_children หรือ buffer pool เพราะแอปส่วนใหญ่ไม่ขยายตามเอง

อาการที่บอกว่าเครื่องเล็กหรือใหญ่เกินงาน

ตารางตรวจด้านล่างช่วยแยกว่าปัญหามาจากสเปกไม่พอจริง หรือมาจากการตั้งค่าแอปที่ไม่ใช้ทรัพยากรที่มีอยู่

เช็กลิสต์อ่านค่า vCPU และ RAM ที่บอกว่าเครื่องพอดีกับงาน เล็กเกินจนใช้ Swap หรือใหญ่เกินจนจ่ายค่าทรัพยากรที่ไม่ได้ใช้
สีเขียวคือพอดี สีเหลืองต้องหาสาเหตุก่อนเปลี่ยนสเปก สีแดงต้องแก้ทันที

อาการเครื่องเล็กเกินที่พบบ่อยที่สุดคือ Linux ปิดโปรเซสฐานข้อมูลเองเพราะหน่วยความจำหมด ซึ่งจะเห็นข้อความ Out of memory: Killed process ใน dmesg ส่วนอาการเครื่องใหญ่เกินมักไม่มีใครสังเกต เพราะระบบเร็วดี แต่จ่ายค่าเครื่องที่ใช้ไม่ถึงครึ่งทุกเดือน

ปัญหาที่พบบ่อยเกี่ยวกับ vCPU และ RAM

1 vCPU เท่ากับ 1 คอร์ของเครื่องจริงหรือไม่?

โดยทั่วไปไม่เท่า บนแพลตฟอร์มส่วนใหญ่ 1 vCPU คือหนึ่งเธรดของ CPU จริง และ CPU ที่รองรับ Hyper-Threading มีสองเธรดต่อคอร์ เครื่องจริง 4 คอร์ 8 เธรดในออฟฟิศจึงไม่จำเป็นต้องย้ายมาเป็น 8 vCPU เสมอไป ให้ตัดสินจากการใช้ CPU ที่วัดได้ในขั้นตอนที่ 2

เพิ่ม vCPU แล้วระบบไม่เร็วขึ้น เกิดจากอะไร?

สาเหตุที่พบบ่อยคือคอขวดอยู่ที่อื่น เช่น ดิสก์ (ค่า wa สูง) Query ที่ไม่มี Index หรือโปรแกรมที่ทำงานเธรดเดียว อีกกรณีคือแอปจำกัดจำนวน worker ไว้เท่าเดิม ต้องปรับค่าในแอปหลังเพิ่ม vCPU ด้วย

free -h แสดงว่า RAM เหลือน้อยมาก แต่ระบบยังเร็วดี ต้องเพิ่ม RAM ไหม?

ยังไม่ต้อง Linux ใช้ RAM ที่ว่างเป็นแคชไฟล์ (คอลัมน์ buff/cache) และคืนให้แอปเมื่อต้องการ ตัวเลขที่ต้องดูคือ available ถ้า available ยังเหลือมาก และ si/so ใน vmstat เป็นศูนย์ แปลว่า RAM ยังพอ

ควรเพิ่ม Swap แทนการเพิ่ม RAM ได้หรือไม่?

Swap เป็นทางกันระบบล่มชั่วคราวเมื่อหน่วยความจำพุ่งเป็นครั้งคราว ไม่ใช่สิ่งทดแทน RAM ถ้าเครื่องใช้ Swap ตลอดเวลา ระบบจะช้าลงมาก ให้ใช้ Swap ขนาดเล็กเป็นตาข่ายกันล่ม แล้ววางแผนเพิ่ม RAM ตามขั้นตอนที่ 6

ถ้าต้องการให้ทีมช่วยอ่านตัวเลขจากเครื่องเดิมและแนะนำจำนวน vCPU กับ RAM ที่เหมาะกับระบบของคุณ ติดต่อทีมงาน THAI DATA CLOUD ได้ หรือดูสเปกที่เลือกได้ในบริการ Cloud Server

อ่านเพิ่มเติมเกี่ยวกับ vCPU

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน