คำสั่ง nice ของ Linux: กำหนดลำดับความสำคัญ เปลี่ยนด้วย renice และวัดส่วนแบ่ง CPU เมื่อแย่งกัน

สภาพแวดล้อมทดสอบตระกูล RHELAlmaLinux 9.8บัญชี root · ผู้ใช้ทั่วไปตรวจสอบ 2026-10-17

คำสั่ง nice ของ Linux คือคำสั่งที่กำหนดค่า nice (-20~19) ซึ่งเป็นตัวบอกว่าโปรแกรมจะยอมให้ CPU กับงานอื่นมากแค่ไหนเมื่อทำงาน ได้ผูกงานสองงานไว้กับ CPU คอร์เดียวบนเซิร์ฟเวอร์ AlmaLinux 9 แล้ววัดโดยเปลี่ยนค่า nice ไปเรื่อยๆ ผลคือส่วนแบ่ง CPU ถูกแบ่งเฉพาะเมื่อแย่ง CPU กัน และงาน nice 19 ใช้ไปเพียง 1.4%

โปรเซสที่ทำงานอยู่แล้วเปลี่ยนค่าด้วย renice ส่วนการยอมให้ในฝั่งดิสก์เป็นหน้าที่ของ ionice ทั้งสามคำสั่งแสดงผลลัพธ์ตามที่รันจริงด้วยบัญชี root และบัญชีผู้ใช้ทั่วไป

1️⃣ คำสั่ง nice ของ Linux: ช่วงของค่าและส่วนแบ่งเมื่อแย่ง CPU กัน

ค่า nice คือตัวเลขที่กำหนดว่าจะยอมให้มากแค่ไหนเมื่อแบ่งเวลา CPU และกำหนดได้ตั้งแต่ -20 ถึง 19 โปรแกรมทั่วไปทำงานด้วยค่า 0 โดย -20 ได้ทำก่อนสุด และ 19 ยอมให้มากที่สุด

มักเข้าใจกันว่าตัวเลขยิ่งมากยิ่งได้ทำก่อน แต่ค่า nice กลับตรงกันข้าม ตัวจัดลำดับงานของ Linux กำหนดน้ำหนักให้ค่า nice แต่ละค่า แล้วแบ่งเวลา CPU ตามสัดส่วนนั้น โดย nice 0 คือ 1024, 10 คือ 110 และ 19 คือ 15

การยอมให้เกิดขึ้นเฉพาะเมื่อแย่ง CPU กัน ถ้ามี CPU ว่างอยู่ งาน nice 19 ก็ทำงานได้ทันทีโดยไม่ต้องรอ เหมือนที่นั่งสำรองบนรถเมล์ ถ้าว่างใครก็นั่งได้ และจะลุกให้เฉพาะตอนที่รถแน่น

🧭 ค่า nice เมื่อ CPU เหลือและเมื่อแย่งกัน
แผนภาพอธิบาย
🖥️ CPU
⚖️ งาน B
🖥️ มี CPU ว่าง งานแต่ละงานจึงได้คอร์ละหนึ่งคอร์🖥️ งานสองงานใช้ CPU คอร์เดียวกัน
งาน Anice 0 · น้ำหนัก 1024
100%50.0%90.3%98.6%
งาน Bnice 0 · น้ำหนัก 1024nice 10 · น้ำหนัก 110nice 19 · น้ำหนัก 15
100%50.0%9.7%1.4%
เมื่อ CPU เหลือก็ไม่มีใครให้ต้องยอม งาน B จึงใช้ CPU เต็มที่ไม่ว่าค่า nice จะเป็นเท่าใด
เมื่อแย่งคอร์เดียวกัน งาน nice 0 สองงานที่น้ำหนักเท่ากันจะแบ่งเวลา CPU กันคนละครึ่ง
น้ำหนักของ nice 10 คือ 110 ราวหนึ่งในเก้าของ nice 0 (1024) เวลา CPU จึงถูกแบ่งประมาณ 90.3 : 9.7
น้ำหนักของ nice 19 คือ 15 และเมื่อแย่งกัน งาน B ใช้เวลา CPU เพียงประมาณ 1.4%

