この API ドキュメントでは、Spring Boot アクチュエーターの Web エンドポイントについて説明しています。
1. 概要
先に進む前に、次のトピックを読む必要があります。
以下に記載されている正しい JSON レスポンスを取得するには、Jackson が使用可能である必要があります。 |
1.1. URL
デフォルトでは、すべての Web エンドポイントは、/actuator/{id}
という形式の URL を持つパス /actuator
で使用可能です。/actuator
ベースパスは、次の例に示すように、management.endpoints.web.base-path
プロパティを使用して構成できます。
management.endpoints.web.base-path=/manage
上記の application.properties
の例は、エンドポイント URL の形式を /actuator/{id}
から /manage/{id}
に変更します。例: URL info
エンドポイントは /manage/info
になります。
1.2. タイムスタンプ
クエリパラメーターとして、またはリクエスト本文でエンドポイントによって消費されるすべてのタイムスタンプは、ISO 8601 [Wikipedia] (英語) で指定されたオフセット日時としてフォーマットする必要があります。
2. イベントの監査 (auditevents
)
auditevents
エンドポイントは、アプリケーションの監査イベントに関する情報を提供します。
2.1. 監査イベントの取得
監査イベントを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/auditevents
に作成します。
$ curl 'http://localhost:8080/actuator/auditevents?principal=alice&after=2022-03-31T13%3A35%3A04.206Z&type=logout' -i -X GET
前述の例では、UTC タイムゾーンで 2017 年 11 月 7 日に 09:37 の後に発生したプリンシパル alice
の logout
イベントを取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 121
{
"events" : [ {
"timestamp" : "2022-03-31T13:35:04.207Z",
"principal" : "alice",
"type" : "logout"
} ]
}
3. Bean (beans
)
beans
エンドポイントは、アプリケーションの Bean に関する情報を提供します。
3.1. Bean の取得
Bean を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/beans
に作成します。
$ curl 'http://localhost:8080/actuator/beans' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 1089
{
"contexts" : {
"application" : {
"beans" : {
"org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration" : {
"aliases" : [ ],
"scope" : "singleton",
"type" : "org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration",
"dependencies" : [ ]
},
"org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration" : {
"aliases" : [ ],
"scope" : "singleton",
"type" : "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration",
"dependencies" : [ ]
},
"org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration" : {
"aliases" : [ ],
"scope" : "singleton",
"type" : "org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration",
"dependencies" : [ ]
}
}
}
}
}
3.1.1. レスポンス構造
レスポンスには、アプリケーションの Bean の詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ID をキーとするアプリケーションコンテキスト。 |
|
| 親アプリケーションコンテキストの ID(存在する場合)。 |
|
| 名前をキーとするアプリケーションコンテキストの Bean。 |
|
| エイリアスの名前。 |
|
| Bean の範囲。 |
|
| Bean の完全修飾型。 |
|
| Bean が定義されたリソース(ある場合)。 |
|
| 依存関係の名前。 |
4. キャッシュ (caches
)
caches
エンドポイントは、アプリケーションのキャッシュへのアクセスを提供します。
4.1. すべてのキャッシュを取得する
アプリケーションのキャッシュを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/caches
に作成します。
$ curl 'http://localhost:8080/actuator/caches' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 435
{
"cacheManagers" : {
"anotherCacheManager" : {
"caches" : {
"countries" : {
"target" : "java.util.concurrent.ConcurrentHashMap"
}
}
},
"cacheManager" : {
"caches" : {
"cities" : {
"target" : "java.util.concurrent.ConcurrentHashMap"
},
"countries" : {
"target" : "java.util.concurrent.ConcurrentHashMap"
}
}
}
}
}
4.2. 名前によるキャッシュの取得
キャッシュを名前で取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/caches/{name}
に作成します。
$ curl 'http://localhost:8080/actuator/caches/cities' -i -X GET
上記の例では、cities
という名前のキャッシュに関する情報を取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 113
{
"target" : "java.util.concurrent.ConcurrentHashMap",
"name" : "cities",
"cacheManager" : "cacheManager"
}
4.3. すべてのキャッシュを削除する
使用可能なすべてのキャッシュをクリアするには、次の curl ベースの例に示すように、DELETE
を /actuator/caches
にリクエストします。
$ curl 'http://localhost:8080/actuator/caches' -i -X DELETE
5. 条件評価レポート (conditions
)
conditions
エンドポイントは、構成および自動構成クラスの条件の評価に関する情報を提供します。
5.1. レポートの取得
レポートを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/conditions
に作成します。
$ curl 'http://localhost:8080/actuator/conditions' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 3322
{
"contexts" : {
"application" : {
"positiveMatches" : {
"EndpointAutoConfiguration#endpointOperationParameterMapper" : [ {
"condition" : "OnBeanCondition",
"message" : "@ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.invoke.ParameterValueMapper; SearchStrategy: all) did not find any beans"
} ],
"EndpointAutoConfiguration#endpointCachingOperationInvokerAdvisor" : [ {
"condition" : "OnBeanCondition",
"message" : "@ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.invoker.cache.CachingOperationInvokerAdvisor; SearchStrategy: all) did not find any beans"
} ],
"WebEndpointAutoConfiguration" : [ {
"condition" : "OnWebApplicationCondition",
"message" : "@ConditionalOnWebApplication (required) found 'session' scope"
} ]
},
"negativeMatches" : {
"WebFluxEndpointManagementContextConfiguration" : {
"notMatched" : [ {
"condition" : "OnWebApplicationCondition",
"message" : "not a reactive web application"
} ],
"matched" : [ {
"condition" : "OnClassCondition",
"message" : "@ConditionalOnClass found required classes 'org.springframework.web.reactive.DispatcherHandler', 'org.springframework.http.server.reactive.HttpHandler'"
} ]
},
"GsonHttpMessageConvertersConfiguration.GsonHttpMessageConverterConfiguration" : {
"notMatched" : [ {
"condition" : "GsonHttpMessageConvertersConfiguration.PreferGsonOrJacksonAndJsonbUnavailableCondition",
"message" : "AnyNestedCondition 0 matched 2 did not; NestedCondition on GsonHttpMessageConvertersConfiguration.PreferGsonOrJacksonAndJsonbUnavailableCondition.JacksonJsonbUnavailable NoneNestedConditions 1 matched 1 did not; NestedCondition on GsonHttpMessageConvertersConfiguration.JacksonAndJsonbUnavailableCondition.JsonbPreferred @ConditionalOnProperty (spring.mvc.converters.preferred-json-mapper=jsonb) did not find property 'spring.mvc.converters.preferred-json-mapper'; NestedCondition on GsonHttpMessageConvertersConfiguration.JacksonAndJsonbUnavailableCondition.JacksonAvailable @ConditionalOnBean (types: org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; SearchStrategy: all) found bean 'mappingJackson2HttpMessageConverter'; NestedCondition on GsonHttpMessageConvertersConfiguration.PreferGsonOrJacksonAndJsonbUnavailableCondition.GsonPreferred @ConditionalOnProperty (spring.mvc.converters.preferred-json-mapper=gson) did not find property 'spring.mvc.converters.preferred-json-mapper'"
} ],
"matched" : [ ]
},
"WebMvcEndpointManagementContextConfiguration#managementHealthEndpointWebMvcHandlerMapping" : {
"notMatched" : [ {
"condition" : "OnManagementPortCondition",
"message" : "Management Port actual port type (SAME) did not match required type (DIFFERENT)"
} ],
"matched" : [ ]
}
},
"unconditionalClasses" : [ "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration", "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration" ]
}
}
}
5.1.1. レスポンス構造
レスポンスには、アプリケーションの条件評価の詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ID をキーとするアプリケーションコンテキスト。 |
|
| 一致した条件を持つクラスとメソッド。 |
|
| 条件の名前。 |
|
| 条件が一致した理由の詳細。 |
|
| 一致しなかった条件を持つクラスとメソッド。 |
|
| 一致した条件。 |
|
| 条件の名前。 |
|
| 条件が一致しなかった理由の詳細。 |
|
| 一致した条件。 |
|
| 条件の名前。 |
|
| 条件が一致した理由の詳細。 |
|
| 無条件の自動構成クラスの名前(ある場合)。 |
|
| 親アプリケーションコンテキストの ID(存在する場合)。 |
6. プロパティの構成 (configprops
)
configprops
エンドポイントは、アプリケーションの @ConfigurationProperties
Bean に関する情報を提供します。
6.1. すべての @ConfigurationProperties Bean の取得
すべての @ConfigurationProperties
Bean を取得するには、次のカールベースの例に示すように、/actuator/configprops
に対して GET
リクエストを作成します。
$ curl 'http://localhost:8080/actuator/configprops' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 3411
{
"contexts" : {
"application" : {
"beans" : {
"management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties" : {
"prefix" : "management.endpoints.web.cors",
"properties" : {
"allowedOrigins" : [ ],
"maxAge" : "PT30M",
"exposedHeaders" : [ ],
"allowedOriginPatterns" : [ ],
"allowedHeaders" : [ ],
"allowedMethods" : [ ]
},
"inputs" : {
"allowedOrigins" : [ ],
"maxAge" : { },
"exposedHeaders" : [ ],
"allowedOriginPatterns" : [ ],
"allowedHeaders" : [ ],
"allowedMethods" : [ ]
}
},
"management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties" : {
"prefix" : "management.endpoints.web",
"properties" : {
"pathMapping" : { },
"exposure" : {
"include" : [ "*" ],
"exclude" : [ ]
},
"basePath" : "/actuator",
"discovery" : {
"enabled" : true
}
},
"inputs" : {
"pathMapping" : { },
"exposure" : {
"include" : [ {
"value" : "*",
"origin" : "\"management.endpoints.web.exposure.include\" from property source \"Inlined Test Properties\""
} ],
"exclude" : [ ]
},
"basePath" : { },
"discovery" : {
"enabled" : { }
}
}
},
"spring.web-org.springframework.boot.autoconfigure.web.WebProperties" : {
"prefix" : "spring.web",
"properties" : {
"localeResolver" : "ACCEPT_HEADER",
"resources" : {
"staticLocations" : [ "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" ],
"addMappings" : true,
"chain" : {
"cache" : true,
"compressed" : false,
"strategy" : {
"fixed" : {
"enabled" : false,
"paths" : [ "/**" ]
},
"content" : {
"enabled" : false,
"paths" : [ "/**" ]
}
}
},
"cache" : {
"cachecontrol" : { },
"useLastModified" : true
}
}
},
"inputs" : {
"localeResolver" : { },
"resources" : {
"staticLocations" : [ { }, { }, { }, { } ],
"addMappings" : { },
"chain" : {
"cache" : { },
"compressed" : { },
"strategy" : {
"fixed" : {
"enabled" : { },
"paths" : [ { } ]
},
"content" : {
"enabled" : { },
"paths" : [ { } ]
}
}
},
"cache" : {
"cachecontrol" : { },
"useLastModified" : { }
}
}
}
}
}
}
}
}
6.1.1. レスポンス構造
レスポンスには、アプリケーションの @ConfigurationProperties
Bean の詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ID をキーとするアプリケーションコンテキスト。 |
|
|
|
|
| Bean のプロパティの名前に適用されるプレフィックス。 |
|
| 名前と値のペアとしての Bean のプロパティ。 |
|
| この Bean にバインドするときに使用される構成プロパティの起源と値。 |
|
| 親アプリケーションコンテキストの ID(存在する場合)。 |
6.2. プレフィックスによる @ConfigurationProperties Bean の取得
特定のプレフィックスにマップされた @ConfigurationProperties
Bean を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/configprops/{prefix}
に送信します。
$ curl 'http://localhost:8080/actuator/configprops/spring.jackson' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Disposition: inline;filename=f.txt
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 1215
{
"contexts" : {
"application" : {
"beans" : {
"spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties" : {
"prefix" : "spring.jackson",
"properties" : {
"serialization" : {
"INDENT_OUTPUT" : true
},
"defaultPropertyInclusion" : "NON_NULL",
"visibility" : { },
"parser" : { },
"deserialization" : { },
"generator" : { },
"mapper" : { }
},
"inputs" : {
"serialization" : {
"INDENT_OUTPUT" : {
"value" : "true",
"origin" : "\"spring.jackson.serialization.indent_output\" from property source \"Inlined Test Properties\""
}
},
"defaultPropertyInclusion" : {
"value" : "non_null",
"origin" : "\"spring.jackson.default-property-inclusion\" from property source \"Inlined Test Properties\""
},
"visibility" : { },
"parser" : { },
"deserialization" : { },
"generator" : { },
"mapper" : { }
}
}
}
}
}
}
{prefix} は正確である必要はありません。より一般的なプレフィックスは、そのプレフィックスステムにマップされたすべての Bean を返します。 |
6.2.1. レスポンス構造
レスポンスには、アプリケーションの @ConfigurationProperties
Bean の詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ID をキーとするアプリケーションコンテキスト。 |
|
|
|
|
| Bean のプロパティの名前に適用されるプレフィックス。 |
|
| 名前と値のペアとしての Bean のプロパティ。 |
|
| この Bean にバインドするときに使用される構成プロパティの起源と値。 |
|
| 親アプリケーションコンテキストの ID(存在する場合)。 |
7. 環境 (env
)
env
エンドポイントは、アプリケーションの Environment
に関する情報を提供します。
7.1. 環境全体を取得する
環境全体を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/env
に作成します。
$ curl 'http://localhost:8080/actuator/env' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 891
{
"activeProfiles" : [ ],
"propertySources" : [ {
"name" : "servletContextInitParams",
"properties" : { }
}, {
"name" : "systemProperties",
"properties" : {
"java.runtime.name" : {
"value" : "OpenJDK Runtime Environment"
},
"java.vm.version" : {
"value" : "25.322-b06"
},
"java.vm.vendor" : {
"value" : "Temurin"
}
}
}, {
"name" : "systemEnvironment",
"properties" : {
"JAVA_HOME" : {
"value" : "/opt/openjdk",
"origin" : "System Environment Property \"JAVA_HOME\""
}
}
}, {
"name" : "Config resource 'class path resource [application.properties]' via location 'classpath:/'",
"properties" : {
"com.example.cache.max-size" : {
"value" : "1000",
"origin" : "class path resource [application.properties] - 1:29"
}
}
} ]
}
7.1.1. レスポンス構造
レスポンスには、アプリケーションの Environment
の詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| アクティブなプロファイルの名前(ある場合)。 |
|
| 優先度順のプロパティソース。 |
|
| プロパティソースの名前。 |
|
| プロパティ名をキーとするプロパティソースのプロパティ。 |
|
| プロパティの値。 |
|
| プロパティの起源(ある場合)。 |
7.2. 単一のプロパティを取得する
単一のプロパティを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/env/{property.name}
に作成します。
$ curl 'http://localhost:8080/actuator/env/com.example.cache.max-size' -i -X GET
上記の例では、com.example.cache.max-size
という名前のプロパティに関する情報を取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Disposition: inline;filename=f.txt
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 564
{
"property" : {
"source" : "Config resource 'class path resource [application.properties]' via location 'classpath:/'",
"value" : "1000"
},
"activeProfiles" : [ ],
"propertySources" : [ {
"name" : "servletContextInitParams"
}, {
"name" : "systemProperties"
}, {
"name" : "systemEnvironment"
}, {
"name" : "Config resource 'class path resource [application.properties]' via location 'classpath:/'",
"property" : {
"value" : "1000",
"origin" : "class path resource [application.properties] - 1:29"
}
} ]
}
7.2.1. レスポンス構造
レスポンスには、リクエストされたプロパティの詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| 環境のプロパティ(見つかった場合)。 |
|
| プロパティのソースの名前。 |
|
| プロパティの値。 |
|
| アクティブなプロファイルの名前(ある場合)。 |
|
| 優先度順のプロパティソース。 |
|
| プロパティソースの名前。 |
|
| プロパティソース内のプロパティ(ある場合)。 |
|
| プロパティの値。 |
|
| プロパティの起源(ある場合)。 |
8. Flyway (flyway
)
flyway
エンドポイントは、Flyway によって実行されるデータベース移行に関する情報を提供します。
8.1. 移行の取得
移行を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/flyway
に作成します。
$ curl 'http://localhost:8080/actuator/flyway' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 515
{
"contexts" : {
"application" : {
"flywayBeans" : {
"flyway" : {
"migrations" : [ {
"type" : "SQL",
"checksum" : -156244537,
"version" : "1",
"description" : "init",
"script" : "V1__init.sql",
"state" : "SUCCESS",
"installedBy" : "SA",
"installedOn" : "2022-03-31T13:35:03.078Z",
"installedRank" : 1,
"executionTime" : 4
} ]
}
}
}
}
}
8.1.1. レスポンス構造
レスポンスには、アプリケーションの Flyway 移行の詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ID をキーとするアプリケーションコンテキスト |
|
| Flyway Bean 名をキーとする、Flyway インスタンスによって実行される移行。 |
|
| 移行のチェックサム(ある場合)。 |
|
| 移行の説明(ある場合)。 |
|
| 適用された移行のミリ秒単位の実行時間。 |
|
| 適用された移行をインストールしたユーザー(存在する場合)。 |
|
| 適用された移行がインストールされたときのタイムスタンプ(ある場合)。 |
|
| 適用された移行のランク(ある場合)。後の移行のランクは高くなります。 |
|
| 移行の実行に使用されるスクリプトの名前(ある場合)。 |
|
| 移行の状態。( |
|
| 移行の型。( |
|
| 移行を適用した後のデータベースのバージョン(ある場合)。 |
|
| 親アプリケーションコンテキストの ID(存在する場合)。 |
9. 状態 (health
)
health
エンドポイントは、アプリケーションの状態に関する詳細情報を提供します。
9.1. アプリケーションの健全性の取得
アプリケーションの正常性を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/health
に作成します。
$ curl 'http://localhost:8080/actuator/health' -i -X GET \
-H 'Accept: application/json'
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 704
{
"status" : "UP",
"components" : {
"broker" : {
"status" : "UP",
"components" : {
"us1" : {
"status" : "UP",
"details" : {
"version" : "1.0.2"
}
},
"us2" : {
"status" : "UP",
"details" : {
"version" : "1.0.4"
}
}
}
},
"db" : {
"status" : "UP",
"details" : {
"database" : "H2",
"validationQuery" : "isValid()"
}
},
"diskSpace" : {
"status" : "UP",
"details" : {
"total" : 325496897536,
"free" : 113233457152,
"threshold" : 10485760,
"exists" : true
}
}
}
}
9.1.1. レスポンス構造
レスポンスには、アプリケーションの正常性の詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| アプリケーションの全体的なステータス。 |
|
| 正常性を構成するコンポーネント。 |
|
| アプリケーションの特定の部分のステータス。 |
|
| 正常性を構成するネストされたコンポーネント。 |
|
| アプリケーションの特定の部分の正常性の詳細。存在は |
上記のレスポンスフィールドは V3 API 用です。V2 JSON を返す必要がある場合は、accept ヘッダーまたは application/vnd.spring-boot.actuator.v2+json を使用する必要があります |
9.2. コンポーネントの健全性の取得
アプリケーションのヘルスの特定のコンポーネントのヘルスを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/health/{component}
に送信します。
$ curl 'http://localhost:8080/actuator/health/db' -i -X GET \
-H 'Accept: application/json'
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 101
{
"status" : "UP",
"details" : {
"database" : "H2",
"validationQuery" : "isValid()"
}
}
9.3. ネストされたコンポーネントの健全性の取得
特定のコンポーネントに他のネストされたコンポーネントが含まれる場合(上記の例の broker
インジケーターとして)、次の curl ベースの例に示すように、GET
リクエストを /actuator/health/{component}/{subcomponent}
に発行することにより、そのようなネストされたコンポーネントのヘルスを取得できます:
$ curl 'http://localhost:8080/actuator/health/broker/us1' -i -X GET \
-H 'Accept: application/json'
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 66
{
"status" : "UP",
"details" : {
"version" : "1.0.2"
}
}
アプリケーションの正常性のコンポーネントは、アプリケーションの正常性インジケーターとそれらがどのようにグループ化されているかに応じて、任意の深さにネストできます。ヘルスエンドポイントは、URL で任意の数の /{component}
識別子をサポートし、任意の深さでコンポーネントのヘルスを取得できるようにします。
10. ヒープダンプ (heapdump
)
heapdump
エンドポイントは、アプリケーションの JVM からのヒープダンプを提供します。
10.1. ヒープダンプの取得
ヒープダンプを取得するには、/actuator/heapdump
に対して GET
リクエストを行います。レスポンスはバイナリデータであり、サイズが大きくなる場合があります。その形式は、アプリケーションが実行される JVM によって異なります。HotSpot JVM で実行している場合、形式は HPROF [Oracle] で、OpenJ9 の場合は PHD (英語) です。通常、レスポンスは後で分析できるようにディスクに保存する必要があります。curl を使用する場合、次の例に示すように、-O
オプションを使用してこれを実現できます。
$ curl 'http://localhost:8080/actuator/heapdump' -O
上記の例では、heapdump
という名前のファイルが現在の作業ディレクトリに書き込まれます。
11. HTTP トレース (httptrace
)
httptrace
エンドポイントは、HTTP リクエスト / レスポンス交換に関する情報を提供します。
11.1. トレースの取得
トレースを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/httptrace
に作成します。
$ curl 'http://localhost:8080/actuator/httptrace' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 503
{
"traces" : [ {
"timestamp" : "2022-03-31T13:35:06.002Z",
"principal" : {
"name" : "alice"
},
"session" : {
"id" : "fd710d4b-c284-4015-a5a3-2c4c930954c9"
},
"request" : {
"method" : "GET",
"uri" : "https://api.example.com",
"headers" : {
"Accept" : [ "application/json" ]
}
},
"response" : {
"status" : 200,
"headers" : {
"Content-Type" : [ "application/json" ]
}
},
"timeTaken" : 0
} ]
}
11.1.1. レスポンス構造
レスポンスには、トレースされた HTTP リクエストとレスポンスの交換の詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| トレースされた HTTP リクエスト / レスポンス交換の配列。 |
|
| トレースされた交換が発生したときのタイムスタンプ。 |
|
| 交換のプリンシパル(ある場合)。 |
|
| プリンシパルの名前。 |
|
| リクエストの HTTP メソッド。 |
|
| リクエストが受信されたリモートアドレス(わかっている場合)。 |
|
| リクエストの URI。 |
|
| ヘッダー名でキー付けされたリクエストのヘッダー。 |
|
| ヘッダーの値 |
|
| レスポンスのステータス |
|
| ヘッダー名でキー付けされたレスポンスのヘッダー。 |
|
| ヘッダーの値 |
|
| 交換に関連付けられたセッション(ある場合)。 |
|
| セッションの ID。 |
|
| 交換の処理にかかった時間(ミリ秒)。 |
12. 情報 (info
)
info
エンドポイントは、アプリケーションに関する一般情報を提供します。
12.1. 情報を取得する
アプリケーションに関する情報を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/info
に作成します。
$ curl 'http://localhost:8080/actuator/info' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 233
{
"git" : {
"commit" : {
"time" : "+54216-04-16T21:51:32Z",
"id" : "df027cf"
},
"branch" : "main"
},
"build" : {
"version" : "1.0.3",
"artifact" : "application",
"group" : "com.example"
}
}
12.1.1. レスポンス構造
レスポンスには、アプリケーションに関する一般情報が含まれています。レスポンスの各セクションは、InfoContributor
によって提供されます。Spring Boot は、build
および git
の貢献を提供します。
13. Spring Integration グラフ (integrationgraph
)
integrationgraph
エンドポイントは、すべての Spring Integration コンポーネントを含むグラフを公開します。
13.1. Spring Integration グラフの取得
アプリケーションに関する情報を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/integrationgraph
に作成します。
$ curl 'http://localhost:8080/actuator/integrationgraph' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 962
{
"contentDescriptor" : {
"providerVersion" : "5.5.10",
"providerFormatVersion" : 1.2,
"provider" : "spring-integration"
},
"nodes" : [ {
"nodeId" : 1,
"componentType" : "null-channel",
"integrationPatternType" : "null_channel",
"integrationPatternCategory" : "messaging_channel",
"properties" : { },
"name" : "nullChannel"
}, {
"nodeId" : 2,
"componentType" : "publish-subscribe-channel",
"integrationPatternType" : "publish_subscribe_channel",
"integrationPatternCategory" : "messaging_channel",
"properties" : { },
"name" : "errorChannel"
}, {
"nodeId" : 3,
"componentType" : "logging-channel-adapter",
"integrationPatternType" : "outbound_channel_adapter",
"integrationPatternCategory" : "messaging_endpoint",
"properties" : { },
"input" : "errorChannel",
"name" : "errorLogger"
} ],
"links" : [ {
"from" : 2,
"to" : 3,
"type" : "input"
} ]
}
13.1.1. レスポンス構造
レスポンスには、アプリケーション内で使用されるすべての Spring Integration コンポーネントとそれらの間のリンクが含まれます。構造の詳細については、リファレンスドキュメントを参照してください。
14. Liquibase (liquibase
)
liquibase
エンドポイントは、Liquibase によって適用されるデータベース変更セットに関する情報を提供します。
14.1. 変更を取得する
変更を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/liquibase
に作成します。
$ curl 'http://localhost:8080/actuator/liquibase' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 677
{
"contexts" : {
"application" : {
"liquibaseBeans" : {
"liquibase" : {
"changeSets" : [ {
"author" : "marceloverdijk",
"changeLog" : "db/changelog/db.changelog-master.yaml",
"comments" : "",
"contexts" : [ ],
"dateExecuted" : "2022-03-31T13:34:59.156Z",
"deploymentId" : "8733698982",
"description" : "createTable tableName=customer",
"execType" : "EXECUTED",
"id" : "1",
"labels" : [ ],
"checksum" : "8:46debf252cce6d7b25e28ddeb9fc4bf6",
"orderExecuted" : 1
} ]
}
}
}
}
}
14.1.1. レスポンス構造
レスポンスには、アプリケーションの Liquibase 変更セットの詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ID をキーとするアプリケーションコンテキスト |
|
| Bean 名をキーとする Liquibase Bean によって行われた変更セット。 |
|
| 変更セットの作成者。 |
|
| 変更セットを含む変更ログ。 |
|
| 変更セットに関するコメント。 |
|
| 変更セットのコンテキスト。 |
|
| 変更セットが実行されたときのタイムスタンプ。 |
|
| 変更セットを実行したデプロイの ID。 |
|
| 変更セットの説明。 |
|
| 変更セットの実行型( |
|
| 変更セットの ID。 |
|
| 変更セットに関連付けられたラベル。 |
|
| 変更セットのチェックサム。 |
|
| 変更セットの実行順序。 |
|
| 変更セットに関連付けられているタグ(ある場合)。 |
|
| 親アプリケーションコンテキストの ID(存在する場合)。 |
15. ログファイル (logfile
)
logfile
エンドポイントは、アプリケーションのログファイルのコンテンツへのアクセスを提供します。
15.1. ログファイルの取得
ログファイルを取得するには、次の curl ベースの例に示すように、GET
を /actuator/logfile
にリクエストします。
$ curl 'http://localhost:8080/actuator/logfile' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/plain;charset=UTF-8
Content-Length: 4723
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::
2017-08-08 17:12:30.910 INFO 19866 --- [ main] s.f.SampleWebFreeMarkerApplication : Starting SampleWebFreeMarkerApplication on host.local with PID 19866
2017-08-08 17:12:30.913 INFO 19866 --- [ main] s.f.SampleWebFreeMarkerApplication : No active profile set, falling back to default profiles: default
2017-08-08 17:12:30.952 INFO 19866 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@76b10754: startup date [Tue Aug 08 17:12:30 BST 2017]; root of context hierarchy
2017-08-08 17:12:31.878 INFO 19866 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2017-08-08 17:12:31.889 INFO 19866 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2017-08-08 17:12:31.890 INFO 19866 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.16
2017-08-08 17:12:31.978 INFO 19866 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-08-08 17:12:31.978 INFO 19866 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1028 ms
2017-08-08 17:12:32.080 INFO 19866 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-08-08 17:12:32.084 INFO 19866 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-08-08 17:12:32.084 INFO 19866 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-08-08 17:12:32.084 INFO 19866 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-08-08 17:12:32.084 INFO 19866 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-08-08 17:12:32.349 INFO 19866 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@76b10754: startup date [Tue Aug 08 17:12:30 BST 2017]; root of context hierarchy
2017-08-08 17:12:32.420 INFO 19866 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-08-08 17:12:32.421 INFO 19866 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-08-08 17:12:32.444 INFO 19866 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-08-08 17:12:32.444 INFO 19866 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-08-08 17:12:32.471 INFO 19866 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-08-08 17:12:32.600 INFO 19866 --- [ main] o.s.w.s.v.f.FreeMarkerConfigurer : ClassTemplateLoader for Spring macros added to FreeMarker configuration
2017-08-08 17:12:32.681 INFO 19866 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2017-08-08 17:12:32.744 INFO 19866 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http)
2017-08-08 17:12:32.750 INFO 19866 --- [ main] s.f.SampleWebFreeMarkerApplication : Started SampleWebFreeMarkerApplication in 2.172 seconds (JVM running for 2.479)
15.2. ログファイルの一部を取得する
Jersey を使用する場合、ログファイルの一部の取得はサポートされていません。 |
ログファイルの一部を取得するには、次の curl ベースの例に示すように、Range
ヘッダーを使用して GET
リクエストを /actuator/logfile
に作成します。
$ curl 'http://localhost:8080/actuator/logfile' -i -X GET \
-H 'Range: bytes=0-1023'
上記の例は、ログファイルの最初の 1024 バイトを取得します。結果のレスポンスは次のようになります。
HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Type: text/plain;charset=UTF-8
Content-Range: bytes 0-1023/4723
Content-Length: 1024
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::
2017-08-08 17:12:30.910 INFO 19866 --- [ main] s.f.SampleWebFreeMarkerApplication : Starting SampleWebFreeMarkerApplication on host.local with PID 19866
2017-08-08 17:12:30.913 INFO 19866 --- [ main] s.f.SampleWebFreeMarkerApplication : No active profile set, falling back to default profiles: default
2017-08-08 17:12:30.952 INFO 19866 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@76b10754: startup date [Tue Aug 08 17:12:30 BST 2017]; root of context hierarchy
2017-08-08 17:12:31.878 INFO 19866 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(
16. ロガー (loggers
)
loggers
エンドポイントは、アプリケーションのロガーおよびそのレベルの構成へのアクセスを提供します。
16.1. すべてのロガーの取得
アプリケーションのロガーを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/loggers
に作成します。
$ curl 'http://localhost:8080/actuator/loggers' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 791
{
"levels" : [ "OFF", "FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE" ],
"loggers" : {
"ROOT" : {
"configuredLevel" : "INFO",
"effectiveLevel" : "INFO"
},
"com.example" : {
"configuredLevel" : "DEBUG",
"effectiveLevel" : "DEBUG"
}
},
"groups" : {
"test" : {
"configuredLevel" : "INFO",
"members" : [ "test.member1", "test.member2" ]
},
"web" : {
"members" : [ "org.springframework.core.codec", "org.springframework.http", "org.springframework.web", "org.springframework.boot.actuate.endpoint.web", "org.springframework.boot.web.servlet.ServletContextInitializerBeans" ]
},
"sql" : {
"members" : [ "org.springframework.jdbc.core", "org.hibernate.SQL", "org.jooq.tools.LoggerListener" ]
}
}
}
16.1.1. レスポンス構造
レスポンスには、アプリケーションのロガーの詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ロギングシステムによるレベルのサポート。 |
|
| 名前をキーとするロガー。 |
|
| 名前をキーとするロガーグループ |
|
| ロガーの構成レベル(ある場合)。 |
|
| ロガーの有効レベル。 |
|
| ロガーグループの設定レベル(ある場合)。 |
|
| このグループの一部であるロガー |
16.2. 単一のロガーの取得
単一のロガーを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/loggers/{logger.name}
に作成します。
$ curl 'http://localhost:8080/actuator/loggers/com.example' -i -X GET
上記の例では、com.example
というロガーに関する情報を取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Disposition: inline;filename=f.txt
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 61
{
"configuredLevel" : "INFO",
"effectiveLevel" : "INFO"
}
16.3. 単一グループの取得
単一のグループを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/loggers/{group.name}
に作成します。
$ curl 'http://localhost:8080/actuator/loggers/test' -i -X GET
上記の例は、test
という名前のロガーグループに関する情報を取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 82
{
"configuredLevel" : "INFO",
"members" : [ "test.member1", "test.member2" ]
}
16.4. ログレベルの設定
ロガーのレベルを設定するには、次の curl ベースの例に示すように、ロガーに設定されたレベルを指定する JSON 本文を使用して、POST
を /actuator/loggers/{logger.name}
にリクエストします。
$ curl 'http://localhost:8080/actuator/loggers/com.example' -i -X POST \
-H 'Content-Type: application/json' \
-d '{"configuredLevel":"debug"}'
上記の例では、com.example
ロガーの configuredLevel
を DEBUG
に設定します。
16.5. グループのログレベルの設定
ロガーのレベルを設定するには、次の curl ベースの例に示すように、ロガーグループに設定されたレベルを指定する JSON ボディを使用して、POST
を /actuator/loggers/{group.name}
にリクエストします。
$ curl 'http://localhost:8080/actuator/loggers/test' -i -X POST \
-H 'Content-Type: application/json' \
-d '{"configuredLevel":"debug"}'
上記の例では、test
ロガーグループの configuredLevel
を DEBUG
に設定します。
17. マッピング (mappings
)
mappings
エンドポイントは、アプリケーションのリクエストマッピングに関する情報を提供します。
17.1. マッピングの取得
マッピングを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/mappings
に作成します。
$ curl 'http://localhost:36903/actuator/mappings' -i -X GET \
-H 'accept-encoding: gzip' \
-H 'user-agent: ReactorNetty/1.0.17' \
-H 'accept: */*'
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Transfer-Encoding: chunked
Date: Thu, 31 Mar 2022 13:34:53 GMT
Content-Length: 5339
{
"contexts" : {
"application" : {
"mappings" : {
"dispatcherServlets" : {
"dispatcherServlet" : [ {
"handler" : "Actuator root web endpoint",
"predicate" : "{GET [/actuator], produces [application/vnd.spring-boot.actuator.v3+json || application/vnd.spring-boot.actuator.v2+json || application/json]}",
"details" : {
"handlerMethod" : {
"className" : "org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping.WebMvcLinksHandler",
"name" : "links",
"descriptor" : "(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Ljava/lang/Object;"
},
"requestMappingConditions" : {
"consumes" : [ ],
"headers" : [ ],
"methods" : [ "GET" ],
"params" : [ ],
"patterns" : [ "/actuator" ],
"produces" : [ {
"mediaType" : "application/vnd.spring-boot.actuator.v3+json",
"negated" : false
}, {
"mediaType" : "application/vnd.spring-boot.actuator.v2+json",
"negated" : false
}, {
"mediaType" : "application/json",
"negated" : false
} ]
}
}
}, {
"handler" : "Actuator web endpoint 'mappings'",
"predicate" : "{GET [/actuator/mappings], produces [application/vnd.spring-boot.actuator.v3+json || application/vnd.spring-boot.actuator.v2+json || application/json]}",
"details" : {
"handlerMethod" : {
"className" : "org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping.OperationHandler",
"name" : "handle",
"descriptor" : "(Ljavax/servlet/http/HttpServletRequest;Ljava/util/Map;)Ljava/lang/Object;"
},
"requestMappingConditions" : {
"consumes" : [ ],
"headers" : [ ],
"methods" : [ "GET" ],
"params" : [ ],
"patterns" : [ "/actuator/mappings" ],
"produces" : [ {
"mediaType" : "application/vnd.spring-boot.actuator.v3+json",
"negated" : false
}, {
"mediaType" : "application/vnd.spring-boot.actuator.v2+json",
"negated" : false
}, {
"mediaType" : "application/json",
"negated" : false
} ]
}
}
}, {
"handler" : "org.springframework.boot.actuate.autoconfigure.endpoint.web.documentation.MappingsEndpointServletDocumentationTests$ExampleController#example()",
"predicate" : "{POST [/], params [a!=alpha], headers [X-Custom=Foo], consumes [application/json || !application/xml], produces [text/plain]}",
"details" : {
"handlerMethod" : {
"className" : "org.springframework.boot.actuate.autoconfigure.endpoint.web.documentation.MappingsEndpointServletDocumentationTests.ExampleController",
"name" : "example",
"descriptor" : "()Ljava/lang/String;"
},
"requestMappingConditions" : {
"consumes" : [ {
"mediaType" : "application/json",
"negated" : false
}, {
"mediaType" : "application/xml",
"negated" : true
} ],
"headers" : [ {
"name" : "X-Custom",
"value" : "Foo",
"negated" : false
} ],
"methods" : [ "POST" ],
"params" : [ {
"name" : "a",
"value" : "alpha",
"negated" : true
} ],
"patterns" : [ "/" ],
"produces" : [ {
"mediaType" : "text/plain",
"negated" : false
} ]
}
}
}, {
"handler" : "ResourceHttpRequestHandler [classpath [META-INF/resources/webjars/]]",
"predicate" : "/webjars/**"
}, {
"handler" : "ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]",
"predicate" : "/**"
} ]
},
"servletFilters" : [ {
"servletNameMappings" : [ ],
"urlPatternMappings" : [ "/*" ],
"name" : "requestContextFilter",
"className" : "org.springframework.boot.web.servlet.filter.OrderedRequestContextFilter"
}, {
"servletNameMappings" : [ ],
"urlPatternMappings" : [ "/*" ],
"name" : "formContentFilter",
"className" : "org.springframework.boot.web.servlet.filter.OrderedFormContentFilter"
} ],
"servlets" : [ {
"mappings" : [ "/" ],
"name" : "dispatcherServlet",
"className" : "org.springframework.web.servlet.DispatcherServlet"
} ]
}
}
}
}
17.1.1. レスポンス構造
レスポンスには、アプリケーションのマッピングの詳細が含まれます。レスポンスで見つかった項目は、Web アプリケーションの型(リアクティブまたはサーブレットベース)によって異なります。次の表に、レスポンスの一般的な要素の構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ID をキーとするアプリケーションコンテキスト。 |
|
| マッピング型によってキー設定されたコンテキスト内のマッピング。 |
|
| ディスパッチャーサーブレットマッピング(ある場合)。 |
|
| サーブレットフィルターマッピング(ある場合)。 |
|
| サーブレットマッピング(ある場合)。 |
|
| ディスパッチャーハンドラーマッピング(ある場合)。 |
|
| 親アプリケーションコンテキストの ID(存在する場合)。 |
contexts.*.mappings
で見つかる可能性のあるエントリについては、次のセクションで説明します。
17.1.2. ディスパッチャーサーブレットのレスポンス構造
Spring MVC を使用する場合、レスポンスには contexts.*.mappings.dispatcherServlets
にあるすべての DispatcherServlet
リクエストマッピングの詳細が含まれます。次の表は、レスポンスのこのセクションの構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| ディスパッチャーサーブレットマッピング(ある場合)は、ディスパッチャーサーブレット Bean 名によってキー設定されます。 |
|
| マッピングに関する追加の実装固有の詳細。オプション。 |
|
| マッピングのハンドラー。 |
|
| マッピングの述語。 |
|
| このマッピングへのリクエストを処理するメソッドの詳細(ある場合)。 |
|
| メソッドのクラスの完全修飾名。 |
|
| メソッドの名前。 |
|
| Java 言語仕様で指定されているメソッドの記述子。 |
|
| リクエストマッピング条件の詳細。 |
|
| 消費状態の詳細 |
|
| 消費されたメディア型。 |
|
| メディア型が否定されるかどうか。 |
|
| ヘッダー条件の詳細。 |
|
| ヘッダーの名前。 |
|
| ヘッダーの必須値(ある場合)。 |
|
| 値が否定されるかどうか。 |
|
| 処理される HTTP メソッド。 |
|
| params 条件の詳細。 |
|
| パラメーターの名前。 |
|
| パラメーターの必須値(ある場合)。 |
|
| 値が否定されるかどうか。 |
|
| マッピングによって処理されるパスを識別するパターン。 |
|
| 生産条件の詳細。 |
|
| 作成されたメディア型。 |
|
| メディア型が否定されるかどうか。 |
17.1.3. サーブレットのレスポンス構造
サーブレットスタックを使用する場合、レスポンスには contexts.*.mappings.servlets
の Servlet
マッピングの詳細が含まれます。次の表に、レスポンスのこのセクションの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| サーブレットのマッピング。 |
|
| サーブレットの名前。 |
|
| サーブレットのクラス名 |
17.1.4. サーブレットフィルターのレスポンス構造
サーブレットスタックを使用する場合、レスポンスには contexts.*.mappings.servletFilters
の Filter
マッピングの詳細が含まれます。次の表に、レスポンスのこのセクションの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| フィルターがマップされるサーブレットの名前。 |
|
| フィルターがマップされる URL パターン。 |
|
| フィルターの名前。 |
|
| フィルターのクラス名 |
17.1.5. ディスパッチャーハンドラーのレスポンス構造
Spring WebFlux を使用する場合、レスポンスには contexts.*.mappings.dispatcherHandlers
の DispatcherHandler
リクエストマッピングの詳細が含まれます。次の表に、レスポンスのこのセクションの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| ディスパッチャーハンドラー Bean 名をキーとするディスパッチャーハンドラーマッピング(ある場合)。 |
|
| マッピングに関する追加の実装固有の詳細。オプション。 |
|
| マッピングのハンドラー。 |
|
| マッピングの述語。 |
|
| リクエストマッピング条件の詳細。 |
|
| 消費状態の詳細 |
|
| 消費されたメディア型。 |
|
| メディア型が否定されるかどうか。 |
|
| ヘッダー条件の詳細。 |
|
| ヘッダーの名前。 |
|
| ヘッダーの必須値(ある場合)。 |
|
| 値が否定されるかどうか。 |
|
| 処理される HTTP メソッド。 |
|
| params 条件の詳細。 |
|
| パラメーターの名前。 |
|
| パラメーターの必須値(ある場合)。 |
|
| 値が否定されるかどうか。 |
|
| マッピングによって処理されるパスを識別するパターン。 |
|
| 生産条件の詳細。 |
|
| 作成されたメディア型。 |
|
| メディア型が否定されるかどうか。 |
|
| このマッピングへのリクエストを処理するメソッドの詳細(ある場合)。 |
|
| メソッドのクラスの完全修飾名。 |
|
| メソッドの名前。 |
|
| Java 言語仕様で指定されているメソッドの記述子。 |
|
| このマッピングへのリクエストを処理する関数の詳細(ある場合)。 |
|
| 関数のクラスの完全修飾名。 |
18. メトリクス (metrics
)
metrics
エンドポイントは、アプリケーションメトリクスへのアクセスを提供します。
18.1. メトリクス名の取得
使用可能なメトリクスの名前を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/metrics
に作成します。
$ curl 'http://localhost:8080/actuator/metrics' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 154
{
"names" : [ "jvm.buffer.count", "jvm.buffer.memory.used", "jvm.buffer.total.capacity", "jvm.memory.committed", "jvm.memory.max", "jvm.memory.used" ]
}
18.2. メトリクスの取得
メトリクスを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/metrics/{metric.name}
に作成します。
$ curl 'http://localhost:8080/actuator/metrics/jvm.memory.max' -i -X GET
上記の例は、jvm.memory.max
という名前のメトリクスに関する情報を取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Disposition: inline;filename=f.txt
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 474
{
"name" : "jvm.memory.max",
"description" : "The maximum amount of memory in bytes that can be used for memory management",
"baseUnit" : "bytes",
"measurements" : [ {
"statistic" : "VALUE",
"value" : 2.354053119E9
} ],
"availableTags" : [ {
"tag" : "area",
"values" : [ "heap", "nonheap" ]
}, {
"tag" : "id",
"values" : [ "Compressed Class Space", "PS Old Gen", "PS Survivor Space", "Metaspace", "PS Eden Space", "Code Cache" ]
} ]
}
18.2.1. クエリパラメーター
エンドポイントは、クエリパラメーターを使用して、タグを使用してメトリクスにドリルダウンします。次の表に、サポートされている単一のクエリパラメーターを示します。
パラメーター | 説明 |
---|---|
|
|
18.2.2. レスポンス構造
レスポンスには、メトリクスの詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| メトリクスの名前 |
|
| メトリクスの説明 |
|
| メトリクスの基本単位 |
|
| メトリクスの測定 |
|
| 測定の統計。( |
|
| 測定値。 |
|
| ドリルダウンに使用できるタグ。 |
|
| タグの名前。 |
|
| タグの可能な値。 |
18.3. ドリルダウン
メトリクスにドリルダウンするには、次の curl ベースの例に示すように、tag
クエリパラメーターを使用して GET
リクエストを /actuator/metrics/{metric.name}
に作成します。
$ curl 'http://localhost:8080/actuator/metrics/jvm.memory.max?tag=area%3Anonheap&tag=id%3ACompressed+Class+Space' -i -X GET
上記の例では、jvm.memory.max
メトリクスを取得します。area
タグの値は nonheap
で、id
属性の値は Compressed Class Space
です。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Disposition: inline;filename=f.txt
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 263
{
"name" : "jvm.memory.max",
"description" : "The maximum amount of memory in bytes that can be used for memory management",
"baseUnit" : "bytes",
"measurements" : [ {
"statistic" : "VALUE",
"value" : 1.073741824E9
} ],
"availableTags" : [ ]
}
19. Prometheus (prometheus
)
prometheus
エンドポイントは、Spring Boot アプリケーションのメトリクスを、Prometheus サーバーによるスクレイピングに必要な形式で提供します。
19.1. すべてのメトリクスの取得
すべてのメトリクスを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/prometheus
に送信します。
$ curl 'http://localhost:8080/actuator/prometheus' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: text/plain;version=0.0.4;charset=utf-8
Content-Length: 2374
# HELP jvm_memory_used_bytes The amount of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{area="heap",id="PS Survivor Space",} 2.5432952E7
jvm_memory_used_bytes{area="heap",id="PS Old Gen",} 1.18250408E8
jvm_memory_used_bytes{area="heap",id="PS Eden Space",} 1.56371304E8
jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 1.5036196E8
jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 5.7034496E7
jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 2.1919864E7
# HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use
# TYPE jvm_memory_committed_bytes gauge
jvm_memory_committed_bytes{area="heap",id="PS Survivor Space",} 5.6623104E7
jvm_memory_committed_bytes{area="heap",id="PS Old Gen",} 6.16562688E8
jvm_memory_committed_bytes{area="heap",id="PS Eden Space",} 2.40123904E8
jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 1.6809984E8
jvm_memory_committed_bytes{area="nonheap",id="Code Cache",} 5.7737216E7
jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 2.5493504E7
# HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool
# TYPE jvm_buffer_total_capacity_bytes gauge
jvm_buffer_total_capacity_bytes{id="direct",} 465142.0
jvm_buffer_total_capacity_bytes{id="mapped",} 0.0
# HELP jvm_buffer_memory_used_bytes An estimate of the memory that the Java virtual machine is using for this buffer pool
# TYPE jvm_buffer_memory_used_bytes gauge
jvm_buffer_memory_used_bytes{id="direct",} 465143.0
jvm_buffer_memory_used_bytes{id="mapped",} 0.0
# HELP jvm_buffer_count_buffers An estimate of the number of buffers in the pool
# TYPE jvm_buffer_count_buffers gauge
jvm_buffer_count_buffers{id="direct",} 14.0
jvm_buffer_count_buffers{id="mapped",} 0.0
# HELP jvm_memory_max_bytes The maximum amount of memory in bytes that can be used for memory management
# TYPE jvm_memory_max_bytes gauge
jvm_memory_max_bytes{area="heap",id="PS Survivor Space",} 5.6623104E7
jvm_memory_max_bytes{area="heap",id="PS Old Gen",} 7.16177408E8
jvm_memory_max_bytes{area="heap",id="PS Eden Space",} 2.43269632E8
jvm_memory_max_bytes{area="nonheap",id="Metaspace",} -1.0
jvm_memory_max_bytes{area="nonheap",id="Code Cache",} 2.5165824E8
jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space",} 1.073741824E9
デフォルトのレスポンスコンテンツ型は text/plain;version=0.0.4
です。次のカールベースの例に示すように、適切な Accept
ヘッダーを使用して呼び出された場合、エンドポイントは application/openmetrics-text;version=1.0.0
を生成することもできます。
$ curl 'http://localhost:8080/actuator/prometheus' -i -X GET \
-H 'Accept: application/openmetrics-text; version=1.0.0; charset=utf-8'
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/openmetrics-text;version=1.0.0;charset=utf-8
Content-Length: 2356
# TYPE jvm_memory_used_bytes gauge
# HELP jvm_memory_used_bytes The amount of used memory
jvm_memory_used_bytes{area="heap",id="PS Survivor Space"} 2.5432952E7
jvm_memory_used_bytes{area="heap",id="PS Old Gen"} 1.18250408E8
jvm_memory_used_bytes{area="heap",id="PS Eden Space"} 1.51811664E8
jvm_memory_used_bytes{area="nonheap",id="Metaspace"} 1.5033436E8
jvm_memory_used_bytes{area="nonheap",id="Code Cache"} 5.7007936E7
jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space"} 2.1915976E7
# TYPE jvm_memory_committed_bytes gauge
# HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use
jvm_memory_committed_bytes{area="heap",id="PS Survivor Space"} 5.6623104E7
jvm_memory_committed_bytes{area="heap",id="PS Old Gen"} 6.16562688E8
jvm_memory_committed_bytes{area="heap",id="PS Eden Space"} 2.40123904E8
jvm_memory_committed_bytes{area="nonheap",id="Metaspace"} 1.6809984E8
jvm_memory_committed_bytes{area="nonheap",id="Code Cache"} 5.7737216E7
jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space"} 2.5493504E7
# TYPE jvm_buffer_total_capacity_bytes gauge
# HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool
jvm_buffer_total_capacity_bytes{id="direct"} 465142.0
jvm_buffer_total_capacity_bytes{id="mapped"} 0.0
# TYPE jvm_buffer_memory_used_bytes gauge
# HELP jvm_buffer_memory_used_bytes An estimate of the memory that the Java virtual machine is using for this buffer pool
jvm_buffer_memory_used_bytes{id="direct"} 465143.0
jvm_buffer_memory_used_bytes{id="mapped"} 0.0
# TYPE jvm_buffer_count_buffers gauge
# HELP jvm_buffer_count_buffers An estimate of the number of buffers in the pool
jvm_buffer_count_buffers{id="direct"} 14.0
jvm_buffer_count_buffers{id="mapped"} 0.0
# TYPE jvm_memory_max_bytes gauge
# HELP jvm_memory_max_bytes The maximum amount of memory in bytes that can be used for memory management
jvm_memory_max_bytes{area="heap",id="PS Survivor Space"} 5.6623104E7
jvm_memory_max_bytes{area="heap",id="PS Old Gen"} 7.16177408E8
jvm_memory_max_bytes{area="heap",id="PS Eden Space"} 2.43269632E8
jvm_memory_max_bytes{area="nonheap",id="Metaspace"} -1.0
jvm_memory_max_bytes{area="nonheap",id="Code Cache"} 2.5165824E8
jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space"} 1.073741824E9
# EOF
19.2. フィルタリングされたメトリクスの取得
特定の名前に一致するメトリクスを取得するには、次のカールベースの例に示すように、includedNames
クエリパラメーターを使用して GET
リクエストを /actuator/prometheus
に送信します。
$ curl 'http://localhost:8080/actuator/prometheus?includedNames=jvm_memory_used_bytes%2Cjvm_memory_committed_bytes' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: text/plain;version=0.0.4;charset=utf-8
Content-Length: 1108
# HELP jvm_memory_used_bytes The amount of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{area="heap",id="PS Survivor Space",} 2.5432952E7
jvm_memory_used_bytes{area="heap",id="PS Old Gen",} 1.18250408E8
jvm_memory_used_bytes{area="heap",id="PS Eden Space",} 1.56371304E8
jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 1.5037696E8
jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 5.705024E7
jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 2.192156E7
# HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use
# TYPE jvm_memory_committed_bytes gauge
jvm_memory_committed_bytes{area="heap",id="PS Survivor Space",} 5.6623104E7
jvm_memory_committed_bytes{area="heap",id="PS Old Gen",} 6.16562688E8
jvm_memory_committed_bytes{area="heap",id="PS Eden Space",} 2.40123904E8
jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 1.6809984E8
jvm_memory_committed_bytes{area="nonheap",id="Code Cache",} 5.7737216E7
jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 2.5493504E7
20. Quartz (quartz
)
quartz
エンドポイントは、Quartz スケジューラによって管理されるジョブとトリガーに関する情報を提供します。
20.1. 登録済みグループの取得
ジョブとトリガーはグループで管理されます。登録されたジョブとトリガーグループのリストを取得するには、次の curl ベースの例に示すように、/actuator/quartz
に GET
リクエストを送信します。
$ curl 'http://localhost:8080/actuator/quartz' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 120
{
"jobs" : {
"groups" : [ "samples", "tests" ]
},
"triggers" : {
"groups" : [ "samples", "DEFAULT" ]
}
}
20.2. 登録されたジョブ名の取得
登録されたジョブ名のリストを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/quartz/jobs
に送信します。
$ curl 'http://localhost:8080/actuator/quartz/jobs' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 137
{
"groups" : {
"samples" : {
"jobs" : [ "jobOne", "jobTwo" ]
},
"tests" : {
"jobs" : [ "jobThree" ]
}
}
}
20.3. 登録されたトリガー名の取得
登録されたトリガー名のリストを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/quartz/triggers
に送信します。
$ curl 'http://localhost:8080/actuator/quartz/triggers' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 229
{
"groups" : {
"samples" : {
"paused" : false,
"triggers" : [ "3am-weekdays", "every-day", "once-a-week" ]
},
"DEFAULT" : {
"paused" : false,
"triggers" : [ "every-hour-tue-thu" ]
}
}
}
20.4. ジョブグループの概要の取得
特定のグループ内のジョブの概要を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/quartz/jobs/{groupName}
に送信します。
$ curl 'http://localhost:8080/actuator/quartz/jobs/samples' -i -X GET
前述の例では、samples
グループ内のジョブの概要を取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 201
{
"group" : "samples",
"jobs" : {
"jobOne" : {
"className" : "org.springframework.scheduling.quartz.DelegatingJob"
},
"jobTwo" : {
"className" : "org.quartz.Job"
}
}
}
20.5. トリガーグループの概要を取得する
特定のグループ内のトリガーの概要を取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/quartz/triggers/{groupName}
に送信します。
$ curl 'http://localhost:8080/actuator/quartz/triggers/tests' -i -X GET
前述の例では、tests
グループ内のトリガーの概要を取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 1268
{
"group" : "tests",
"paused" : false,
"triggers" : {
"cron" : {
"3am-week" : {
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 3,
"expression" : "0 0 3 ? * 1,2,3,4,5",
"timeZone" : "Europe/Paris"
}
},
"simple" : {
"every-day" : {
"nextFireTime" : "2020-12-04T12:00:00.000+00:00",
"priority" : 7,
"interval" : 86400000
}
},
"dailyTimeInterval" : {
"tue-thu" : {
"priority" : 5,
"interval" : 3600000,
"daysOfWeek" : [ 3, 5 ],
"startTimeOfDay" : "09:00:00",
"endTimeOfDay" : "18:00:00"
}
},
"calendarInterval" : {
"once-a-week" : {
"previousFireTime" : "2020-12-02T14:00:00.000+00:00",
"nextFireTime" : "2020-12-08T14:00:00.000+00:00",
"priority" : 5,
"interval" : 604800000,
"timeZone" : "Etc/UTC"
}
},
"custom" : {
"once-a-year-custom" : {
"previousFireTime" : "2020-07-14T16:00:00.000+00:00",
"nextFireTime" : "2021-07-14T16:00:00.000+00:00",
"priority" : 10,
"trigger" : "com.example.CustomTrigger@fdsfsd"
}
}
}
}
20.5.1. レスポンス構造
レスポンスには、特定のグループのトリガーの概要が含まれます。トリガー実装固有の詳細が利用可能です。次の表は、レスポンスの構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| グループの名前。 |
|
| グループが一時停止されているかどうか。 |
|
| 名前でキー指定された Cron トリガー (存在する場合)。 |
|
| 名前でキー指定された単純なトリガー(存在する場合)。 |
|
| 名前でキー指定された毎日の時間間隔トリガー(存在する場合)。 |
|
| 名前でキー指定されたカレンダー間隔トリガー(存在する場合)。 |
|
| 名前でキー指定されたその他のトリガー(存在する場合)。 |
|
| トリガーが最後に起動した時刻(ある場合)。 |
|
| トリガーが次に起動する予定の時刻(ある場合)。 |
|
| 2 つのトリガーのスケジュールされた発動時刻が同じ場合に使用する優先順位。 |
|
| 使用する Cron 式。 |
|
| 式が解決されるタイムゾーン(存在する場合)。 |
|
| トリガーが最後に起動した時刻(ある場合)。 |
|
| トリガーが次に起動する予定の時刻(ある場合)。 |
|
| 2 つのトリガーのスケジュールされた発動時刻が同じ場合に使用する優先順位。 |
|
| 2 回の実行間の間隔 (ミリ秒単位)。 |
|
| トリガーが最後に起動した時刻(ある場合)。 |
|
| トリガーが次に起動する予定の時刻(ある場合)。 |
|
| 2 つのトリガーのスケジュールされた発動時刻が同じ場合に使用する優先順位。 |
|
| 次のトリガー繰り返しの時間を計算するために、発火時間に追加される間隔 (ミリ秒単位)。 |
|
| 実行する曜日の配列。 |
|
| 指定された間隔で発射を開始する時刻(ある場合)。 |
|
| 指定された間隔で発射を完了する時刻(ある場合)。 |
|
| トリガーが最後に起動した時刻(ある場合)。 |
|
| トリガーが次に起動する予定の時刻(ある場合)。 |
|
| 2 つのトリガーのスケジュールされた発動時刻が同じ場合に使用する優先順位。 |
|
| 次のトリガー繰り返しの時間を計算するために、発火時間に追加される間隔 (ミリ秒単位)。 |
|
| 時間計算が実行されるタイムゾーン(存在する場合)。 |
|
| トリガーが最後に起動した時刻(ある場合)。 |
|
| トリガーが次に起動する予定の時刻(ある場合)。 |
|
| 2 つのトリガーのスケジュールされた発動時刻が同じ場合に使用する優先順位。 |
|
| カスタムトリガーインスタンスの toString 表現。 |
20.6. ジョブの詳細を取得する
特定のジョブの詳細を取得するには、次の curl ベースの例に示すように、/actuator/quartz/jobs/{groupName}/{jobName}
に対して GET
リクエストを実行します。
$ curl 'http://localhost:8080/actuator/quartz/jobs/samples/jobOne' -i -X GET
上記の例では、samples
グループと jobOne
名で識別されるジョブの詳細を取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 609
{
"group" : "samples",
"name" : "jobOne",
"description" : "A sample job",
"className" : "org.springframework.scheduling.quartz.DelegatingJob",
"durable" : false,
"requestRecovery" : false,
"data" : {
"password" : "******",
"user" : "admin"
},
"triggers" : [ {
"group" : "samples",
"name" : "every-day",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-04T12:00:00.000+00:00",
"priority" : 7
}, {
"group" : "samples",
"name" : "3am-weekdays",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 3
} ]
}
データマップ内のキーが機密情報として識別された場合、その値はサニタイズされます。
20.6.1. レスポンス構造
レスポンスには、ジョブの完全な詳細と、それに関連付けられているトリガーの概要(存在する場合)が含まれます。トリガーは、次回の起動時間と優先度で並べ替えられます。次の表は、レスポンスの構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| グループの名前。 |
|
| ジョブの名前。 |
|
| ジョブの説明(ある場合)。 |
|
| ジョブ実装の完全修飾名。 |
|
| ジョブが孤立した後も保存されたままにするかどうか。 |
|
| 「リカバリ」または「フェイルオーバー」の状況が発生した場合にジョブを再実行する必要があるかどうか。 |
|
| ジョブデータは、存在する場合はキー / 値のペアとしてマップされます。 |
|
| ジョブに関連付けられているトリガーの配列(存在する場合)。 |
|
| トリガーグループの名前。 |
|
| トリガーの名前。 |
|
| トリガーが最後に起動した時刻(ある場合)。 |
|
| トリガーが次に起動する予定の時刻(ある場合)。 |
|
| 2 つのトリガーのスケジュールされた発動時刻が同じ場合に使用する優先順位。 |
20.7. トリガーの詳細を取得する
特定のトリガーに関する詳細を取得するには、次の curl ベースの例に示すように、/actuator/quartz/triggers/{groupName}/{triggerName}
に対して GET
リクエストを実行します。
$ curl 'http://localhost:8080/actuator/quartz/triggers/samples/example' -i -X GET
上記の例では、samples
グループと example
名で識別されるトリガーの詳細を取得します。
20.7.1. 共通レスポンス構造
レスポンスには共通の構造と、トリガーの型に固有の追加オブジェクトがあります。サポートされている型は次の 5 つです。
CronTrigger
用cron
SimpleTrigger
用simple
DailyTimeIntervalTrigger
用dailyTimeInterval
CalendarIntervalTrigger
用calendarInterval
その他のトリガー実装の場合は
custom
次の表は、レスポンスの共通要素の構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| グループの名前。 |
|
| トリガーの名前。 |
|
| トリガーの説明(ある場合)。 |
|
| トリガーの状態( |
|
| トリガーの型 ( |
|
| このトリガーに関連付けられているカレンダーの名前(存在する場合)。 |
|
| トリガーが有効になる時間(ある場合)。 |
|
| 残りの繰り返しの有無に関係なく、トリガーが繰り返しを終了する時間。 |
|
| トリガーが最後に起動した時刻(ある場合)。 |
|
| トリガーが次に起動する予定の時刻(ある場合)。 |
|
| 2 つのトリガーのスケジュールされた発動時刻が同じ場合に使用する優先順位。 |
|
| トリガーが最後に発動する時刻(ある場合)。 |
|
| 名前でキー付けされたジョブデータマップ (存在する場合)。 |
|
| カレンダー時間間隔トリガーの詳細(存在する場合)。 |
|
| カスタムトリガーの詳細 (存在する場合)。 |
|
| Cron トリガーの詳細 (存在する場合)。 |
|
| 毎日の時間間隔トリガーの詳細(ある場合)。 |
|
| 単純なトリガーの詳細(ある場合)。 |
20.7.2. Cron トリガーレスポンス構造
cron トリガーは、トリガーをいつ起動するかを決定するために使用される cron 式を定義します。このようなトリガー実装の結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 490
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "cron",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 3,
"data" : { },
"cron" : {
"expression" : "0 0 3 ? * 1,2,3,4,5",
"timeZone" : "Europe/Paris"
}
}
レスポンスの大部分は、すべてのトリガー型に共通です。レスポンスの共通要素の構造については、前に説明しました。次の表は、cron トリガーに固有のレスポンス部分の構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| Cron トリガー固有の詳細。 |
|
| 使用する Cron 式。 |
|
| 式が解決されるタイムゾーン(存在する場合)。 |
20.7.3. シンプルなトリガーレスポンス構造
シンプルなトリガーは、特定の時点でジョブを起動するために使用され、オプションで指定された間隔で繰り返し実行されます。このようなトリガー実装の結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 549
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "simple",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 7,
"finalFireTime" : "2020-12-29T17:00:00.000+00:00",
"data" : { },
"simple" : {
"interval" : 86400000,
"repeatCount" : -1,
"timesTriggered" : 0
}
}
レスポンスの大部分は、すべてのトリガー型に共通です。レスポンスの共通要素の構造については、前に説明しました。次の表は、単純なトリガーに固有のレスポンス部分の構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| シンプルなトリガー固有の詳細。 |
|
| 2 回の実行間の間隔 (ミリ秒単位)。 |
|
| トリガーを繰り返す回数。無期限に繰り返す場合は -1 を指定します。 |
|
| トリガーがすでに起動された回数。 |
20.7.4. 毎日の時間間隔トリガーレスポンス構造
毎日の時間間隔トリガーは、毎日繰り返される時間間隔に基づいてジョブを起動するために使用されます。このようなトリガー実装の結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 667
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "PAUSED",
"type" : "dailyTimeInterval",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 5,
"finalFireTime" : "2020-12-30T18:00:00.000+00:00",
"data" : { },
"dailyTimeInterval" : {
"interval" : 3600000,
"daysOfWeek" : [ 3, 5 ],
"startTimeOfDay" : "09:00:00",
"endTimeOfDay" : "18:00:00",
"repeatCount" : -1,
"timesTriggered" : 0
}
}
レスポンスの大部分は、すべてのトリガー型に共通です。レスポンスの共通要素の構造については、前に説明しました。次の表は、毎日の時間間隔トリガーに固有のレスポンス部分の構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| 毎日の時間間隔トリガーの特定の詳細。 |
|
| 次のトリガー繰り返しの時間を計算するために、発火時間に追加される間隔 (ミリ秒単位)。 |
|
| 実行する曜日の配列。 |
|
| 指定された間隔で発射を開始する時刻(ある場合)。 |
|
| 指定された間隔で発射を完了する時刻(ある場合)。 |
|
| トリガーを繰り返す回数。無期限に繰り返す場合は -1 を指定します。 |
|
| トリガーがすでに起動された回数。 |
20.7.5. カレンダー間隔トリガーレスポンス構造
カレンダー間隔トリガーは、カレンダーの時間間隔の繰り返しに基づいてジョブを起動するために使用されます。このようなトリガー実装の結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 669
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "calendarInterval",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 5,
"finalFireTime" : "2020-12-28T17:00:00.000+00:00",
"data" : { },
"calendarInterval" : {
"interval" : 604800000,
"timeZone" : "Etc/UTC",
"timesTriggered" : 0,
"preserveHourOfDayAcrossDaylightSavings" : false,
"skipDayIfHourDoesNotExist" : false
}
}
レスポンスの大部分は、すべてのトリガー型に共通です。レスポンスの共通要素の構造については、前に説明しました。次の表は、カレンダー間隔トリガーに固有のレスポンス部分の構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| カレンダー間隔トリガー固有の詳細。 |
|
| 次のトリガー繰り返しの時間を計算するために、発火時間に追加される間隔 (ミリ秒単位)。 |
|
| 時間計算が実行されるタイムゾーン(存在する場合)。 |
|
| トリガーがすでに起動された回数。 |
|
| 夏時間の移行に関係なく、同じ時間にトリガーを起動するかどうか。 |
|
| 特定の日にその時間が存在しない場合、スキップするかどうか。 |
20.7.6. カスタムトリガーレスポンス構造
カスタムトリガーは、その他の実装です。このようなトリガー実装の結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 457
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger.",
"state" : "NORMAL",
"type" : "custom",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 10,
"custom" : {
"trigger" : "com.example.CustomTrigger@fdsfsd"
}
}
レスポンスの大部分は、すべてのトリガー型に共通です。レスポンスの共通要素の構造については、前に説明しました。次の表は、カスタムトリガーに固有のレスポンス部分の構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| カスタムトリガー固有の詳細。 |
|
| カスタムトリガーインスタンスの toString 表現。 |
21. スケジュールされたタスク (scheduledtasks
)
scheduledtasks
エンドポイントは、アプリケーションのスケジュールされたタスクに関する情報を提供します。
21.1. スケジュールされたタスクの取得
スケジュールされたタスクを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/scheduledtasks
に作成します。
$ curl 'http://localhost:8080/actuator/scheduledtasks' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 629
{
"cron" : [ {
"runnable" : {
"target" : "com.example.Processor.processOrders"
},
"expression" : "0 0 0/3 1/1 * ?"
} ],
"fixedDelay" : [ {
"runnable" : {
"target" : "com.example.Processor.purge"
},
"initialDelay" : 5000,
"interval" : 5000
} ],
"fixedRate" : [ {
"runnable" : {
"target" : "com.example.Processor.retrieveIssues"
},
"initialDelay" : 10000,
"interval" : 3000
} ],
"custom" : [ {
"runnable" : {
"target" : "com.example.Processor$CustomTriggeredRunnable"
},
"trigger" : "com.example.Processor$CustomTrigger@1d7b4b5c"
} ]
}
21.1.1. レスポンス構造
レスポンスには、アプリケーションのスケジュールされたタスクの詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| cron タスク(ある場合)。 |
|
| 実行されるターゲット。 |
|
| cron 式。 |
|
| 遅延タスクがある場合は修正されました。 |
|
| 実行されるターゲット。 |
|
| 最初の実行までの遅延(ミリ秒単位)。 |
|
| 最後の実行の終了から次の実行の開始までの間隔(ミリ秒単位)。 |
|
| 固定レートタスク(ある場合)。 |
|
| 実行されるターゲット。 |
|
| 各実行の開始間の間隔(ミリ秒単位)。 |
|
| 最初の実行までの遅延(ミリ秒単位)。 |
|
| カスタムトリガーがある場合は、タスク。 |
|
| 実行されるターゲット。 |
|
| タスクのトリガー。 |
22. セッション (sessions
)
sessions
エンドポイントは、Spring Session によって管理されるアプリケーションの HTTP セッションに関する情報を提供します。
22.1. セッションの取得
セッションを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/sessions
に作成します。
$ curl 'http://localhost:8080/actuator/sessions?username=alice' -i -X GET
前述の例では、ユーザー名が alice
であるユーザーのすべてのセッションを取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 753
{
"sessions" : [ {
"id" : "816f5dba-37dd-4165-a7b7-00a4969ff643",
"attributeNames" : [ ],
"creationTime" : "2022-03-31T11:34:51.238Z",
"lastAccessedTime" : "2022-03-31T13:34:39.238Z",
"maxInactiveInterval" : 1800,
"expired" : false
}, {
"id" : "4db5efcc-99cb-4d05-a52c-b49acfbb7ea9",
"attributeNames" : [ ],
"creationTime" : "2022-03-31T08:34:51.238Z",
"lastAccessedTime" : "2022-03-31T13:34:14.238Z",
"maxInactiveInterval" : 1800,
"expired" : false
}, {
"id" : "450e01d9-371e-4645-88e1-f85520810173",
"attributeNames" : [ ],
"creationTime" : "2022-03-31T01:34:51.238Z",
"lastAccessedTime" : "2022-03-31T13:34:06.238Z",
"maxInactiveInterval" : 1800,
"expired" : false
} ]
}
22.1.1. クエリパラメーター
エンドポイントはクエリパラメーターを使用して、返すセッションを制限します。次の表に、単一の必須クエリパラメーターを示します。
パラメーター | 説明 |
---|---|
| ユーザーの名前。 |
22.1.2. レスポンス構造
レスポンスには、一致するセッションの詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| 指定されたユーザー名のセッション。 |
|
| セッションの ID。 |
|
| セッションに保存されている属性の名前。 |
|
| セッションが作成されたときのタイムスタンプ。 |
|
| セッションが最後にアクセスされたときのタイムスタンプ。 |
|
| セッションが期限切れになるまでの最大非アクティブ期間(秒単位)。 |
|
| セッションの有効期限が切れているかどうか。 |
22.2. 単一セッションの取得
単一のセッションを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/sessions/{id}
に作成します。
$ curl 'http://localhost:8080/actuator/sessions/4db5efcc-99cb-4d05-a52c-b49acfbb7ea9' -i -X GET
上記の例は、id
が 4db5efcc-99cb-4d05-a52c-b49acfbb7ea9
のセッションを取得します。結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 228
{
"id" : "4db5efcc-99cb-4d05-a52c-b49acfbb7ea9",
"attributeNames" : [ ],
"creationTime" : "2022-03-31T08:34:51.238Z",
"lastAccessedTime" : "2022-03-31T13:34:14.238Z",
"maxInactiveInterval" : 1800,
"expired" : false
}
22.2.1. レスポンス構造
レスポンスには、リクエストされたセッションの詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| セッションの ID。 |
|
| セッションに保存されている属性の名前。 |
|
| セッションが作成されたときのタイムスタンプ。 |
|
| セッションが最後にアクセスされたときのタイムスタンプ。 |
|
| セッションが期限切れになるまでの最大非アクティブ期間(秒単位)。 |
|
| セッションの有効期限が切れているかどうか。 |
23. シャットダウン (shutdown
)
shutdown
エンドポイントは、アプリケーションをシャットダウンするために使用されます。
23.1. アプリケーションのシャットダウン
アプリケーションをシャットダウンするには、次の curl ベースの例に示すように、POST
を /actuator/shutdown
にリクエストします。
$ curl 'http://localhost:8080/actuator/shutdown' -i -X POST
次のようなレスポンスが生成されます。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 41
{
"message" : "Shutting down, bye..."
}
24. アプリケーションの起動 (startup
)
startup
エンドポイントは、アプリケーションの起動シーケンスに関する情報を提供します。
24.1. アプリケーションの起動手順の取得
アプリケーションの起動ステップは、スナップショットとして取得するか (GET
)、バッファから排出する (POST
) ことができます。
24.1.1. アプリケーション起動ステップのスナップショットを取得する
アプリケーションの起動フェーズ中にこれまでに記録されたステップを取得するには、次の curl ベースの例に示すように、GET
リクエストを /actuator/startup
に送信します。
$ curl 'http://localhost:8080/actuator/startup' -i -X GET
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 839
{
"springBootVersion" : "2.6.6",
"timeline" : {
"startTime" : "2022-03-31T13:34:53.754Z",
"events" : [ {
"endTime" : "2022-03-31T13:34:53.949Z",
"duration" : "PT0S",
"startupStep" : {
"name" : "spring.beans.instantiate",
"id" : 3,
"tags" : [ {
"key" : "beanName",
"value" : "homeController"
} ],
"parentId" : 2
},
"startTime" : "2022-03-31T13:34:53.949Z"
}, {
"endTime" : "2022-03-31T13:34:53.949Z",
"duration" : "PT0S",
"startupStep" : {
"name" : "spring.boot.application.starting",
"id" : 2,
"tags" : [ {
"key" : "mainApplicationClass",
"value" : "com.example.startup.StartupApplication"
} ]
},
"startTime" : "2022-03-31T13:34:53.949Z"
} ]
}
}
24.1.2. アプリケーションの起動手順の実行
アプリケーションの起動フェーズ中にこれまでに記録されたステップを排出して返すには、次の curl ベースの例に示すように、POST
リクエストを /actuator/startup
に作成します。
$ curl 'http://localhost:8080/actuator/startup' -i -X POST
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 847
{
"springBootVersion" : "2.6.6",
"timeline" : {
"startTime" : "2022-03-31T13:34:53.754Z",
"events" : [ {
"endTime" : "2022-03-31T13:34:53.894Z",
"duration" : "PT0.002S",
"startupStep" : {
"name" : "spring.beans.instantiate",
"id" : 1,
"tags" : [ {
"key" : "beanName",
"value" : "homeController"
} ],
"parentId" : 0
},
"startTime" : "2022-03-31T13:34:53.892Z"
}, {
"endTime" : "2022-03-31T13:34:53.894Z",
"duration" : "PT0.016S",
"startupStep" : {
"name" : "spring.boot.application.starting",
"id" : 0,
"tags" : [ {
"key" : "mainApplicationClass",
"value" : "com.example.startup.StartupApplication"
} ]
},
"startTime" : "2022-03-31T13:34:53.878Z"
} ]
}
}
24.1.3. レスポンス構造
レスポンスには、アプリケーションの起動手順の詳細が含まれます。次の表は、レスポンスの構造を示しています。
パス | タイプ | 説明 |
---|---|---|
|
| このアプリケーションの Spring Boot バージョン。 |
|
| アプリケーションの開始時刻。 |
|
| アプリケーションの起動中にこれまでに収集されたステップの配列。 |
|
| このイベントの開始時のタイムスタンプ。 |
|
| このイベントの終了のタイムスタンプ。 |
|
| このイベントの正確な期間。 |
|
| StartupStep の名前。 |
|
| この StartupStep の ID。 |
|
| この StartupStep の親 ID。 |
|
| 追加のステップ情報を含むキーと値のペアの配列。 |
|
| StartupStep タグのキー。 |
|
| StartupStep タグの値。 |
25. スレッドダンプ (threaddump
)
threaddump
エンドポイントは、アプリケーションの JVM からのスレッドダンプを提供します。
25.1. スレッドダンプを JSON として取得する
スレッドダンプを JSON として取得するには、次の curl ベースの例に示すように、適切な Accept
ヘッダーを使用して GET
リクエストを /actuator/threaddump
に作成します。
$ curl 'http://localhost:8080/actuator/threaddump' -i -X GET \
-H 'Accept: application/json'
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 7699
{
"threads" : [ {
"threadName" : "Thread-88",
"threadId" : 1632,
"blockedTime" : -1,
"blockedCount" : 0,
"waitedTime" : -1,
"waitedCount" : 0,
"lockOwnerId" : -1,
"inNative" : false,
"suspended" : false,
"threadState" : "RUNNABLE",
"stackTrace" : [ ],
"lockedMonitors" : [ ],
"lockedSynchronizers" : [ ]
}, {
"threadName" : "server",
"threadId" : 1628,
"blockedTime" : -1,
"blockedCount" : 0,
"waitedTime" : -1,
"waitedCount" : 1,
"lockName" : "java.util.concurrent.CountDownLatch$Sync@1ff949a0",
"lockOwnerId" : -1,
"inNative" : false,
"suspended" : false,
"threadState" : "WAITING",
"stackTrace" : [ {
"methodName" : "park",
"fileName" : "Unsafe.java",
"lineNumber" : -2,
"className" : "sun.misc.Unsafe",
"nativeMethod" : true
}, {
"methodName" : "park",
"fileName" : "LockSupport.java",
"lineNumber" : 175,
"className" : "java.util.concurrent.locks.LockSupport",
"nativeMethod" : false
}, {
"methodName" : "parkAndCheckInterrupt",
"fileName" : "AbstractQueuedSynchronizer.java",
"lineNumber" : 836,
"className" : "java.util.concurrent.locks.AbstractQueuedSynchronizer",
"nativeMethod" : false
}, {
"methodName" : "doAcquireSharedInterruptibly",
"fileName" : "AbstractQueuedSynchronizer.java",
"lineNumber" : 997,
"className" : "java.util.concurrent.locks.AbstractQueuedSynchronizer",
"nativeMethod" : false
}, {
"methodName" : "acquireSharedInterruptibly",
"fileName" : "AbstractQueuedSynchronizer.java",
"lineNumber" : 1304,
"className" : "java.util.concurrent.locks.AbstractQueuedSynchronizer",
"nativeMethod" : false
}, {
"methodName" : "await",
"fileName" : "CountDownLatch.java",
"lineNumber" : 231,
"className" : "java.util.concurrent.CountDownLatch",
"nativeMethod" : false
}, {
"methodName" : "blockingGet",
"fileName" : "BlockingSingleSubscriber.java",
"lineNumber" : 87,
"className" : "reactor.core.publisher.BlockingSingleSubscriber",
"nativeMethod" : false
}, {
"methodName" : "block",
"fileName" : "Mono.java",
"lineNumber" : 1707,
"className" : "reactor.core.publisher.Mono",
"nativeMethod" : false
}, {
"methodName" : "run",
"fileName" : "NettyWebServer.java",
"lineNumber" : 180,
"className" : "org.springframework.boot.web.embedded.netty.NettyWebServer$1",
"nativeMethod" : false
} ],
"lockedMonitors" : [ ],
"lockedSynchronizers" : [ ],
"lockInfo" : {
"className" : "java.util.concurrent.CountDownLatch$Sync",
"identityHashCode" : 536431008
}
}, {
"threadName" : "pool-32-thread-1",
"threadId" : 1618,
"blockedTime" : -1,
"blockedCount" : 0,
"waitedTime" : -1,
"waitedCount" : 1,
"lockOwnerId" : -1,
"inNative" : false,
"suspended" : false,
"threadState" : "RUNNABLE",
"stackTrace" : [ {
"methodName" : "siftUp",
"fileName" : "ScheduledThreadPoolExecutor.java",
"lineNumber" : 886,
"className" : "java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue",
"nativeMethod" : false
}, {
"methodName" : "offer",
"fileName" : "ScheduledThreadPoolExecutor.java",
"lineNumber" : 1020,
"className" : "java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue",
"nativeMethod" : false
}, {
"methodName" : "add",
"fileName" : "ScheduledThreadPoolExecutor.java",
"lineNumber" : 1037,
"className" : "java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue",
"nativeMethod" : false
}, {
"methodName" : "add",
"fileName" : "ScheduledThreadPoolExecutor.java",
"lineNumber" : 809,
"className" : "java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue",
"nativeMethod" : false
}, {
"methodName" : "delayedExecute",
"fileName" : "ScheduledThreadPoolExecutor.java",
"lineNumber" : 328,
"className" : "java.util.concurrent.ScheduledThreadPoolExecutor",
"nativeMethod" : false
}, {
"methodName" : "schedule",
"fileName" : "ScheduledThreadPoolExecutor.java",
"lineNumber" : 533,
"className" : "java.util.concurrent.ScheduledThreadPoolExecutor",
"nativeMethod" : false
}, {
"methodName" : "schedule",
"fileName" : "Executors.java",
"lineNumber" : 729,
"className" : "java.util.concurrent.Executors$DelegatedScheduledExecutorService",
"nativeMethod" : false
}, {
"methodName" : "schedule",
"fileName" : "ReschedulingRunnable.java",
"lineNumber" : 82,
"className" : "org.springframework.scheduling.concurrent.ReschedulingRunnable",
"nativeMethod" : false
}, {
"methodName" : "run",
"fileName" : "ReschedulingRunnable.java",
"lineNumber" : 101,
"className" : "org.springframework.scheduling.concurrent.ReschedulingRunnable",
"nativeMethod" : false
}, {
"methodName" : "call",
"fileName" : "Executors.java",
"lineNumber" : 511,
"className" : "java.util.concurrent.Executors$RunnableAdapter",
"nativeMethod" : false
}, {
"methodName" : "run",
"fileName" : "FutureTask.java",
"lineNumber" : 266,
"className" : "java.util.concurrent.FutureTask",
"nativeMethod" : false
}, {
"methodName" : "access$201",
"fileName" : "ScheduledThreadPoolExecutor.java",
"lineNumber" : 180,
"className" : "java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask",
"nativeMethod" : false
}, {
"methodName" : "run",
"fileName" : "ScheduledThreadPoolExecutor.java",
"lineNumber" : 293,
"className" : "java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask",
"nativeMethod" : false
}, {
"methodName" : "runWorker",
"fileName" : "ThreadPoolExecutor.java",
"lineNumber" : 1149,
"className" : "java.util.concurrent.ThreadPoolExecutor",
"nativeMethod" : false
}, {
"methodName" : "run",
"fileName" : "ThreadPoolExecutor.java",
"lineNumber" : 624,
"className" : "java.util.concurrent.ThreadPoolExecutor$Worker",
"nativeMethod" : false
}, {
"methodName" : "run",
"fileName" : "Thread.java",
"lineNumber" : 750,
"className" : "java.lang.Thread",
"nativeMethod" : false
} ],
"lockedMonitors" : [ {
"className" : "java.lang.Object",
"identityHashCode" : 1567080025,
"lockedStackDepth" : 7,
"lockedStackFrame" : {
"methodName" : "schedule",
"fileName" : "ReschedulingRunnable.java",
"lineNumber" : 82,
"className" : "org.springframework.scheduling.concurrent.ReschedulingRunnable",
"nativeMethod" : false
}
}, {
"className" : "java.lang.Object",
"identityHashCode" : 1567080025,
"lockedStackDepth" : 8,
"lockedStackFrame" : {
"methodName" : "run",
"fileName" : "ReschedulingRunnable.java",
"lineNumber" : 101,
"className" : "org.springframework.scheduling.concurrent.ReschedulingRunnable",
"nativeMethod" : false
}
} ],
"lockedSynchronizers" : [ {
"className" : "java.util.concurrent.ThreadPoolExecutor$Worker",
"identityHashCode" : 670306568
}, {
"className" : "java.util.concurrent.locks.ReentrantLock$NonfairSync",
"identityHashCode" : 841493401
} ]
} ]
}
25.1.1. レスポンス構造
レスポンスには、JVM のスレッドの詳細が含まれます。次の表に、レスポンスの構造を示します。
パス | タイプ | 説明 |
---|---|---|
|
| JVM のスレッド。 |
|
| スレッドがブロックされた合計回数。 |
|
| スレッドがブロックに費やした時間(ミリ秒)。スレッド競合監視を無効にする場合は -1。 |
|
| スレッドがデーモンスレッドかどうか。Java 9 以降でのみ利用可能。 |
|
| スレッドがネイティブコードを実行しているかどうか。 |
|
| スレッドがブロックされているオブジェクトの説明(ある場合)。 |
|
| スレッドが待機をブロックされているオブジェクト。 |
|
| ロックオブジェクトの完全修飾クラス名。 |
|
| ロックオブジェクトの ID ハッシュコード。 |
|
| このスレッドによってロックされているモニター(ある場合) |
|
| ロックオブジェクトのクラス名。 |
|
| ロックオブジェクトの ID ハッシュコード。 |
|
| モニターがロックされたスタックの深さ。 |
|
| モニターをロックしたスタックフレーム。 |
|
| このスレッドによってロックされたシンクロナイザー。 |
|
| ロックされたシンクロナイザーのクラス名。 |
|
| ロックされたシンクロナイザーの ID ハッシュコード。 |
|
| スレッドがブロックされているオブジェクトを所有するスレッドの ID。スレッドがブロックされていない場合は、 |
|
| スレッドがブロックされているオブジェクトがある場合、そのオブジェクトを所有するスレッドの名前。 |
|
| スレッドの優先度。Java 9 以降でのみ利用可能。 |
|
| スレッドのスタックトレース。 |
|
| 存在する場合、このエントリによって識別される実行ポイントを含むクラスのクラスローダーの名前。Java 9 以降でのみ利用可能。 |
|
| このエントリで識別される実行ポイントを含むクラスの名前。 |
|
| このエントリによって識別される実行ポイントがある場合、それを含むソースファイルの名前。 |
|
| このエントリによって識別される実行ポイントの行番号。不明な場合は負。 |
|
| メソッドの名前。 |
|
| このエントリで識別される実行ポイントがある場合、その実行ポイントを含むモジュールの名前。Java 9 以降でのみ利用可能。 |
|
| このエントリで識別される実行ポイントがある場合、そのバージョンを含むモジュールのバージョン。Java 9 以降でのみ利用可能。 |
|
| 実行ポイントがネイティブメソッドであるかどうか。 |
|
| スレッドが中断されているかどうか。 |
|
| スレッドの ID。 |
|
| スレッドの名前。 |
|
| スレッドの状態( |
|
| スレッドが通知を待機した合計回数。 |
|
| スレッドが待機に費やした時間(ミリ秒)。-1 スレッド競合監視が無効になっている場合 |
25.2. スレッドダンプをテキストとして取得する
スレッドダンプをテキストとして取得するには、次の curl ベースの例に示すように、text/plain
を受け入れる /actuator/threaddump
に GET
リクエストを行います。
$ curl 'http://localhost:8080/actuator/threaddump' -i -X GET \
-H 'Accept: text/plain'
結果のレスポンスは次のようになります。
HTTP/1.1 200 OK
Content-Type: text/plain;charset=UTF-8
Content-Length: 65452
2022-03-31 13:35:06
Full thread dump OpenJDK 64-Bit Server VM (25.322-b06 mixed mode):
"server" - Thread t@1628
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <1ff949a0> (a java.util.concurrent.CountDownLatch$Sync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:87)
at reactor.core.publisher.Mono.block(Mono.java:1707)
at org.springframework.boot.web.embedded.netty.NettyWebServer$1.run(NettyWebServer.java:180)
Locked ownable synchronizers:
- None
"pool-32-thread-1" - Thread t@1618
java.lang.Thread.State: RUNNABLE
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"HikariPool-1 housekeeper" - Thread t@1613
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <41ae0dcf> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-Acceptor" - Thread t@1601
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:421)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:249)
- locked <7f970b69> (a java.lang.Object)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:546)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:79)
at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:129)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-Poller" - Thread t@1600
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <5a930ec2> (a sun.nio.ch.Util$3)
- locked <ff2f879> (a java.util.Collections$UnmodifiableSet)
- locked <3e035c3d> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:807)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-10" - Thread t@1599
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-9" - Thread t@1598
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-8" - Thread t@1597
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-7" - Thread t@1596
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-6" - Thread t@1595
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-5" - Thread t@1594
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-4" - Thread t@1593
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-3" - Thread t@1592
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-2" - Thread t@1591
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"http-nio-auto-74-exec-1" - Thread t@1590
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7908c4d7> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"Catalina-utility-2" - Thread t@1589
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <3b2f302a> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"container-0" - Thread t@1588
java.lang.Thread.State: TIMED_WAITING
at java.lang.Thread.sleep(Native Method)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:563)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:197)
Locked ownable synchronizers:
- None
"Catalina-utility-1" - Thread t@1587
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <3b2f302a> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"reactor-http-epoll-8" - Thread t@1306
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.Native.epollWait(Native.java:186)
at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:290)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:347)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"reactor-http-epoll-7" - Thread t@1305
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.Native.epollWait(Native.java:186)
at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:290)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:347)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"reactor-http-epoll-6" - Thread t@1304
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.Native.epollWait(Native.java:186)
at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:290)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:347)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"reactor-http-epoll-5" - Thread t@1303
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.Native.epollWait(Native.java:186)
at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:290)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:347)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"reactor-http-epoll-4" - Thread t@1302
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.Native.epollWait(Native.java:186)
at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:290)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:347)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"reactor-http-epoll-3" - Thread t@1301
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.Native.epollWait(Native.java:186)
at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:290)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:347)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"reactor-http-epoll-2" - Thread t@1300
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.Native.epollWait(Native.java:186)
at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:290)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:347)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"reactor-http-epoll-1" - Thread t@1299
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.Native.epollWait(Native.java:186)
at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:290)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:347)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"boundedElastic-2" - Thread t@1297
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <23062606> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"Keep-Alive-Timer" - Thread t@1188
java.lang.Thread.State: TIMED_WAITING
at java.lang.Thread.sleep(Native Method)
at sun.net.www.http.KeepAliveCache.run(KeepAliveCache.java:172)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"boundedElastic-1" - Thread t@867
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <217cba63> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"parallel-8" - Thread t@596
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <6ab97f6e> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"boundedElastic-evictor-1" - Thread t@558
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <1dd10a7f> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"parallel-7" - Thread t@557
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <c577a1b> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"parallel-6" - Thread t@518
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <48bc7650> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"parallel-5" - Thread t@478
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <69df3226> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-10-2" - Thread t@283
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <7cc84f90> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <4bf875b0> (a java.util.Collections$UnmodifiableSet)
- locked <605d8469> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-10-1" - Thread t@282
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <7083d446> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <4e89a109> (a java.util.Collections$UnmodifiableSet)
- locked <4654189d> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-8-2" - Thread t@257
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <4a26a2f2> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <24696e14> (a java.util.Collections$UnmodifiableSet)
- locked <276b0279> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-8-1" - Thread t@256
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <411d76f9> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <3e537d1a> (a java.util.Collections$UnmodifiableSet)
- locked <5125ad0a> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-6-2" - Thread t@234
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <2ea2159d> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <4a2140e> (a java.util.Collections$UnmodifiableSet)
- locked <21bc022d> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-6-1" - Thread t@233
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <5d8da6ed> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <633d4e3c> (a java.util.Collections$UnmodifiableSet)
- locked <772b2431> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-4-1" - Thread t@161
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <36c7ed93> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <6cd9f68> (a java.util.Collections$UnmodifiableSet)
- locked <f086d23> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-4-2" - Thread t@160
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <212cca5f> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <288e109c> (a java.util.Collections$UnmodifiableSet)
- locked <4252fc3a> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"parallel-4" - Thread t@115
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <e7ff026> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-2-2" - Thread t@72
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <4946ad84> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <11144ec0> (a java.util.Collections$UnmodifiableSet)
- locked <44f2c3f4> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"nioEventLoopGroup-2-1" - Thread t@71
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <357de58c> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <49ab542a> (a java.util.Collections$UnmodifiableSet)
- locked <7afa7191> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:813)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"parallel-3" - Thread t@19
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <2845f059> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"parallel-2" - Thread t@15
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <724e2158> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"parallel-1" - Thread t@14
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <6157213f> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- None
"/127.0.0.1:53652 to /127.0.0.1:33753 workers Thread 3" - Thread t@13
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <4888a27d> (a sun.nio.ch.Util$3)
- locked <4f48440d> (a java.util.Collections$UnmodifiableSet)
- locked <4c0ff85d> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.gradle.internal.remote.internal.inet.SocketConnection$SocketInputStream.read(SocketConnection.java:185)
at com.esotericsoftware.kryo.io.Input.fill(Input.java:146)
at com.esotericsoftware.kryo.io.Input.require(Input.java:178)
at com.esotericsoftware.kryo.io.Input.readByte(Input.java:295)
at org.gradle.internal.serialize.kryo.KryoBackedDecoder.readByte(KryoBackedDecoder.java:82)
at org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageReader.read(InterHubMessageSerializer.java:64)
at org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageReader.read(InterHubMessageSerializer.java:52)
at org.gradle.internal.remote.internal.inet.SocketConnection.receive(SocketConnection.java:81)
at org.gradle.internal.remote.internal.hub.MessageHub$ConnectionReceive.run(MessageHub.java:270)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- Locked <2ddc8ecb> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"/127.0.0.1:53652 to /127.0.0.1:33753 workers Thread 2" - Thread t@12
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <1489663a> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at org.gradle.internal.remote.internal.hub.queue.EndPointQueue.take(EndPointQueue.java:49)
at org.gradle.internal.remote.internal.hub.MessageHub$ConnectionDispatch.run(MessageHub.java:322)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- Locked <1fe20588> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"Test worker" - Thread t@11
java.lang.Thread.State: RUNNABLE
at sun.management.ThreadImpl.dumpThreads0(Native Method)
at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:496)
at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:484)
at org.springframework.boot.actuate.management.ThreadDumpEndpoint.getFormattedThreadDump(ThreadDumpEndpoint.java:51)
at org.springframework.boot.actuate.management.ThreadDumpEndpoint.textThreadDump(ThreadDumpEndpoint.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74)
at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60)
at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:353)
at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:458)
at sun.reflect.GeneratedMethodAccessor329.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:497)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167)
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134)
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:199)
at org.springframework.boot.actuate.autoconfigure.endpoint.web.documentation.ThreadDumpEndpointDocumentationTests.textThreadDump(ThreadDumpEndpointDocumentationTests.java:186)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$138/738417235.apply(Unknown Source)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall$$Lambda$139/1633417395.apply(Unknown Source)
at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
at org.junit.jupiter.engine.execution.ExecutableInvoker$$Lambda$289/1384270042.apply(Unknown Source)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$328/1699408254.execute(Unknown Source)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$228/30104610.execute(Unknown Source)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$227/1758664395.invoke(Unknown Source)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$226/300259659.execute(Unknown Source)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService$$Lambda$232/1583323218.accept(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1259)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$228/30104610.execute(Unknown Source)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$227/1758664395.invoke(Unknown Source)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$226/300259659.execute(Unknown Source)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService$$Lambda$232/1583323218.accept(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1259)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$228/30104610.execute(Unknown Source)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$227/1758664395.invoke(Unknown Source)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$226/300259659.execute(Unknown Source)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda$181/1584886834.accept(Unknown Source)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at com.sun.proxy.$Proxy2.stop(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- Locked <add0edd> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"Signal Dispatcher" - Thread t@4
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Finalizer" - Thread t@3
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
- waiting on <147ae28e> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216)
Locked ownable synchronizers:
- None
"Reference Handler" - Thread t@2
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
- waiting on <27043d4c> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
Locked ownable synchronizers:
- None