1

jvm の次の変更についてメール警告を生成する方法

1) メモリ 2) スレッド 3) データベース接続

jmxを使用して

どんな助けでも役に立ちます

ありがとう

4

2 に答える 2

3

記憶に関する質問にお答えします。特定のメモリ プールがしきい値を超えたときに通知を受け取るには、次のようにします。すべてのメモリ プールのリストを取得するには、ManagementFactory.getMemoryPoolMXBeans() を呼び出します。次に、あなたにとって重要なものを選択してください。私のマシンのリストは次のとおりです。

Code Cache
Eden Space
Survivor Space
Tenured Gen
Perm Gen
Perm Gen [shared-ro]
Perm Gen [shared-rw]

しかし、これには意図的に標準がなく、バージョンと実装によって異なると思います。まず、興味のあるプールを取得します。

MemoryPoolMXBean memPool = ...; // Get a MemoryPoolMXBean

次に、使用量のしきい値が許可されているかどうかを確認します。その場合は、1 つ (バイト単位) を設定します。

if(memPool.isUsageThresholdSupported())
{
  memPool.setUsageThreshold(5000000);
}

次に、NotificationListener を MemoryMXBean の addNotificationListener に渡すことによって、しきい値を超えたときに通知を要求します (実際には、最初に NotificationEmitter にキャストする必要があります)。この例では、NotificationListener は匿名の内部クラスですが、javax.management.NotificationListener インターフェースを実装している限り、任意のものにすることができます。基本的に、以下で行ったことは、使用されているメモリの量に応じて、愚かなメッセージを標準出力/標準エラー出力に出力することです。もちろん、代わりに JavaMail やサードパーティのメール フレームワークにフックしてメールを送信することもできます。

NotificationEmitter memBean = (NotificationEmitter)(ManagementFactory.getMemoryMXBean());
memBean.addNotificationListener(new NotificationListener()
{
  public void handleNotification(Notification n, Object handback)
  {
    CompositeData cd = (CompositeData)n.getUserData();
    MemoryNotificationInfo mni = MemoryNotificationInfo.from(cd);
    MemoryUsage memUsage = mni.getUsage();
    long bytesUsed = memUsage.getUsed();
    if(bytesUsed > 512000000)
      System.err.println("Oh, no, we're using more than 512M!");
    else
      System.out.println("It's okay.  We're only using " + bytesUsed + " bytes.");
  }
}

スレッドに関する限り、関連する Bean は明らかに ThreadMXBean であり、ManagementFactory.getThreadMXBean() から取得します。ただし、しきい値を設定したりリスナーを追加したりする組み込みの方法がないように見えるため、ポーリングする必要があります。ManagementFactory.getThreadMXBean().getAllThreadIds().length だけでスレッド数を取得できます。もちろん、Bean にはさらに多くの情報があります。

最後に、「データベース接続」はあいまいです。どのデータベースシステムを使用していますか? 問題のJVMはサーバーまたはクライアントなどですか.

後者の 2 つのリソースに関する詳細情報が必要な場合は、新しい質問をすることをお勧めします。

于 2009-04-26T11:23:48.420 に答える
2

+1 マシューズの回答

しかし、Java 7.40 以降のユーザーがこれに出くわした場合、UI 指向のソリューションがあります。

これらのアラートを生成するには、Java Mission Control (JMC) を利用できます。

現在、JMC は Java ディストリビューションにパッケージ化されているため、JMC を呼び出して JMX リモート ポートに接続するだけです (この JVM がローカルの場合は、JMC を呼び出したときに既に接続されているはずです)。

最初の画面 (MBeanServer) で、一番下に [トリガー] タブが表示されます。ここをクリックすると、上記の 3 つの条件すべてに対して電子メール トリガーを設定できるはずです。

于 2015-08-25T21:38:53.973 に答える