近づいてくるパフォーマンスの問題を検出するたびにアラートを送信する「スマートモニター」をJavaで作成したいと思います。私のJavaアプリは、構造化された形式でデータをログファイルに書き込んでいます。
<datetime> | <java-method> | <seconds-to-execute>
したがって、たとえば、Widget#doSomething(String)
実行に812ミリ秒かかるメソッドがある場合、次のようにログに記録されます。
2013-03-24 11:39:21 | Widget#doSomething(String) | 812
パフォーマンスが低下し始めると(メジャーコレクション中、負荷のピーク時、またはシステムの速度が低下している場合など)、メソッドの実行タイミングが遅くなり始めます。そのため、右端の列に膨大な数が表示され始めます(1つのメソッドを実行するのに20〜40秒かかる場合があります)。
大学では、機械学習の演習のために、教授が線形二分法と呼んでいるものを書きました。これは、簡単なテストデータ(人の身長、体重、性別)を取得し、人を男性または女性に分類する方法を「学習」しました。身長体重。次に、すべてのトレーニングデータを取得したら、新しいデータをフィードして、性別をどれだけ正確に判断できるかを確認しました。
多変量バージョンの線形二分法は、サポートベクターマシン(SVM)と呼ばれるものだと思います。私が間違っている場合は、明確にしてください。質問のタイトルをより適切なものに変更します。とにかく、私はこのアプリが次のことをする必要があります:
- 「テストモード」で実行し、メインのJavaアプリ(監視したいアプリ)から構造化ログファイルをフィードし、各ログエントリ(上記のように)を取得してテストデータに使用します
- 入力/テストデータとして重要なのは
java-method
と列だけです。seconds-to-execute
日時は気にしない
- 入力/テストデータとして重要なのは
- ログファイルから新しいログデータをアクティブに読み取る「モニターモード」で実行し、同様の「機械学習」手法を使用して、パフォーマンスの低下が迫っているかどうかを判断します
ここで重要な要素は列だけではないことに注意することがseconds-to-execute
重要です。素晴らしいパフォーマンスの期間中の特定のメソッドの恐ろしいタイミングと、サーバーが死にかけているように見えたときの他のメソッドの本当に素晴らしいタイミングを見てきました。デイジーを押します。したがって、明らかに特定のメソッドは「重み付け」されており、他のメソッドよりもパフォーマンスにとって重要です。
私の質問
- 「線形二分法」または「サポートベクターマシン」をグーグルで検索すると、非常に恐ろしい、非常に学術的な、超大脳のホワイトペーパーが見つかります。オプション; だから私は、このようなものへの素人の紹介、またはJavaでそのようなシステムを構築するための素晴らしいサイト/記事/チュートリアルがありますか?
- 堅実で安定したオープンソースのJavaライブラリはありますか?私は見つけることしかできませんでしたが
jlibsvm
、svmlearn
前者は純粋なベータ状態にあるように見え、後者はバイナリ決定のみをサポートしているようです(私の古い線形二分法のように)。Mahoutがあることは知っていますが、それはHadoopの上にあり、自分のHadoopクラスターをセットアップするための時間と精神的なエネルギーを保証するのに十分なデータがないと思います。
前もって感謝します!