ตารางน้ำหนักนี้คืออาร์เรย์ [sched_prio_to_weight] ในซอร์สโค้ดเคอร์เนล Linux [kernel/sched/core.c] และกำหนดไว้ให้เวลา CPU ลดลงราว 10% ทุกครั้งที่ค่า nice เพิ่มขึ้น 1

2️⃣ วิธีใช้ nice เบื้องต้น: +10 เมื่อไม่ใส่ตัวเลข และค่าที่อยู่นอกช่วง

ถ้าใส่คำสั่งต่อท้าย nice คำสั่งนั้นจะทำงานด้วยค่า nice ที่เปลี่ยนแล้ว และถ้าพิมพ์ nice อย่างเดียวจะแสดงค่า nice ของเชลล์ปัจจุบัน

nice
0

ตัวอย่างด้านล่างคือคำสั่งที่ให้ bash ที่ถูกรันแสดงค่า nice ของตัวเองด้วย [ps -o ni=] ถ้ารันโดยไม่มี -n จะบวก 10 เข้ากับค่าปัจจุบัน และ -n 5 จะบวก 5

nice bash -c 'ps -o ni= -p $$'
 10
nice -n 5 bash -c 'ps -o ni= -p $$'
  5

ค่าที่เกินช่วงจะถูกปรับเป็นค่าขอบโดยไม่มีข้อผิดพลาด -n 50 จึงทำงานด้วย 19

nice -n 50 bash -c 'ps -o ni= -p $$'
 19

การเลื่อนขึ้นก่อนด้วยค่าติดลบทำได้เฉพาะบัญชี root บัญชีผู้ใช้ทั่วไปจะเห็นคำเตือน [cannot set niceness] และคำสั่งยังทำงานด้วย nice 0 ตามเดิม

# บัญชีผู้ใช้ทั่วไป
nice -n -5 bash -c 'ps -o ni= -p $$'
nice: cannot set niceness: Permission denied
  0
# บัญชี root
nice -n -5 bash -c 'ps -o ni= -p $$'
 -5

โปรเซสลูกที่คำสั่งซึ่งรันด้วย nice เรียกต่อ ก็ทำงานด้วยค่า nice เดียวกัน

nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!'
  7

ดังนั้นถ้ารันสคริปต์หนึ่งตัวด้วย nice คำสั่งทั้งหมดในสคริปต์นั้นก็ยอมให้ตามไปด้วย

3️⃣ renice: เปลี่ยนค่า nice ของโปรเซสที่กำลังทำงาน

nice กำหนดค่าได้เฉพาะตอนเริ่มรัน โปรเซสที่ทำงานอยู่แล้วจึงเปลี่ยนด้วย renice ให้ตรวจ PID และค่าปัจจุบันจากคอลัมน์ NI ของ top หรือด้วย ps ก่อน

ps -o pid,ni,cmd -p 201643
    PID  NI CMD
 201643   5 sleep 600
renice -n 10 -p 201643
201643 (process ID) old priority 5, new priority 10

ดังที่เห็นในผลลัพธ์ renice -n ไม่ได้บวกเพิ่มจากค่าปัจจุบัน แต่ตั้งเป็นค่าที่ระบุ ผลจึงเป็น 10 ไม่ใช่ 15 ที่ได้จาก 5 บวก 10 ไม่ใช่การกดปุ่ม ▲ บนรีโมตแอร์ให้ขึ้นทีละขั้น แต่เหมือนการตั้งอุณหภูมิที่ต้องการไว้ที่ 24 องศา

เอกสารทางการของ util-linux ก็อธิบาย -n เป็นค่าสัมบูรณ์ ส่วนการบวกเพิ่มเป็นหน้าที่ของตัวเลือก [--relative] ในรุ่นใหม่ util-linux 2.37.4 ที่ทดสอบยังไม่มีตัวเลือกนี้

บัญชีผู้ใช้ทั่วไปเพิ่มค่าของโปรเซสตัวเองได้อย่างเดียว และเมื่อเพิ่มแล้วจะลดกลับไม่ได้

