[応用機能]パフォーマンス

アプリケーション開発において、リソースの使用率が必要とされる場合があります。

リソースの使用率を取得する機能を抽象化したのが、ResourceUsageです。
処理時間や数値の記録を行う機能を抽象化したのが、PerformanceRecorderです。

関連するパッケージは、以下です。

インタフェース ResourceUsage

インタフェースResourceUsageは、基本的にリソースの使用状況を判断する必要がある他のサービスが利用する下位機能である。

このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。

上位サービス用途
jp.ossc.nimbus.service.aop.invoker.MethodReflectionCallInvokerService呼び出し元にリソースの使用状況を提供するために使用する
jp.ossc.nimbus.service.proxy.invoker.LocalClientMethodCallInvokerService呼び出し元にリソースの使用状況を提供するために使用する
jp.ossc.nimbus.service.proxy.RemoteServiceServerService呼び出し元にリソースの使用状況を提供するために使用する
jp.ossc.nimbus.service.proxy.RemoteServiceServerSessionBean呼び出し元にリソースの使用状況を提供するために使用する
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerServerService分散された業務フローサーバに処理を振り分けるのに、呼び出し元にリソースの使用状況を提供するために使用する

ResourceUsageを使った簡単なアプリケーションのサンプルを示します。

  1. import jp.ossc.nimbus.core.ServiceManagerFactory;
  2. import jp.ossc.nimbus.service.performance.ResourceUsage;
  3. // ResourceUsageを取得
  4. ResourceUsage ru = (ResourceUsage)ServiceManagerFactory.getServiceObject("Sequence");
  5. // リソースの使用率を取得する
  6. Number usage = (Number)ru.getUsage();
  7. System.out.println(usage.doubleValue());

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.performance.CPUResourceUsageServiceCPUの使用率を取得する
jp.ossc.nimbus.service.performance.HeapMemoryResourceUsageServiceヒープメモリの使用率を取得する

インタフェース PerformanceRecorder

インタフェースPerformanceRecorderは、基本的に処理時間や数値の記録をする必要がある他のサービスが利用する下位機能である。

このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。

上位サービス用途
jp.ossc.nimbus.service.aop.interceptor.BeanFlowJournalMetricsInterceptorServiceジャーナルの出力量を記録するために使用する
jp.ossc.nimbus.service.aop.interceptor.BeanFlowMetricsInterceptorService業務フローの処理時間を記録するために使用する
jp.ossc.nimbus.service.aop.interceptor.MethodMetricsInterceptorServiceメソッドの処理時間を記録するために使用する
jp.ossc.nimbus.service.aop.interceptor.PerformanceRecordInterceptorServiceメソッドの処理時間を記録するために使用する
jp.ossc.nimbus.service.aop.interceptor.servlet.HttpServletRequestMetricsInterceptorServiceリクエストの処理時間を記録するために使用する
jp.ossc.nimbus.service.aop.interceptor.servlet.HttpServletResponseDeflateInterceptorService圧縮サイズや圧縮時間等を記録するために使用する
jp.ossc.nimbus.service.beancontrol.DefaultBeanFlowInvokerFactoryServiceジャーナルの出力量を記録するために使用する
jp.ossc.nimbus.service.publish.MessageReceiverServiceメッセージの到達のレイテンシーを記録するために使用する
jp.ossc.nimbus.service.http.httpclient.HttpClientFactoryServiceHTTPの通信時間を記録するために使用する
JDBCコネクションラッパーSQLの処理時間を記録するために使用する

PerformanceRecorderを使った簡単なアプリケーションのサンプルを示します。

  1. import jp.ossc.nimbus.core.ServiceManagerFactory;
  2. import jp.ossc.nimbus.service.performance.PerformanceRecorder;
  3. // PerformanceRecorderを取得
  4. PerformanceRecorder pr = (PerformanceRecorder)ServiceManagerFactory.getServiceObject("PerformanceRecorder");
  5. long startTime = System.currentTimeMillis();
  6. try{
  7. // 処理
  8. }finally{
  9. // 処理時間を記録する
  10. pr.record(startTime, System.currentTimeMillis());
  11. }
  12. long value = ...;
  13. // 何らかの処理量を記録する
  14. pr.recordValue(System.currentTimeMillis(), value);

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.performance.DefaultPerformanceRecorderService処理時間や処理量を定期的にサンプリングして出力する