Der Server des Unternehmens benötigt eine Echtzeitüberwachung, und wenn der Benutzerraum voll ist, schlägt der Vorgang fehl. Wenn die Programmausnahme auftritt, werden Echtzeit-Erinnerungen erforderlich ist in zwei Teile unterteilt.
Teil 1: Echtzeit-Systemüberwachung (CPU-Auslastung, CPU-Temperatur, Gesamtspeichergröße, gebrauchte Speichergröße)
Teil 2: Echtzeit-Alarme sind nicht aktualisiert und in Echtzeit, sodass sie nur AJAX verwenden können. und Operationen auf dem zugrunde liegenden System werden im Allgemeinen von JN abgeschlossen. Die Laufzeit wird hier verwendet.
* CPU- und Speicherinformationen unter das Linux -System erhalten * * * * / öffentliche Schlussklasse LinuxSystemTool { / ** * Speicher durch verwendete Info * * @return int [] result * result.length == 4; in t [0] = Memtotal; int [1] = memfree; int [2] = swaptotal; int [3] = Swappfree; Neue Datei ("/proc/meminfo"); while (Str = Br.Readline ())! ()) Weiter; = Integer.ParseInt (token.nextToken ()); Swaptotal: ")) Ergebnis [2] = Integer ;} Rückgabeergebnis; /proc/stat "); BufferedReader BR = New BufferedReader (neuer InputStreamReader (neuer FileInpu TStream (Datei)); StringTokenizer token = new StringTokenizer (br.Readline ()); token.nextToken (); int user1 = Intiere.ParseIntline) (token.nextToken ()); ; token.nextToken ()); (float) ((user2 + sys2 + nice2) - (user1 + sys1 + nice1)) / (float) ((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1));
Hier sind zwei Methoden, lassen Sie mich es erklären.
Methode 1 Datei "/proc/meminfo" enthält Speicherinformationen und Swap -Informationen. Zum Beispiel:
$ cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 1057009664 851668992 205340672 0 67616768 367820800 Swap: 2146787328 164429824 198 2357504 MemTotal: 1032236 kB MemFree: 200528 kB MemShared: 0 kB
Auf diese Weise können Sie die Methode zum Abfangen von Zeichenfolgen verwenden, um Linux -Speicherinformationen zu erhalten.
Methode 2 enthält CPU -Informationen in der Datei "/proc/stat". Jede Zecke jeder CPU wird in dieser Datei verwendet. Die folgenden Zahlen sind: Benutzer, nett, sys, muten, iowait. Einige Versionen von Kernel haben nicht den Iowait -Artikel. Diese Werte geben an, wo jede Zecke der CPU vom Beginn des Computers verwendet wird. Zum Beispiel:
CPU0 256279030 0 11832528 1637168262
Das heißt, da CPU0 begonnen hat, werden 256279030 Ticks für den Benutzerverbrauch verwendet, und 11832528 werden für den SYS -Verbrauch verwendet. Wenn Sie also die CPU -Last pro Zeiteinheit (z. B. 1s) berechnen möchten, müssen Sie nur die Differenz zwischen den Werten vor und nach 1 Sekunde geteilt durch die Anzahl der Zecken pro Sekunde berechnen.
OK, es gibt noch CPU -Temperatur, wie es geht?
Es ist wahrscheinlich so:
Temperatur: 68c
Aber nicht jede Linux -Maschine hat diese THM. Lesen Sie diese Datei, ich glaube, jeder wird Folgendes tun, lies einfach den Inhalt und teilst dann die Zeichenfolge, um diese 68 zu erhalten. OK, alle grundlegenden Informationen des Systems sind abgeschlossen, und dann ist es jetzt nur eine Sache, die, welche ist es, diese Klasse zu verwenden, um grundlegende Informationen zu erhalten, und kehrt dann auf die Seite zurück.
Das Folgende ist die Auswirkung der Systemüberwachung.
Zu diesem Zeitpunkt wurde der erste Teil des Systemüberwachungsteils abgeschlossen.
1. Die Temperatur und die CPU müssen den Nennwert überschreiten
2. Das Betriebssystem des Benutzers schlägt nicht aus, und der Speicherplatz des Benutzers ist nicht ausreichend. In der Datenbank gespeichert.
3. Alarme müssen in Echtzeit sein. Aus der Warnliste, in der Datum> neuer Datum ()+ AjaxTime später festgestellt wurde, dass die Zeit sehr falsch ist, Netzwerkverzögerung, Programmverarbeitungszeit (CPU -Informationen verwendet die Schlaffunktion) usw. Sie stellen häufig fest, dass einige Alarminformationen rücksichtslos losgelassen werden. Und manchmal gibt es Wiederholungsdaten, daher dachte ich an die Verwendung von ID. Die Daten nach dieser ID (dh, geben ich die neuesten Daten nach dem System ein und die Sitzung speichert die neue maximale ID. Informationen können garantiert das neueste sein, wenn Ajax es abholt, und es gibt keine Duplikation!
Erstellen Sie Tabelle "Warnlist" ("id" bigint (20) nicht null auto_increment, "Warnleave" Tinyint (2) nicht null Standard '0', // Alarmeben LL, // Warnung `WarnContent` varchar (100) NICHT NULL, // Alarminhalt, wie z. (12) Standardnull, // Alarmwert 80 `Warntime` datetime nicht null, // Alarmzeit` stackInfo` varchar (255) Standardnull, // Ausnahme -Stapel -Information 'Tinyint (2) nicht n ulll default' 0 ', // Verarbeitungsergebnis `Version` int (11) Standardnull, // Version` organisatorid` varchar (20) Standardnull, // Organisations -ID `Des` varchar (255) Standardnull, Primärschlüssel (` i d ` )) Motor = innoDB Standard charSet = utf8;
Nehmen wir an, ich erhalte Informationen aus dem System, dann muss ich eine Logik schreiben, wenn (cputempature> 75c) oder wenn (CPUUSERD> 80%) in die Datenbank geschrieben wird, und dann die Alarminformationen größer als die maximale ID der AJAX abfragen Die Datenbank, die das letzte Mal gesendet wurde (wenn die folgenden Fehler in diesem Zeitraum auftreten, ist zusammen: Der Speicherplatz des Benutzers ist nicht ausreichend, und der Geschäftsbetriebsausfall des Unternehmens, der Alarm, die Ausnahme usw.). Gibt diese XML für die Seitenteilungsinformationen zurück
<RESPRACTION> <CPUUSE> 67 </ CPUUSE> <CpUTEMP> 76 <Cputemp> <Beary> 1023422 </ mes MEHRE> <Freememory> 43244 </ freememory> <Wannistlist> <Warning> 2 </ warnid> <kriegsnContent> System system> system Aufbewahrung unzureichender Raum </ WarningContent> <Richguy> kakaluyi </ frageguy> ...... </ wanrlist> <warninglist> <warnid> 3 </ warnid> <WarningContent> CPU -Temperatur ist zu hoch </ warningcontent> <frageguy > System </ fragtguy> <orgid> System </ orgid> <warningValue> 78 </ warningValue> ............ </ warninglist> ..... ... </ reaktion>
Der Anzeigecode der Systeminformationen bezieht sich auf das obige Bild:
var cpuused = req .responsexml.getElementsByTagName ('cpuused') [0]. GetElementsByTagName ('Freememory') [0] ') .ernerHtml = TotalMemory;
Server -CPU -Verwendung:
</ td> <td class = "text"> <font color = "#ff0000" size = "+2"> <label id = "cpuused"> </ label> </ font> <vorbestimmten Schwellenwert: 80 %> </ td> </ tr> .........
Dann gibt es das Problem der Seite.
var leng = req.responsexml.getElementsByTagName ('Warnlist') .Length; +Länge-1> 50) // Wenn es größer als 50 Elemente ist, suchen Sie nach der Tabelle der Alarmliste, erhalten Sie den untergeordneten Knoten der Alarminformationen und löschen ('Tabelle') [4] .Childnodes [0]; ;
Geben Sie dann eine neue Alarmmeldung ein.
für (var i = 0; i <Länge; i ++) {var OneWarnlist = Req.Responsexml.getElementsByTagName ('Warnlist') [i] .Childnodes; Leave = "Enterprise-Level Alarm"; = OneWarnlist [3] [6]. 'Warntable'); } x ++; ('td'); InnerHtml = von TR. CreateLement ('TD'); .ernerHtml = '<font color = "#ff0000">' + warnValue + '</font>'; tt d6.InnerHtml = Warnzeit; = Dokument.Createelement ('TD');
Ok, alles ist getan, das Folgende ist der endgültige Effekt