# บัญชีผู้ใช้ทั่วไป
renice -n 10 -p 201649
201649 (process ID) old priority 0, new priority 10
renice -n 5 -p 201649
renice: failed to set priority for 201649 (process ID): Permission denied

บัญชี root ลดค่าได้ด้วย และในการทดสอบเดียวกันได้เปลี่ยน 10 เป็น 3 ได้ทันที

🔲 ซิมูเลเตอร์ nice · renice

ในซิมูเลเตอร์ด้านล่างที่เข้าด้วยบัญชีผู้ใช้ทั่วไป คุณพิมพ์ nice และ renice เองแล้วดูค่า nice ที่เปลี่ยนไปได้

ซิมูเลเตอร์คำสั่ง nicenice 8.32 · renice 2.37.4
[root@server work]#
ทำงานเฉพาะในเบราว์เซอร์และไม่แตะต้องโปรเซสจริง เป็นเซิร์ฟเวอร์เสมือนที่เข้าด้วยบัญชีผู้ใช้ทั่วไป คุณรันคำสั่งโดยเปลี่ยนค่า nice หรือเปลี่ยนค่าของ backup.sh (PID 2481) ด้วย renice แล้วตรวจด้วย ps -o pid,ni,cmd ได้ ปุ่ม ↑↓ บนคีย์บอร์ดเรียกคำสั่งที่พิมพ์ก่อนหน้ากลับมาได้

4️⃣ วัดส่วนแบ่งเมื่อแย่ง CPU กัน: nice 0 vs 0·10·19

การเพิ่มค่า nice ไม่ได้ทำให้งานนั้นช้าลงเสมอไป ส่วนแบ่งจะลดลงเฉพาะเมื่อแย่ง CPU ตัวเดียวกับงานอื่น

ได้ผูกงานสองงานไว้กับ CPU คอร์เดียว (taskset) แล้วรันสคริปต์ด้านล่างที่นับเลขทีละหนึ่งเป็นเวลา 5 วินาทีพร้อมกัน ยิ่งนับได้มากแปลว่ายิ่งใช้เวลา CPU มาก

#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $n

สคริปต์จะเพิ่ม n ทีละ 1 จนครบ 5 วินาที แล้วแสดงค่าสุดท้าย

📊5 วินาทีที่แย่ง CPU คอร์เดียวกันจำนวนที่นับได้ใน 5 วินาที
งานแรก nice 0งานหลัง
nice 0 vs nice 0
งานสองงานที่น้ำหนักเท่ากัน
02.5 แสน5 แสน7.5 แสน1 ล้าน
nice 0497,596 ครั้ง48.8%
nice 0522,040 ครั้ง51.2%
nice 0 vs nice 10
รันเฉพาะงานหลังด้วย nice 10
02.5 แสน5 แสน7.5 แสน1 ล้าน
nice 0979,971 ครั้ง90.1%
nice 10107,671 ครั้ง9.9%
nice 0 vs nice 19
รันเฉพาะงานหลังด้วย nice 19
02.5 แสน5 แสน7.5 แสน1 ล้าน
nice 0909,895 ครั้ง98.6%
nice 1913,010 ครั้ง1.4%
ตัวเลขเป็นผลจากเซิร์ฟเวอร์ AlmaLinux 9 วันที่ 17 ตุลาคม 2026 ที่ผูกงานสองงานไว้กับ CPU คอร์เดียวแล้วรันพร้อมกันงานละ 5 วินาที

nice 0 สองงานแบ่งกันคนละครึ่ง nice 10 ใช้ราว 10% และ nice 19 ใช้เพียง 1.4% ตรงกับสัดส่วนที่คำนวณจากน้ำหนักของเคอร์เนล (1024 : 110 คือ 90.3 : 9.7 และ 1024 : 15 คือ 98.6 : 1.4)

