同社のサーバーはリアルタイムの監視が必要であり、ユーザースペースがいっぱいになったとき、操作が失敗した場合、またはプログラムの例外が発生した場合、ネットワーク管理とプログラマーの調整を促進するためにリアルタイムのリマインダーが必要であるため、リアルタイム監視システムが2つの部分に分かれています。
パート1:リアルタイムシステム監視(CPU使用率、CPU温度、メモリサイズの合計、使用済みメモリサイズ)
パート2:リアルタイムのアラームはリアルタイムではないため、ここではAjaxフレームワークのみを使用できます。基礎となるシステムの操作は、一般的にJNによって完了します。特に、Windowsの下でコマンドラインを使用して取得することはできませんが、サーバーシステムはLinuxであるため、JAVAを使用してJNIを呼び出すことなくシステム情報を取得できます。ここでは、ランタイムが使用されます。
* Linux Systemの下でCPUとメモリ情報を取得 * * * /パブリックファイナルクラスLinuxSystemTool { / ** *使用済み情報でメモリを取得 * * @return int [] result * result.length == 4; in t [0] = memtotal; int [1] = memfree; int [2] = int [3] = swapfree;新しいファイル(「/proc/meminfo」); while(str = br.readline()!= null){token = new StringTokenizer(!token.hasmoretokens()) ())if( "memtotal:")result [0] = token.nexttoken()); = integer.parseint(token.nexttoken()); swaptotal: "))result [2] = integer.parseint(token.nexttoken()); else if(str.equalsigno recase(" swapfree: "))result [3] = integer.parseint(token.nexttoken()) ;} return ruster; /proc/stat "); bufferedreader br = new BufferedReader(new inputStreamReader(new fileinpu tstream(file))); stringtokenizer token = new StringTokenizer(br.readline()); token.nextToken(); int user1 = integer.parseintint (token.nextoken());スレッド(1000); token.nextoken()); (float)((user2 + sys2 + nice2) - (user1 + sys1 + nice1) /(float)((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + dle1)});
ここに2つの方法があります。説明させてください。
方法1ファイル「/proc/meminfo」には、メモリ情報が含まれ、情報を交換します。例えば:
$ cat /proc /meminfo合計:free:free:shared:buffers:cached:mem:1057009664 851668992 205340672 0 67616768 367820800スワップ:214777328 164429824 2357504 memfreed:103285555555555555555555555557504mema
このようにして、文字列を傍受する方法を使用して、Linuxメモリ情報を取得できます。
方法2には、ファイル「/proc/stat」にCPU情報が含まれています。各CPUのすべてのティックは、このファイルで使用されます。次の数字は、ユーザー、NICE、SYS、IDLE、IOWAITです。カーネルのいくつかのバージョンには、iowaitアイテムがありません。これらの値は、CPUの各ティックがコンピューターの開始時から使用される場所を示しています。例えば:
CPU0 256279030 0 11832528 1637168262
つまり、CPU0が開始されてから、256279030のティックがユーザー消費に使用され、11832528がSYS消費に使用されます。したがって、単位時間あたりのCPU負荷を計算する場合(たとえば、1秒)、1秒前後の値を1秒あたりのダニの数で割る前後の値の差を計算する必要があります。
OK、まだCPUの温度が残っていますか?
それはおそらくこのようなものです:
温度:68c
ただし、すべてのLinuxマシンには、Linuxがこのファイルを使用してロードすることを確認する必要がありますこのファイルを読んでください、私は誰もが次のことを行い、コンテンツを読んで、文字列を分割してこの68を取得すると信じています。 Ajaxはこのクラスを呼び出して基本情報を取得し、Ajaxの使用を繰り返しません。
以下は、システム監視の効果です。
この時点で、システム監視部分の最初の部分が完了しました。
1.温度とCPUは定格値を上回る必要があります
2。ユーザーのストレージスペースは不十分です。データベースに保存されます。このように設計されています。
3。アラームはリアルタイムである必要があります。 where where date> new date()+ ajaxtimeから、後で時間が非常に正しくなく、ネットワーク遅延、プログラム処理時間、(CPU情報が睡眠機能を使用する)などを発見しました。また、繰り返しデータがあるので、アラームシステムを入力するたびに、最大アラームIDをチェックしてから、Ajaxをデータベースから保存します。このIDの後のデータ(つまり、システムの後に最新のデータを監視します)、セッションは新しい最大IDを次に保存します。 Ajaxがそれを取得すると、情報が最新のものになることが保証され、非常に良いものはありません!
テーブル「Warnlist」( `id` bigint(20)not null auto_increment、` warnleave`tinyint(2)null default '' '' '' '' '' '' '' '' 'from the guy` varchar(20)not nu ll、//警告 `WarnContent` varchar(100)nullではない、// CPU使用率などのアラームコンテンツは80%を超えます` AviliableValue` Varchar(12)デフォルトnull、// 85% `Warnvalue` varchar (12)デフォルトのnull、//アラーム値80 `Warntime` DateTime Not Null、// Alarm Time` Stackinfo` varchar(255)デフォルトnull、//例外STACK `DealWith`tinyint(2)not n ull default '0 0 '、//処理結果 `バージョン` int(11)デフォルトnull、//バージョン `organizerid` varchar(20)デフォルトnull、//組織id` des` varchar(255)デフォルトnull、プライマリキー( `i d` ))エンジン= innodbデフォルトcharset = utf8;
システムから情報を取得すると、ロジックを記述する必要があります。(cputempature> 75c)または(cpuuserd> 80%)がデータベースに書き込まれ、ajaxの最大IDよりも大きいアラーム情報を照会します前回送信されたデータベース(この期間中に次のエラーが発生した場合:ユーザーのストレージスペースが不十分であり、当社の事業操作の失敗アラーム、例外など)、XML解析クラスにループすると、おそらくフォームはajaxです。ページ抽出情報のためにこのXMLを返します
<Response> <CPuused> 67 </ cpuused> <cputemp> 76 <cputemp> <memory> 1023422 </ memory> <freememory> 43244 </ freememory> <wannlist> <warning> 2 </ warnid> <war ncontent>システムシステムストレージ不十分なスペース</ arnationContent> <FromGuy> kakaluyi </ fromguy> ...... </ wanrlist> <warninglist> <warnid> 3 </ warnid> <WarningContent> > System </ fromguy> <orgid> system </ orgid> <WarningValue> 78 </ arnalingValue> ............ </ arilingList> ..... ... </ response>
システム情報の表示コードは、上の写真に関連しています。
var cpuuse = req .responsexml.getelementsbytagname( 'cpuused')[0] .nodevalue; getelementsbytagname( 'freememory')[0] .nodevalue; ')Innerhtml = attolmemory;
サーバーCPUの使用法:
</ td> <td class = "text"> <font color = "#ff0000" size = "+2"> <label id = "cpuused"> </ label> </ font> <アラーム事前に決定されたしきい値: 80%> </ td> </ tr> .........
次に、ページディスプレイの問題があります。
var length = responsexml.getelementsbytagname( 'Warnlist').length(length> 0){document.getelementsbytagname( 'table')[4] +長さ1> 50)// 50項目を超える場合は、アラームリストのテーブルを探し、アラーム情報の子ノードを取得し、最古のアラーム情報を削除します{var tbody = document.getelementsbytagname ( 'Table')[4] .ChildNodes [0]; ;
次に、新しいアラームメッセージを挿入します。
for(var i = 0; i <length; i ++){var onewarnlist = req.responsexml.getelementsbytagname( 'warnlist')[i] .childnodes; reave = "Enterprise-level Alarm" var reave = "operation-level alarm} = onewarnlist [3] [6]。 'warntable'); var tr = createelement( 'tr'); } x ++; ( 'TD')。 innerhtml = tr.appendChild(TD2); CreateElement(TD ') .innerhtml = '<font color = "#ff0000" +' </font> '; TT D6.innerhtml = td7 = createlement( 'td7.classname =' listtext; = document.createlement( 'td');
わかりました、すべてが完了しました、次のことが最終的な効果です