2017-09-07 2 views
2

CPU負荷を監視する必要があるコードセクションがあります。次のコード行を使用してCPU負荷を取得します。サービスとして実行するとOperatingSystemMXBean.getSystemCpuLoadが動作しません

((com.sun.management.OperatingSystemMXBean) ManagementFactory 
    .getOperatingSystemMXBean()).getSystemCpuLoad(); 

テスト中は正常です。

として実行している2012年のWindowsサーバーに展開すると、getSystemCpuLoadは常に-1を返します。

サービスを停止してアプリケーションとして実行すると(2012年のWindow Serverマシン上でも)、サービスは再び動作します。

私はクラスパスの違いと環境変数の違いを見て、矛盾を見つけることはできません。

getSystemCpuLoadがアプリケーションで実行されているがサービスとして実行されていない理由を知っている人はいますか?

+0

これは、ネイティブコード[ここでは 'OperatingSystemImpl.c'](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/9d617cfd6717/src/windows/native/)を呼び出します。 sun/management/OperatingSystemImpl.c)、そこには 'return -1'があまりにも多くあります。 –

答えて

0

私はついにこの問題の原因を見つけました。他の誰かがこれに就いている場合:

"Performance Log Users"グループに対してサービスが実行されているユーザーを追加する必要がありました。ここに追加されると、私はシステムのCPU負荷を得ることができました。

関連する問題