เมื่อรัน nice 19 เพียงงานเดียวบนคอร์เดียวกัน นับได้ราว 650,000–1,140,000 ครั้งใน 5 วินาที ถ้าไม่มีใครให้ต้องยอม nice 19 ก็ใช้ CPU เต็มที่ และระหว่างทดสอบโหลดของเซิร์ฟเวอร์ (load average) อยู่ที่ 3–5

5️⃣ ionice: การยอมให้ในฝั่งดิสก์และการตรวจตัวจัดลำดับงาน

nice กำหนดเฉพาะส่วนแบ่ง CPU งานที่อ่านเขียนดิสก์นานอย่างการแบ็กอัปจึงใช้ ionice ให้ยอมลำดับดิสก์ด้วย ถ้ารันด้วย -c3 (idle) งานจะได้ทำเฉพาะตอนที่ไม่มีโปรแกรมอื่นใช้ดิสก์

ionice -c3 bash -c 'ionice -p $$'
idle
ionice -p $$
none: prio 0

โปรเซสที่ไม่ได้กำหนดอะไรไว้จะแสดงเป็น [none] และตามเอกสารเคอร์เนลจะถูกจัดเป็นคลาส best-effort โดยคำนวณลำดับจากค่า nice ของ CPU

คลาสของ ionice มีผลเฉพาะเมื่อตัวจัดลำดับงานของดิสก์รองรับ และเอกสารเคอร์เนลระบุว่า bfq กับ mq-deadline เป็นตัวที่รองรับ ตัวที่อยู่ในวงเล็บเหลี่ยมคือตัวที่กำลังใช้อยู่

cat /sys/block/nvme0n1/queue/scheduler
[none] mq-deadline kyber bfq

ดิสก์ NVMe ของเซิร์ฟเวอร์ทดสอบเป็น [none] ตามเอกสารทางการ การกำหนด ionice จึงอาจไม่มีผล และไม่ได้วัดผลแยกไว้ ตรวจชื่อดิสก์ได้ด้วย lsblk

6️⃣ ใช้ nice ตรงไหน: แบ็กอัป·cron·wp-cli

ใส่ nice ให้งานที่ใช้เวลานานแต่ไม่เร่งด่วน การบีบอัดแบ็กอัปใช้ทั้ง CPU และดิสก์ จึงกำหนด nice กับ ionice ไปพร้อมกัน

nice -n 19 ionice -c3 tar czf backup.tgz /home/example

ถ้างานที่ทำงานอยู่แล้วทำให้เซิร์ฟเวอร์ช้า ให้ตรวจ PID ใน top แล้วเพิ่มค่าด้วย renice ส่วนงาน cron ที่รันทุกวันให้ใส่ nice ไว้หน้าคำสั่ง

0 3 * * * nice -n 10 /usr/local/bin/backup.sh

บนเซิร์ฟเวอร์ WordPress ถ้ารันงาน wp-cli ขนาดใหญ่อย่าง search-replace หรือการสร้างรูปภาพใหม่ด้วย nice -n 10 เมื่อ CPU ยุ่ง php-fpm ที่รับคำขอของผู้เยี่ยมชมจะได้ใช้ CPU ก่อน

nice -n 10 wp media regenerate --yes

ในทางกลับกัน อย่าเพิ่มค่า nice ให้ php-fpm หรือตัวเว็บเซิร์ฟเวอร์เอง ถ้าโปรเซสที่ตอบผู้เยี่ยมชมยอมให้ หน้าเว็บจะตอบช้าลงเมื่อ CPU ยุ่ง

🔢 FAQ & เนื้อหาแนะนำ

โปรเซสทั่วไปจะแสดง PR ใน top เป็น 20 บวกค่า nice โปรเซสที่รันด้วย nice 5 แสดงเป็น PR 25 และ NI 5 ส่วนคอลัมน์ PRI ของ ps คำนวณต่างออกไป โปรเซสเดียวกันจึงแสดงเป็น 14

nice จะบวกค่าที่ระบุเข้ากับค่า nice ปัจจุบัน [nice -n 5 nice -n 3 nice] จึงแสดง 8 ซึ่งต่างจาก renice -n ที่ตั้งเป็นค่าที่ระบุ

