
ฉันเพิ่งได้เรียนรู้เกี่ยวกับการตรวจสอบ nodejs แม้ว่าฉันจะไม่มีพลังที่จะเรียนรู้ที่จะเขียนการตรวจสอบแบบง่ายๆ แต่ฉันก็ยังอดไม่ได้ที่จะเรียนรู้วิธีรับตัวบ่งชี้เหล่านี้ (หลังจากปรึกษาข้อมูลมากมายแล้ว ฉันรู้สึกว่า ว่ามีการแนะนำเนื้อหานี้น้อยเกินไปบนอินเทอร์เน็ตในประเทศ ฉันกำลังแยกแยะประเด็นความรู้เกี่ยวกับโหนดเซิร์ฟเวอร์ด้วย ดังนั้นฉันจะสรุปไว้ในบทความนี้และแบ่งปันกับคุณ)
อาจมีปัญหากับตัวบ่งชี้บางตัวในบทความนี้ ยินดีต้อนรับสู่การแลกเปลี่ยน ที่จริงแล้ว คุณสามารถจัดระเบียบข้อมูลเหล่านี้และเขียนลงในไลบรารีการตรวจสอบและใช้ในโครงการขนาดเล็กและขนาดกลางของคุณเองได้ จากนั้นการตอบสนองส่วนหน้าจะมีเครื่องมือเช่น bizcharts และ g2 และส่วนหน้าจะดึงหน้าจอข้อมูลขนาดใหญ่ด้วยตัวเอง ฉันคิดว่ามิติข้อมูลที่รวบรวมโดย esay monitor นั้นไม่ครอบคลุมเท่ากับของเรา
คอขวดด้านประสิทธิภาพของเซิร์ฟเวอร์มักมีดังต่อไปนี้:
การใช้งาน CPU และโหลดของ CPU ซึ่งทั้งสองอย่างนี้สามารถสะท้อนถึงความยุ่งของเครื่องได้ในระดับหนึ่ง
การCPU คือทรัพยากรของ CPU ที่ถูกใช้งานโดยการรันโปรแกรม ซึ่งบ่งชี้ว่าเครื่องกำลังรันโปรแกรมอย่างไร ณ จุดใดจุดหนึ่ง ยิ่งอัตราการใช้งานสูงแสดงว่าเครื่องกำลังรันโปรแกรมจำนวนมากในเวลานี้และในทางกลับกัน ระดับการใช้งานเกี่ยวข้องโดยตรงกับความแข็งแกร่งของ CPU ก่อนอื่นมาทำความเข้าใจ API ที่เกี่ยวข้องและคำอธิบายคำศัพท์บางอย่างเพื่อช่วยให้เราเข้าใจโค้ดสำหรับการรับการใช้งาน CPU
os.cpus()ส่งคืนอาร์เรย์ของอ็อบเจ็กต์ที่มีข้อมูลเกี่ยวกับคอร์ CPU แบบลอจิคัลแต่ละตัว
model: สตริงที่ระบุรุ่นของแกน CPU
ความเร็ว: ตัวเลขที่ระบุความเร็วของแกน CPU ในหน่วย MHz
ครั้ง: อ็อบเจ็กต์ที่มีคุณสมบัติต่อไปนี้:
หมายเหตุ: ค่า nice มีไว้สำหรับ POSIX เท่านั้น บนระบบปฏิบัติการ Windows ค่า nice จะเป็น 0 เสมอสำหรับโปรเซสเซอร์ทั้งหมด
เมื่อคุณเห็นผู้ใช้และฟิลด์ที่ดี นักเรียนบางคนสับสนเกี่ยวกับข้อดี ฉันก็เช่นกัน ดังนั้นฉันจึงสอบถามอย่างละเอียดเกี่ยวกับความหมายของพวกเขา โปรดดำเนินการต่อ
ผู้ระบุสัดส่วนของเวลาที่ CPU ทำงานใน โหมดผู้ใช้
การดำเนินการกระบวนการแอปพลิเคชันแบ่งออกเป็น โหมดผู้ใช้ และ โหมดเคอร์เนล : CPU ดำเนินการตรรกะโค้ดของกระบวนการแอปพลิเคชันเองในโหมดผู้ใช้ โดยปกติจะเป็นการ คำนวณ เชิงตรรกะ หรือตัวเลข CPU ดำเนินการเรียกระบบที่เริ่มต้นโดยกระบวนการในโหมดเคอร์เนล ซึ่งโดยปกติจะเป็นการตอบสนอง ต่อการร้องขอทรัพยากรของกระบวนการ
โปรแกรม userspace คือกระบวนการใดๆ ที่ไม่ได้เป็นส่วนหนึ่งของเคอร์เนล เชลล์ คอมไพเลอร์ ฐานข้อมูล เว็บเซิร์ฟเวอร์ และโปรแกรมที่เกี่ยวข้องกับเดสก์ท็อปล้วนเป็นกระบวนการในพื้นที่ผู้ใช้ หากโปรเซสเซอร์ไม่ได้ใช้งาน เป็นเรื่องปกติที่เวลา CPU ส่วนใหญ่ควรใช้ไปกับการรันกระบวนการพื้นที่ผู้ใช้
Nice แสดงถึงสัดส่วนของเวลาที่ CPU ทำงานใน โหมดผู้ใช้ที่มีลำดับความสำคัญต่ำ ลำดับความสำคัญต่ำหมายความว่าค่า nice ของกระบวนการน้อยกว่า 0
ผู้ใช้แสดงถึงสัดส่วนของเวลาที่ CPU ทำงานใน โหมดเคอร์เนล
โดยทั่วไป การใช้งาน CPU ในโหมดเคอร์เนล ไม่ควรสูงเกินไป เว้นแต่กระบวนการแอปพลิเคชันจะเริ่มต้นการเรียกระบบจำนวนมาก หากสูงเกินไป แสดงว่าการเรียกของระบบใช้เวลานาน เช่น การดำเนินการ IO บ่อยครั้ง
ระบุสัดส่วนของเวลาที่ CPU อยู่ในสถานะไม่ได้ใช้งาน ซึ่ง CPU ไม่มีงานที่ต้องทำ
irq แสดงถึงสัดส่วนของเวลาที่ CPU จัดการกับ การขัดจังหวะของฮาร์ดแวร์
การขัดจังหวะการ์ดเครือข่าย เป็นตัวอย่างทั่วไป: หลังจากที่การ์ดเครือข่ายได้รับแพ็กเก็ตข้อมูล การ์ดจะแจ้งให้ CPU ทราบเพื่อประมวลผลผ่านการขัดจังหวะด้วยฮาร์ดแวร์ หากการรับส่งข้อมูลเครือข่ายของระบบมีปริมาณมาก อาจสังเกตการใช้งาน irq เพิ่มขึ้นอย่างมีนัยสำคัญ
หากสถานะผู้ใช้น้อยกว่า 70% สถานะเคอร์เนลน้อยกว่า 35% และสถานะโดยรวมน้อยกว่า 70% ก็สามารถนับเป็นสถานะปกติได้
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้เมธอด os.cpus() ใน Node.js:
ตัวอย่างที่ 1:
// โปรแกรม Node.js เพื่อแสดง
//os.cpus() วิธีการ
// กำลังจัดสรรโมดูลระบบปฏิบัติการ
const os = ต้องการ('os');
// พิมพ์ค่า os.cpus()
console.log(os.cpus()); เอาต์พุต:
[ { รุ่น: 'Intel (R) Core (TM) i5-7200U CPU @ 2.50GHz',
ความเร็ว:2712,
ครั้ง:
{ ผู้ใช้:900000, ดี:0, sys:940265, ไม่ได้ใช้งาน:11928546, irq:147046 } },
{ รุ่น: 'Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz',
ความเร็ว:2712,
ครั้ง:
{ ผู้ใช้:860875, ดี:0, sys:507093, ไม่ได้ใช้งาน:12400500, irq:27062 } },
{ รุ่น: 'Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz',
ความเร็ว:2712,
ครั้ง:
{ ผู้ใช้:1273421, ดี:0, sys:618765, ไม่ได้ใช้งาน:11876281, irq:13125 } },
{ รุ่น: 'Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz',
ความเร็ว:2712,
ครั้ง:
{ ผู้ใช้:943921, nice:0, sys:460109, idle:12364453, irq:12437 } } ] ต่อไปนี้เป็นรหัสสำหรับวิธีรับการใช้งาน cpu
const os = need('os');
const sleep = ms => สัญญาใหม่ (แก้ไข => setTimeout (แก้ไข, ms));
คลาส OSUtils {
ตัวสร้าง () {
this.cpuUsageMSDefault = 1,000; // ระยะเวลาเริ่มต้นการใช้งาน CPU}
-
* รับการใช้งาน CPU ในช่วงระยะเวลาหนึ่ง* @param { Number } Options.ms [ช่วงเวลา ค่าเริ่มต้นคือ 1,000ms ซึ่งก็คือ 1 วินาที]
* @param { บูลีน } Options.percentage [true (ส่งคืนเป็นผลลัพธ์เป็นเปอร์เซ็นต์) | false]
* @returns { สัญญา }
-
async getCPUUsage (ตัวเลือก = {}) {
const นั่น = นี่;
ให้ { cpuUsageMS, เปอร์เซ็นต์ } = ตัวเลือก;
cpuUsageMS = cpuUsageMS ||. that.cpuUsageMSDefault;
const t1 = that._getCPUInfo(); // ข้อมูล CPU ที่จุดเวลา t1 รอการนอนหลับ (cpuUsageMS);
const t2 = that._getCPUInfo(); // ข้อมูล CPU ที่จุดเวลา t2 const idle = t2.idle - t1.idle;
ผลรวม const = t2.total - t1.total;
ให้การใช้งาน = 1 - ไม่ได้ใช้งาน / ทั้งหมด;
ถ้า (เปอร์เซ็นต์) การใช้งาน = (การใช้งาน * 100.0).toFixed(2) + "%";
การใช้งานคืน;
-
-
* รับข้อมูลเวลา CPU ทันที * @returns { Object } ข้อมูล CPU * ผู้ใช้ <number> จำนวนมิลลิวินาทีที่ CPU ใช้ในโหมดผู้ใช้
* nice <number> จำนวนมิลลิวินาทีที่ CPU ใช้ในโหมด Nice
* sys <number> จำนวนมิลลิวินาทีที่ CPU ใช้ในโหมดระบบ
* idle <number> จำนวนมิลลิวินาทีที่ CPU ใช้ในโหมดไม่ได้ใช้งาน
* irq <number> จำนวนมิลลิวินาทีที่ CPU ใช้ในโหมดคำขอขัดจังหวะ
-
_getCPUInfo() {
const cpus = os.cpus();
ให้ผู้ใช้ = 0, ดี = 0, sys = 0, ไม่ได้ใช้งาน = 0, irq = 0, รวม = 0;
สำหรับ (ให้ cpu เป็น cpus) {
const ครั้ง = cpus [cpu] .times;
ผู้ใช้ += times.user;
ดี += ครั้งดี;
sys += ครั้ง.sys;
ไม่ได้ใช้งาน += ครั้ง ไม่ได้ใช้งาน;
irq += ครั้ง.irq;
-
รวม += ผู้ใช้ + ดี + sys + ไม่ได้ใช้งาน + irq;
กลับ {
ผู้ใช้,
ระบบ,
ไม่ได้ใช้งาน,
ทั้งหมด,
-
-
-
const cpuUsage = OSUtils ใหม่ ().getCPUUsage ({ เปอร์เซ็นต์: จริง });
console.log('cpuUsage: ', cpuUsage.then(data=>console.log(data))); // คอมพิวเตอร์ของฉันมี โหลด CPU (loadavg) นั้นง่ายต่อการเข้าใจและอ้างอิงถึงบางอย่าง ช่วงเวลา จำนวนกระบวนการที่ใช้เวลา CPU และกระบวนการที่รอเวลา CPU คือค่าเฉลี่ยโหลด กระบวนการที่รอเวลา CPU ที่นี่หมายถึงกระบวนการที่รอการปลุก ไม่รวมกระบวนการในสถานะรอ
ก่อนหน้านี้ เราจำเป็นต้องเรียนรู้โหนด API
os.loadavg()ส่งคืนอาร์เรย์ที่มีการโหลดเฉลี่ย 1, 5 และ 15 นาที
ค่าเฉลี่ยการโหลดคือการวัดกิจกรรมของระบบที่คำนวณโดยระบบปฏิบัติการและแสดงเป็นทศนิยม
ค่าเฉลี่ยการโหลดเป็นแนวคิดเฉพาะของ Unix บน Windows ค่าที่ส่งคืนจะเป็น [0, 0, 0] เสมอ
ใช้เพื่ออธิบายความยุ่งในปัจจุบันของระบบปฏิบัติการ สามารถเข้าใจได้ง่ายว่าเป็นจำนวนงานโดยเฉลี่ยที่ CPU ใช้และรอใช้งาน CPU ต่อหน่วยเวลา โหลดของ CPU สูงเกินไป บ่งชี้ว่ามีกระบวนการมากเกินไป ในโหนด อาจสะท้อนให้เห็นในการเริ่มกระบวนการใหม่ซ้ำๆ โดยใช้โมดูลพระราชวังต้องห้าม
const os = ต้องการ('os');
//จำนวนเธรด CPU const length = os.cpus().length;
//โหลดเฉลี่ยของ CPU คอร์เดียว ส่งคืนอาร์เรย์ที่มีโหลดเฉลี่ย 1, 5 และ 15 นาที os.loadavg().map(load => load / length) มาอธิบาย API ก่อน มิฉะนั้นคุณจะไม่สามารถอ่านได้ ทำความเข้าใจโค้ดของเราในการรับตัวบ่งชี้หน่วยความจำ
ฟังก์ชันนี้ส่งคืนพารามิเตอร์ 4 ตัว ความหมายและความแตกต่างมีดังนี้:
ใช้โค้ดต่อไปนี้เพื่อพิมพ์การใช้หน่วยความจำของกระบวนการลูก จะเห็นได้ว่า rss มีค่าเท่ากับ RES ของคำสั่งด้านบนโดยประมาณ นอกจากนี้หน่วยความจำของกระบวนการหลักมีเพียง 33M ซึ่งน้อยกว่าหน่วยความจำของกระบวนการลูก จะเห็นได้ว่าการใช้หน่วยความจำนั้นคำนวณแยกกัน
var showMem = ฟังก์ชั่น(){
var mem = กระบวนการ.memoryUsage();
รูปแบบ var = ฟังก์ชั่น (ไบต์) {
กลับ (ไบต์ / 1024/1024).toFixed(2) + 'MB';
-
console.log('กระบวนการ: heapTotal ' + รูปแบบ (mem.heapTotal) + ' heapUsed ' + รูปแบบ (mem.heapUsed) + ' rss ' + รูปแบบ (mem.rss) + ' ภายนอก:' + รูปแบบ (mem.external) );
console.log('-------------------------------------------------) --- ---------------');
}; สำหรับโหนด เมื่อหน่วยความจำรั่วเกิดขึ้น การแก้ไขปัญหาไม่ใช่เรื่องง่าย หากมีการตรวจสอบว่าหน่วยความจำเพิ่มขึ้นแต่ไม่ลดลง แสดงว่าจะต้องมีปัญหาหน่วยความจำรั่ว การใช้หน่วยความจำที่ดีควรเพิ่มขึ้นและลดลง เมื่อการเข้าถึงมีขนาดใหญ่ การเข้าถึงจะเพิ่มขึ้น และเมื่อการเข้าถึงลดลง
const os = need('os');
// ตรวจสอบการใช้งานหน่วยความจำกระบวนการโหนดปัจจุบัน const { rss, heapUsed, heapTotal } = process.memoryUsage();
// รับหน่วยความจำว่างของระบบ const systemFree = os.freemem();
// รับหน่วยความจำระบบทั้งหมด const systemTotal = os.totalmem();
โมดูล.ส่งออก = {
หน่วยความจำ: () => {
กลับ {
ระบบ: 1 - systemFree / systemTotal, // ฮีปการใช้หน่วยความจำระบบ: heapUsed / headTotal, // โหนดการใช้งานหน่วยความจำกระบวนการโหนดปัจจุบัน: rss / systemTotal, // อัตราส่วนการใช้หน่วยความจำกระบวนการโหนดปัจจุบันของหน่วยความจำระบบ}
-
} การตรวจสอบดิสก์จะตรวจสอบการใช้งานดิสก์เป็นหลัก เนื่องจากการเขียนบันทึกบ่อยครั้ง พื้นที่ดิสก์จึงค่อยๆ ใช้หมด เมื่อดิสก์ไม่เพียงพอก็จะเกิดปัญหาต่างๆ ในระบบ ตั้งค่าขีดจำกัดสูงสุดสำหรับการใช้งานดิสก์ เมื่อการใช้งานดิสก์เกินค่าคำเตือน ผู้ดูแลระบบเซิร์ฟเวอร์ควรจัดระเบียบบันทึกหรือล้างข้อมูลในดิสก์
โค้ดต่อไปนี้อ้างอิงถึง easy monitor 3.0
const { execSync } = need('child_process');
ผลลัพธ์ const = execSync('df -P', { การเข้ารหัส: 'utf8'})
เส้น const = result.split('n');
เมตริก const = {};
lines.forEach(บรรทัด => {
ถ้า (line.startsWith('/')) {
const จับคู่ = line.match(/(d+)%s+(/.*$)/);
ถ้า (ตรงกัน) {
อัตรา const = parseInt (จับคู่ [1] || 0);
const mount = การแข่งขัน [2];
if (!mounted.startsWith('/Volumes/') && !mounted.startsWith('/private/')) {
เมตริก [ติดตั้ง] = อัตรา;
-
-
-
-
console.log(metric) โหลด I/O ส่วนใหญ่อ้างถึงดิสก์ I/O ซึ่งสะท้อนถึงสถานการณ์การอ่านและเขียนบนดิสก์ สำหรับแอปพลิเคชันที่เขียนโดยโหนดซึ่งส่วนใหญ่ใช้สำหรับบริการเครือข่าย ไม่น่าเป็นไปได้ที่โหลด I/O จะสูงเกินไป แรงกดดัน I/O ของการอ่านจำนวนมากจะมาจากฐานข้อมูล .
หากต้องการรับตัวบ่งชี้ I/O เราจำเป็นต้องเข้าใจคำสั่ง Linux ที่เรียกว่า iostat หากไม่ได้ติดตั้ง คุณจะต้องติดตั้ง มาดูกันว่าเหตุใดคำสั่งนี้จึงสะท้อนถึงตัวบ่งชี้ I/O
iostat -dx
คำอธิบายคุณสมบัติ
rrqm/s: จำนวนการดำเนินการอ่านแบบผสานต่อวินาที นั่นคือ rmerge/s (จำนวนครั้งที่คำขออ่านไปยังอุปกรณ์ถูกรวมต่อวินาที และระบบไฟล์จะรวมคำขอเพื่ออ่านบล็อกเดียวกัน) wrqm/s: จำนวนการดำเนินการเขียนแบบผสานต่อวินาที นั่นคือ wmerge/s (จำนวนครั้งที่คำขอเขียนไปยังอุปกรณ์ถูกรวมเข้าด้วยกันต่อวินาที) r/s: จำนวนการอ่านจากอุปกรณ์ I/O ที่เสร็จสมบูรณ์ต่อวินาที นั่นคือริโอ/เอส w/s: จำนวนการเขียนไปยังอุปกรณ์ I/O ที่เสร็จสมบูรณ์ต่อวินาที นั่นคือ wio/s rsec/s: จำนวนเซกเตอร์ที่อ่านต่อวินาที นั่นคือ rsect/s wsec/s: จำนวนเซกเตอร์ที่เขียนต่อวินาที เช่น wsect/s rkB/s: K ไบต์ที่อ่านต่อวินาที มันคือครึ่งหนึ่งของ rsect/s เนื่องจากแต่ละเซกเตอร์มีขนาด 512 ไบต์ wkB/s: จำนวน K ไบต์ที่เขียนต่อวินาที มันคือครึ่งหนึ่งของ wsect/s avgrq-sz: ขนาดข้อมูลเฉลี่ย (เซกเตอร์) ต่อการดำเนินการ I/O ของอุปกรณ์ avgqu-sz: ความยาวคิว I/O เฉลี่ย await: เวลารอโดยเฉลี่ย (มิลลิวินาที) สำหรับการดำเนินการ I/O ของอุปกรณ์แต่ละรายการ svctm: เวลาประมวลผลเฉลี่ย (มิลลิวินาที) ของการดำเนินการ I/O ของอุปกรณ์แต่ละรายการ %util: เปอร์เซ็นต์ของหนึ่งวินาทีที่ใช้สำหรับการดำเนินการ I/O นั่นคือเปอร์เซ็นต์ของ CPU ที่ใช้โดย IO
เราจำเป็นต้องตรวจสอบ %util เท่านั้น
หาก %util ใกล้ถึง 100% หมายความว่ามี I มากเกินไป /O ร้องขอถูกสร้างขึ้น ระบบ I/O ถูกโหลดอย่างสมบูรณ์ และอาจมีปัญหาคอขวดบนดิสก์นี้
หาก await มีขนาดใหญ่กว่า svctm มาก แสดงว่าคิว I/O ยาวเกินไป และเวลาตอบสนองของแอปพลิเคชันจะช้าลง หากเวลาตอบสนองเกินช่วงที่ผู้ใช้สามารถทนได้ คุณสามารถพิจารณาเปลี่ยนดิสก์ที่เร็วกว่าได้ การปรับอัลกอริธึมเคอร์เนลลิฟต์และเพิ่มประสิทธิภาพแอปพลิเคชันหรืออัพเกรด CPU
จะตรวจสอบเวลาตอบสนองของหน้าเว็บของ Nodejs โซลูชันนี้เลือกมาจากบทความในบล็อกของอาจารย์ Liao Xuefeng
ล่าสุดฉันต้องการติดตามประสิทธิภาพของ Nodejs การบันทึกและการวิเคราะห์ Log นั้นยุ่งยากเกินไป วิธีที่ง่ายที่สุดคือการบันทึกเวลาการประมวลผลของคำขอ HTTP แต่ละรายการและส่งคืนโดยตรงใน HTTP Response Header
การบันทึกเวลาของคำขอ HTTP นั้นง่ายมาก ซึ่งหมายถึงการบันทึกการประทับเวลาเมื่อได้รับคำขอ และการบันทึกเวลาอื่นเมื่อตอบสนองต่อคำขอ ความแตกต่างระหว่างการประทับเวลาทั้งสองคือเวลาในการประมวลผล
อย่างไรก็ตาม โค้ด res.send() จะกระจายไปตามไฟล์ js ต่างๆ ดังนั้นคุณจึงไม่สามารถเปลี่ยนฟังก์ชันการประมวลผล URL ทุกฟังก์ชันได้
แนวคิดที่ถูกต้องคือการใช้มิดเดิลแวร์เพื่อให้บรรลุเป้าหมาย แต่ Nodejs ไม่มีวิธีการสกัดกั้น res.send() จะทำลายมันได้อย่างไร?
ที่จริงแล้ว ตราบใดที่เราเปลี่ยนความคิดของเราเล็กน้อย ละทิ้งวิธี OOP แบบเดิม และมองว่า res.send() เป็นฟังก์ชันออบเจ็กต์ เราก็สามารถบันทึกฟังก์ชันการประมวลผลดั้งเดิม res.send แล้วแทนที่ res.send ด้วยของเรา ฟังก์ชั่นการประมวลผลของตัวเอง:
app.use (ฟังก์ชั่น (req, res, ถัดไป) {
//บันทึกเวลาเริ่มต้น:
var exec_start_at = Date.now();
//บันทึกฟังก์ชันการประมวลผลดั้งเดิม:
var _send = ส่งอีกครั้ง;
// ผูกฟังก์ชันตัวจัดการของเราเอง:
res.send = ฟังก์ชั่น () {
//ส่งส่วนหัว:
res.set('X-Execution-Time', String(Date.now() - exec_start_at));
// เรียกใช้ฟังก์ชันการประมวลผลดั้งเดิม:
กลับ _send.apply (res, อาร์กิวเมนต์);
-
ต่อไป();
}); การประทับเวลาเสร็จสิ้นด้วยโค้ดเพียงไม่กี่บรรทัด
ไม่จำเป็นต้องประมวลผลเมธอด res.render() เนื่องจาก res.render() เรียกภายใน res.send()
เมื่อเรียกใช้ฟังก์ชัน Apply() สิ่งสำคัญคือต้องส่งผ่านวัตถุ res มิฉะนั้นฟังก์ชันการประมวลผลดั้งเดิมจะชี้ไปที่ไม่ได้กำหนด ซึ่งจะนำไปสู่ข้อผิดพลาดโดยตรง
วัดเวลาตอบสนองของหน้าแรก 9 มิลลิวินาที
อภิธานศัพท์ QPS:
QPS: การสืบค้นต่อวินาที หมายถึง "อัตราการสืบค้นต่อวินาที" ซึ่งเป็นจำนวนการสืบค้นที่เซิร์ฟเวอร์สามารถตอบสนองได้ ต่อวินาที คือการวัดปริมาณการรับส่งข้อมูลที่เซิร์ฟเวอร์สืบค้นเฉพาะจัดการภายในระยะเวลาที่กำหนด
บนอินเทอร์เน็ต ประสิทธิภาพของเครื่องที่ทำหน้าที่เป็นเซิร์ฟเวอร์ระบบชื่อโดเมนมักวัดจากอัตราการสืบค้นต่อวินาที
TPS: เป็นตัวย่อของ TransactionsPerSecond ซึ่งเป็นจำนวนธุรกรรมต่อวินาที เป็นหน่วยวัดผลการทดสอบซอฟต์แวร์ ธุรกรรมหมายถึงกระบวนการที่ไคลเอนต์ส่งคำขอไปยังเซิร์ฟเวอร์และเซิร์ฟเวอร์ตอบสนอง ไคลเอนต์เริ่มกำหนดเวลาเมื่อส่งคำขอและสิ้นสุดเมื่อได้รับการตอบกลับของเซิร์ฟเวอร์เพื่อคำนวณเวลาที่ใช้และจำนวนธุรกรรมที่เสร็จสมบูรณ์
QPS กับ TPS: โดยพื้นฐานแล้ว QPS นั้นคล้ายคลึงกับ TPS แต่ข้อแตกต่างคือการเข้าชมเพจจะสร้าง TPS แต่คำขอเพจอาจสร้างคำขอหลายรายการไปยังเซิร์ฟเวอร์ และเซิร์ฟเวอร์สามารถนับคำขอเหล่านี้เป็น " QPS" ตัวอย่างเช่น การเข้าถึงเพจจะร้องขอเซิร์ฟเวอร์สองครั้ง การเข้าถึงหนึ่งครั้งจะสร้าง "T" และ "Q" สองตัว
ตอบสนอง: เวลาทั้งหมดที่ใช้ในการดำเนินการคำขอตั้งแต่ต้นจนจบเมื่อได้รับข้อมูลการตอบสนอง นั่นคือ เวลาจากไคลเอนต์ที่เริ่มต้นคำขอจนถึงรับผลการตอบสนองของเซิร์ฟเวอร์
เวลาตอบสนอง RT (เวลาตอบสนอง) เป็นหนึ่งในตัวบ่งชี้ที่สำคัญที่สุดของระบบ ค่าตัวเลขของมันสะท้อนถึงความเร็วของระบบโดยตรง
พร้อมกัน หมายถึง จำนวนคำขอที่ระบบสามารถจัดการได้ในเวลาเดียวกัน ซึ่งยังสะท้อนถึงความสามารถในการโหลดของระบบด้วย
ปริมาณงาน (ความสามารถในการรับความดัน) ของระบบมีความสัมพันธ์อย่างใกล้ชิดกับการใช้ CPU ของคำขอ อินเทอร์เฟซภายนอก IO ฯลฯ ยิ่งการใช้ CPU ของคำขอเดียวยิ่งสูง อินเทอร์เฟซระบบภายนอกและความเร็ว IO ก็จะยิ่งช้าลง และความจุทรูพุตของระบบก็จะยิ่งต่ำลง และในทางกลับกัน
พารามิเตอร์ที่สำคัญหลายประการของทรูพุตของระบบ: QPS (TPS) จำนวนการทำงานพร้อมกัน และเวลาตอบสนอง
QPS (TPS): (แบบสอบถามต่อวินาที) จำนวนคำขอ/ธุรกรรมต่อวินาที
การทำงานพร้อมกัน: จำนวนคำขอ/ธุรกรรมที่ประมวลผลโดยระบบในเวลาเดียวกัน
เวลาตอบสนอง: โดยทั่วไป เวลาตอบสนองโดยเฉลี่ย
จะถูกคำนวณหลังจากทำความเข้าใจความหมายของข้อความข้างต้น องค์ประกอบสามประการ ความสัมพันธ์ระหว่างสิ่งเหล่านั้น:
มาทำความเข้าใจแนวคิดข้างต้นผ่านตัวอย่างกันดีกว่า ตามกฎ 80/20 หาก 80% ของการเข้าชมรายวันกระจุกตัวอยู่ใน 20% ของเวลา เวลา 20% นี้เรียกว่าเวลาสูงสุด
1 เครื่องเดียวต้องใช้ PV 300w ต่อวัน
(3000000 * 0.8) / (86400 * 0.2) = 139 (QPS)
2. ถ้า QPS ของเครื่องคือ 58 ต้องใช้กี่เครื่องเพื่อรองรับ?
139/58 = 3
ณ จุดนี้ ถ้าคุณทำสถาปัตยกรรมส่วนหน้าของโปรเจ็กต์ขนาดเล็กและขนาดกลางทั่วไป และปรับใช้บริการโหนดของคุณเอง คุณจะรู้ว่าต้องใช้เครื่องกี่เครื่องในการสร้างคลัสเตอร์เพื่อรายงาน PPT ฮ่าๆ คุณสามารถคำนวณค่าคร่าวๆ ด้วย PV
เราจำเป็นต้องเข้าใจการทดสอบความเครียด (เราจำเป็นต้องอาศัยการทดสอบความเครียดเพื่อรับ qps) ใช้คำสั่ง ab เป็นตัวอย่าง:
รูปแบบคำสั่ง:
ab [options] [http://]hostname[:port]/path
Common พารามิเตอร์มีดังนี้:
-n คำขอทั้งหมด จำนวนคำขอ -c การทำงานพร้อมกัน จำนวนการทำงานพร้อมกัน -t ขีดจำกัดเวลา จำนวนวินาทีสูงสุดสำหรับการทดสอบ ซึ่งถือเป็นเวลาหมดเวลาของคำขอ -p postfile ไฟล์ที่มีข้อมูลที่ต้องใช้ POST -T content-type ข้อมูลส่วนหัวของประเภทเนื้อหาที่ใช้โดยข้อมูล POST คัดลอกโค้ด