spring 引导执行器堆转储在 cloudfoundry 中的行为方式
How spring boot actuator heapdump behave in cloudfoundry
我在多个实例中使用 cloudfoundry。我正在尝试使用 spring.
的 /actuator 端点生成堆转储
我怀疑 cloudfoundry env 一次有 2 个实例 运行 ,它会为此实例生成堆转储。
如何知道 heapdump 是针对哪个实例的,无论如何我们都可以命中特定的实例。
注意:我只想使用 spring 引导执行器 /heapdump url 选项。
My doubt is in case of cloudfoundry env where at a time 2 instances running , for which instance it will generate the heapdump.
您无法真正提前知道请求会到达哪里。对您的应用实例的请求由 Gorouter (round-robin) 进行负载平衡,因此除非您的应用没有流量,否则请求可能会到达任一后端应用实例。
但是,您可以事后确定请求发送到的应用程序实例。
在终端中,运行 cf logs
用于您的应用程序。
在另一个终端中,运行curl -v ...
。输出将有一个名为 X-Vcap-Request-Id
的 header。复制该 guid。
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=UTF-8
< Date: Thu, 20 May 2021 12:27:39 GMT
< Server: Apache
< Vary: Accept-Encoding
< X-Vcap-Request-Id: c254c0df-c03f-475f-6210-fe3eea7cf28a # <-- this line
< Content-Length: 399
在 cf logs
的输出中查找您在上一步中捕获的 guid。这将标识请求的访问日志条目(请参阅 vcap_request_id
字段)。同一记录上的 app_index
字段会告诉您哪个应用收到了请求。
2021-05-20T08:27:39.85-0400 [RTR/0] OUT php-info.apps.pcfone.io - [2021-05-20T12:27:39.848995848Z] "GET / HTTP/1.1" 200 0 399 "-" "curl/7.64.1" "192.168.4.4:34744" "192.168.16.31:61075" x_forwarded_for:"23.115.134.147, 192.168.4.4" x_forwarded_proto:"https" vcap_request_id:"c254c0df-c03f-475f-6210-fe3eea7cf28a" response_time:0.008122 gorouter_time:0.000506 app_id:"c1985534-3ca3-4ada-8bd2-b9b7a57de440" app_index:"0" x_cf_routererror:"-" x_b3_traceid:"5bc96459099edbfd" x_b3_spanid:"5bc96459099edbfd" x_b3_parentspanid:"-" b3:"5bc96459099edbfd-5bc96459099edbfd"
How to know the heapdump is for which instance and is there anyway we can hit a specific instance .
这就是你想要的:https://docs.cloudfoundry.org/devguide/deploy-apps/routes-domains.html#surgical-routing
如果您发送 X-Cf-App-Instance
,您可以选择一个特定的应用程序实例。然后,您可以针对特定的应用程序实例或确保从所有应用程序实例中获取堆转储。
例如:curl myapp.example.com -H "X-Cf-App-Instance: 5cdc7595-2e9b-4f62-8d5a-a86b92f2df0e:9"
X-Cf-App-Instance
的内容是X-Cf-App-Instance: APP_GUID:APP_INDEX
。您可以使用 cf app myapp --guid
检索您的应用程序 GUID。 APP_INDEX 是 zero-based,所以 0 是第一个实例,1 是第二个实例,等等...
我在多个实例中使用 cloudfoundry。我正在尝试使用 spring.
的 /actuator 端点生成堆转储我怀疑 cloudfoundry env 一次有 2 个实例 运行 ,它会为此实例生成堆转储。 如何知道 heapdump 是针对哪个实例的,无论如何我们都可以命中特定的实例。
注意:我只想使用 spring 引导执行器 /heapdump url 选项。
My doubt is in case of cloudfoundry env where at a time 2 instances running , for which instance it will generate the heapdump.
您无法真正提前知道请求会到达哪里。对您的应用实例的请求由 Gorouter (round-robin) 进行负载平衡,因此除非您的应用没有流量,否则请求可能会到达任一后端应用实例。
但是,您可以事后确定请求发送到的应用程序实例。
在终端中,运行
cf logs
用于您的应用程序。在另一个终端中,运行
curl -v ...
。输出将有一个名为X-Vcap-Request-Id
的 header。复制该 guid。< HTTP/1.1 200 OK < Content-Type: text/html; charset=UTF-8 < Date: Thu, 20 May 2021 12:27:39 GMT < Server: Apache < Vary: Accept-Encoding < X-Vcap-Request-Id: c254c0df-c03f-475f-6210-fe3eea7cf28a # <-- this line < Content-Length: 399
在
cf logs
的输出中查找您在上一步中捕获的 guid。这将标识请求的访问日志条目(请参阅vcap_request_id
字段)。同一记录上的app_index
字段会告诉您哪个应用收到了请求。2021-05-20T08:27:39.85-0400 [RTR/0] OUT php-info.apps.pcfone.io - [2021-05-20T12:27:39.848995848Z] "GET / HTTP/1.1" 200 0 399 "-" "curl/7.64.1" "192.168.4.4:34744" "192.168.16.31:61075" x_forwarded_for:"23.115.134.147, 192.168.4.4" x_forwarded_proto:"https" vcap_request_id:"c254c0df-c03f-475f-6210-fe3eea7cf28a" response_time:0.008122 gorouter_time:0.000506 app_id:"c1985534-3ca3-4ada-8bd2-b9b7a57de440" app_index:"0" x_cf_routererror:"-" x_b3_traceid:"5bc96459099edbfd" x_b3_spanid:"5bc96459099edbfd" x_b3_parentspanid:"-" b3:"5bc96459099edbfd-5bc96459099edbfd"
How to know the heapdump is for which instance and is there anyway we can hit a specific instance .
这就是你想要的:https://docs.cloudfoundry.org/devguide/deploy-apps/routes-domains.html#surgical-routing
如果您发送 X-Cf-App-Instance
,您可以选择一个特定的应用程序实例。然后,您可以针对特定的应用程序实例或确保从所有应用程序实例中获取堆转储。
例如:curl myapp.example.com -H "X-Cf-App-Instance: 5cdc7595-2e9b-4f62-8d5a-a86b92f2df0e:9"
X-Cf-App-Instance
的内容是X-Cf-App-Instance: APP_GUID:APP_INDEX
。您可以使用 cf app myapp --guid
检索您的应用程序 GUID。 APP_INDEX 是 zero-based,所以 0 是第一个实例,1 是第二个实例,等等...