ถ้าเขียน [Nice=] ไว้ในส่วน [Service] ของไฟล์ยูนิตของบริการ ค่า nice ของโปรเซสที่บริการนั้นรันจะถูกกำหนดตามนั้น ตามเอกสารทางการ systemd.exec กำหนดได้ตั้งแต่ -20 ถึง 19

🧭 เนื้อหาแนะนำเรื่องโปรเซสและการตั้งเวลางาน 11 บทความ · 4 อ้างอิง
🗂️ โปรเซสและการตั้งเวลางาน
📄 คำสั่ง ps 📄 คำสั่ง top 📄 คำสั่ง nice ของ Linux 📄 คำสั่ง kill 📄 คำสั่ง killall 📄 แบ็กกราวด์&โฟร์กราวด์ 📄 คำสั่ง uptime
📄 การตั้งค่า crontab
📋 WP CLI: ติดตั้งและตั้งค่า 📄 WP-Cron(wp-cron.php) 📄 ค้นหาแพตเทิร์นที่ซิงค์: WP-CLI
📡 GNU Coreutils nice invocation 📡 renice(1) Linux manual page 📡 Block io priorities (เอกสารเคอร์เนล) 📡 sched_prio_to_weight (ซอร์สโค้ดเคอร์เนล)
ตรวจโปรเซสด้วยคำสั่ง ps
Linux · โปรเซส
คำสั่ง ps (คำสั่งโปรเซส)
คำสั่ง ps แสดงโปรเซสที่กำลังทำงานอยู่
อ่านบทความ →เนื้อหาปัจจุบัน
คำสั่ง TOP ของ Linux: อินเทอร์เฟซบรรทัดคำสั่ง (CLI-Command-Line Interface)
Linux · โปรเซส
คำสั่ง top ของ Linux (ตรวจการใช้ CPU และหน่วยความจำ)
คำสั่ง top ของ Linux แสดงสถานะของ OS ที่กำลังทำงาน และชื่อมาจาก table of processes
อ่านบทความ →เนื้อหาปัจจุบัน
คำสั่ง nice ของ Linux: แท่งผลวัดจริง 5 วินาทีเมื่อ nice 0 กับ nice 0·10·19 แย่งแกน CPU เดียวกัน
Linux · โปรเซส
คำสั่ง nice ของ Linux: กำหนดลำดับความสำคัญ เปลี่ยนด้วย renice และวัดส่วนแบ่ง CPU เมื่อแย่งกัน
คำสั่ง nice ของ Linux คือคำสั่งที่กำหนดค่า nice (-20 ถึง 19) ซึ่งเป็นตัวกำหนดว่าโปรแกรมจะยอมสละ CPU ให้มากน้อยแค่ไหนเมื่อรัน
อ่านบทความ →เนื้อหาปัจจุบัน
อินเทอร์เฟซบรรทัดคำสั่งของ Linux (Linux command line Interface-CLI)
Linux · โปรเซส
คำสั่ง kill ของ Linux [kill -9 PID]
คำสั่ง kill ของ Linux ใช้หยุดโปรเซสที่กำลังทำงาน
อ่านบทความ →เนื้อหาปัจจุบัน
ตรวจข้อมูลเวอร์ชันของคำสั่ง killall ใน Linux
Linux · โปรเซส
คำสั่ง killall ของ Linux: การติดตั้ง วิธีใช้ และตัวเลือก
คำสั่ง killall ของ Linux ใช้หยุดโปรเซสที่ระบุได้ในครั้งเดียว
อ่านบทความ →เนื้อหาปัจจุบัน
ภาพ Linux
Linux · โปรเซส
แบ็กกราวด์ (Back Ground)&โฟร์กราวด์ (Fore Ground) ของ Linux: การควบคุมโปรเซส
โปรเซสของ Linux ทำงานได้สองโหมด คือแบ็กกราวด์ (Back Ground) และโฟร์กราวด์ (Fore Ground)
อ่านบทความ →เนื้อหาปัจจุบัน
พื้นฐาน Linux (The Linux Foundation)
Linux · โหลดของเซิร์ฟเวอร์
คำสั่ง uptime ของ Linux (ตรวจเวลาที่เซิร์ฟเวอร์ทำงาน&โหลดเฉลี่ย 1, 5, 15 นาที)
คำสั่ง uptime ของ Linux ใช้ตรวจโหลดเฉลี่ยของระบบและระยะเวลาที่เซิร์ฟเวอร์ทำงาน
อ่านบทความ →เนื้อหาปัจจุบัน
WP CLI-ตรวจรายการอีเวนต์ Cron ที่ตั้งเวลาไว้ด้วยคำสั่ง wp cron event list_
WordPress · WP-CLI
WP CLI: ติดตั้งและตั้งค่า | เหตุผลที่ใช้ WP CLI ใน WordPress
WP-CLI หมายถึงการทำงานกับ WordPress โดยไม่ต้องใช้แดชบอร์ด WordPress ถ้าเป็นร้านค้า WooCommerce ก็ใช้ได้ดีกับงานแบบกลุ่ม เช่น ต้องลบหน้า 1,000 หรือ 10,000 หน้า
อ่านบทความ →เนื้อหาปัจจุบัน
วิธีการทำงานและโครงสร้างของ WP-Cron
WordPress · WP-Cron
WP-Cron (wp-cron.php): ปิดการทำงานและตั้งค่า Cron ของระบบ | ปรับแต่งประสิทธิภาพ WordPress
ใน WordPress งาน Cron คือฟีเจอร์ที่รันงานซึ่งตั้งเวลาไว้ตามเวลาหรือวันที่ที่กำหนดโดยอัตโนมัติ
อ่านบทความ →เนื้อหาปัจจุบัน
แพตเทิร์นที่ซิงค์ใน WordPress_รายการ
WordPress · WP-CLI
ค้นหาแพตเทิร์นที่ซิงค์ใน WordPress: ตรวจด้วย WP-CLI ว่าอยู่ในโพสต์ไหน
แพตเทิร์นที่ซิงค์ใน WordPress ใส่แค่หมายเลขอ้างอิงไว้ในเนื้อหา หน้าผู้ดูแลระบบจึงบอกไม่ได้ว่าแพตเทิร์นนั้นอยู่ในโพสต์ไหนบ้าง
อ่านบทความ →เนื้อหาปัจจุบัน
ไทล์อ้างอิง GNU Coreutils nice invocation (ลิงก์ภายนอก)
บทความภายนอก · คู่มือทางการของ GNU
GNU Coreutils: nice invocation
หัวข้อ nice ในคู่มือทางการของ GNU coreutils อธิบายตัวเลือก -n และค่าเริ่มต้น 10
อ่านบทความ →เนื้อหาปัจจุบัน
ไทล์อ้างอิง renice(1) Linux manual page (ลิงก์ภายนอก)
บทความภายนอก · หน้า man
renice(1) Linux manual page
หน้า man ของ renice จาก util-linux อธิบายค่า -n และเป้าหมาย -p · -g · -u
อ่านบทความ →เนื้อหาปัจจุบัน
ไทล์อ้างอิงเอกสารเคอร์เนล Block io priorities (ลิงก์ภายนอก)
บทความภายนอก · เอกสารเคอร์เนล Linux
Block io priorities
เอกสารทางการของเคอร์เนล Linux อธิบายคลาสของ ionice และตัวจัดลำดับงาน I/O ที่รองรับ
อ่านบทความ →เนื้อหาปัจจุบัน
ไทล์อ้างอิงซอร์สโค้ดเคอร์เนล sched_prio_to_weight (ลิงก์ภายนอก)
บทความภายนอก · ซอร์สโค้ดเคอร์เนล Linux
sched_prio_to_weight (kernel/sched/core.c)
อาร์เรย์ในซอร์สโค้ดตัวจัดลำดับงานของเคอร์เนลที่กำหนดน้ำหนักของค่า nice แต่ละค่า (nice 0 คือ 1024)
อ่านบทความ →เนื้อหาปัจจุบัน

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 7   +   9   =