เซิร์ฟเวอร์ของ บริษัท ต้องการการตรวจสอบแบบเรียลไทม์และเมื่อพื้นที่ผู้ใช้เต็มรูปแบบการดำเนินการล้มเหลวหรือเมื่อข้อยกเว้นของโปรแกรมเกิดขึ้นจำเป็นต้องมีการแจ้งเตือนแบบเรียลไทม์เพื่ออำนวยความสะดวกในการจัดการเครือข่ายและการปรับโปรแกรมโปรแกรมเมอร์เพื่อให้ระบบตรวจสอบแบบเรียลไทม์ แบ่งออกเป็นสองส่วน
ส่วนที่ 1: การตรวจสอบระบบแบบเรียลไทม์ (การใช้ CPU, อุณหภูมิ CPU, ขนาดหน่วยความจำทั้งหมด, ขนาดหน่วยความจำที่ใช้)
ส่วนที่ 2: การเตือนภัยแบบเรียลไทม์จะไม่ได้รับการฟื้นฟูและเรียลไทม์ดังนั้นพวกเขาจึงสามารถใช้ AJAX ได้เท่านั้น และการดำเนินการในระบบพื้นฐานจะเสร็จสิ้นโดย JN . ใช้งานรันไทม์ที่นี่
* รับ CPU และข้อมูลหน่วยความจำภายใต้ระบบ Linux * * * / คลาสสุดท้ายของคลาส LinuxsystemTool { / ** * รับหน่วยความจำโดยใช้ข้อมูลที่ใช้ * * @return int [] ผลลัพธ์ * result.length == 4; ใน t [0] = memtotal; int [1] = memfree; int [2] = swaptotal; int [3] = swapfree; ไฟล์ใหม่ ("/proc/meminfo"); ในขณะที่ (str = br.readline ())! ()) ต่อไป; = integer.parseint (token.nexttoken ()); swaptotal: ")) ผลลัพธ์ [2] = integer.parseint (token.nexttoken ()); อื่น ๆ ถ้า (str.equalsigno recase (" swapfree: ")) ผลลัพธ์ [3] = integer.parseint (token.nexttoken ())) ผลการส่งคืน; /proc/stat "); bufferedreader br = new bufferedreader (ใหม่ inputStreamReader (ใหม่ fileInpu tstream (ไฟล์))); StringTokenizer Token = ใหม่ StringTokenizer (br.readline ()); token.nexttoken (); int user1 = integer.parseint (token.nexttoken ()); int nice1 = integer.parseint (token.nexttoken ()); Thread.sleep (1,000); token.nexttoken ()); (Float) ((user2 + sys2 + nice2) - (user1 + sys1 + nice1)) / (float) ((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1));
นี่คือสองวิธีให้ฉันอธิบาย
วิธีการที่ 1 ไฟล์ "/proc/meminfo" มีข้อมูลหน่วยความจำและข้อมูลสลับ ตัวอย่างเช่น:
$ CAT /PROC /MEMINFO ยอดรวม: ใช้: ฟรี: แบ่งปัน: บัฟเฟอร์: แคช: MEM: 1057009664 851668992 205340672 0 67616768 367820800 SWAP: 2146787328 16429824
ด้วยวิธีนี้คุณสามารถใช้วิธีการสกัดกั้นสตริงเพื่อรับข้อมูลหน่วยความจำ Linux
วิธีที่ 2 มีข้อมูล CPU ในไฟล์ "/proc/stat" ทุกเครื่องหมายของซีพียูแต่ละตัวจะใช้ในไฟล์นี้ หมายเลขต่อไปนี้คือ: ผู้ใช้, ดี, sys, ว่าง, iowait เคอร์เนลบางรุ่นไม่มีรายการ iowait ค่าเหล่านี้บ่งชี้ว่าแต่ละเห็บของ CPU ถูกใช้ตั้งแต่เริ่มต้นคอมพิวเตอร์ ตัวอย่างเช่น:
CPU0 256279030 0 11832528 1637168262
นั่นคือตั้งแต่เริ่มต้น CPU0 256279030 เห็บถูกใช้สำหรับการบริโภคของผู้ใช้และ 11832528 ใช้สำหรับการบริโภค SYS ดังนั้นหากคุณต้องการคำนวณโหลด CPU ต่อหน่วยเวลา (ตัวอย่างเช่น 1S) คุณจะต้องคำนวณความแตกต่างระหว่างค่าก่อนและหลัง 1 วินาทีหารด้วยจำนวนเห็บต่อวินาที
ตกลงยังมีอุณหภูมิ CPU เหลืออยู่อย่างไรฉันพบไฟล์ "CAT/PROC/ACPI/Thermal_Zone/THM/อุณหภูมิ" ซึ่งสามารถส่งคืนอุณหภูมิ Linux ของเครื่อง
มันอาจจะเป็นเช่นนี้:
อุณหภูมิ: 68c
แต่ไม่ใช่เครื่อง Linux ทุกเครื่องที่มี THM นี้ อ่านไฟล์นี้ฉันเชื่อว่าทุกคนจะทำสิ่งต่อไปนี้เพียงแค่อ่านเนื้อหาแล้วหารสตริงเพื่อรับ 68 นี้โอเคข้อมูลพื้นฐานทั้งหมดของระบบจะเสร็จสมบูรณ์แล้วก็โอเคตอนนี้มีเพียงสิ่งเดียวเท่านั้น คือการใช้ Ajax เรียกคลาสนี้เพื่อรับข้อมูลพื้นฐานแล้วกลับไปที่หน้า
ต่อไปนี้เป็นผลของการตรวจสอบระบบ
ณ จุดนี้ส่วนแรกของส่วนการตรวจสอบระบบเสร็จสิ้นแล้ว
1. อุณหภูมิและ CPU เกินค่าที่กำหนดไว้จะต้องได้รับการแจ้งเตือน
2. ระบบปฏิบัติการของผู้ใช้ล้มเหลวและพื้นที่เก็บข้อมูลของผู้ใช้ไม่เพียงพอ บันทึกในฐานข้อมูล
3. การเตือนต้องเป็นแบบเรียลไทม์ จาก WarningList ที่วันที่> วันที่ใหม่ ()+ ajaxtime, ในภายหลังพบว่าเวลาไม่ถูกต้องมาก, การหน่วงเวลาของเครือข่าย, เวลาในการประมวลผลโปรแกรม, (ข้อมูล CPU ใช้ฟังก์ชั่นการนอนหลับ) ฯลฯ คุณมักจะพบว่าข้อมูลการเตือนภัยบางอย่างถูกปล่อยอย่างไร้ความปราณี และบางครั้งก็มีข้อมูลซ้ำดังนั้นฉันจึงคิดว่าจะใช้ ID ข้อมูลหลังจาก ID นี้ (นั่นคือฉันป้อนการตรวจสอบข้อมูลล่าสุดหลังจากระบบ) และเซสชันบันทึก ID สูงสุดใหม่ ข้อมูลสามารถรับประกันได้ว่าเป็นล่าสุดเมื่อ Ajax ดึงข้อมูลและไม่มีการทำซ้ำ
สร้างตาราง `warnlist` (` id` bigint (20) ไม่ใช่ null auto_increment, `warnleave` tinyint (2) ไม่ใช่ค่าเริ่มต้น null '0', // ระดับการเตือน: ความรุนแรงของการเตือน ll, // คำเตือน `warncontent` varchar (100) ไม่เป็นโมฆะ, // เนื้อหาการเตือนเช่นอัตราการใช้งาน CPU เกิน 80%` Aviliablevalue` Varchar (12) ค่าเริ่มต้น NULL // ค่าที่ได้รับอนุญาตเช่น 85% `Warnvalue` Varchar (12) ค่าเริ่มต้น NULL, // ค่าการเตือนภัย 80 `Warntime` DateTime Not Null, // เวลาการเตือน` stackinfo` varchar (255) ค่าเริ่มต้น null, // ข้อยกเว้นสแต็กข้อมูล ' ', // ผลการประมวลผล `เวอร์ชัน' int (11) ค่าเริ่มต้น null, // เวอร์ชัน` organicerid` varchar (20) ค่าเริ่มต้น null, // ologrational id `des` varchar (255) ค่าเริ่มต้น, คีย์หลัก (` i d ` )) เครื่องยนต์ = innoDB เริ่มต้น charset = utf8;
สมมติว่าฉันได้รับข้อมูลจากระบบจากนั้นฉันต้องเขียนลอจิกถ้า (cputempature> 75c) หรือถ้า (cpuuserd> 80%) ถูกเขียนลงในฐานข้อมูลแล้วสอบถามข้อมูลการเตือนภัยมากกว่ารหัสสูงสุดของ Ajax ฐานข้อมูลที่ส่งครั้งสุดท้าย (หากเกิดข้อผิดพลาดต่อไปนี้ในช่วงเวลานี้พบกัน: พื้นที่เก็บข้อมูลของผู้ใช้ไม่เพียงพอและการเตือนความล้มเหลวในการดำเนินงานทางธุรกิจของ บริษัท ของเราข้อยกเว้น ฯลฯ ), วนลูปเข้าสู่คลาสการแยกวิเคราะห์ XML อาจเป็นแบบฟอร์ม Ajax ส่งคืน XML นี้สำหรับข้อมูลการแยกหน้า
<serponse> <cpuused> 67 </cpuused> <cputemp> 76 <Cputemp> <memory> 1023422 </ หน่วยความจำ> <Freememory> 43244 </freememory> <wannlist> พื้นที่จัดเก็บไม่เพียงพอ </ warningContent> <fronguy> kakaluyi </fromguy> ...... </wanrlist> <WarningList> <Varnid> 3 </arnid> > System </fronguy> <orgid> ระบบ </ orgid> <warningValue> 78 </arningValue> ............ </arningList> ..... ...
รหัสการแสดงผลของข้อมูลระบบเกี่ยวข้องกับรูปภาพด้านบน:
var cpuused = req .responsexml.getElementByTagname ('cpuused') [0] .FirstChild.nodevalue; GetElementsByTagname ('Freememory') [0] .FirstChild.Nodevalue; ') .innerhtml = TotalMemory;
การใช้งานเซิร์ฟเวอร์ CPU:
</td> <td class = "text"> <font color = "#ff0000" size = "+2"> <label id = "cpuused"> </ label> </font> 80 %> </td> </tr> .........
จากนั้นมีปัญหาของหน้าจอ
ความยาว var = req.responsexml.getElementsByTagname ('warnlist') .length; +length-1> 50) // ถ้ามีมากกว่า 50 รายการให้มองหาตารางของรายการสัญญาณเตือนรับโหนดลูกของข้อมูลการเตือนภัยจากนั้นลบข้อมูลการเตือนภัยที่เร็วที่สุด {var tbody = document.getElementSyTagname ('ตาราง') [4] .childnodes [0]; ;
จากนั้นใส่ข้อความเตือนใหม่
สำหรับ (var i = 0; i <length; i ++) {var onewarnlist = req.responsexml.getElementsByTagname ('warnlist') [i] .childnodes; leade = "สัญญาณเตือนระดับองค์กร"; = ineWarnList [3] .FirstChild.nodevalue; [6] 'warntable'); } x ++; ('td'); Innerhtml = จาก; CreateElement ('TD'); .innerhtml = '<font color = "#ff0000">' + warnvalue + '</font>'; TT D6.innerhtml = เวลาเตือน; = document.createelement ('td');
ตกลงทุกอย่างเสร็จแล้วต่อไปนี้เป็นเอฟเฟกต์สุดท้าย