0

我正在使用具有多个实例的 cloudfoundry。我正在尝试使用 spring 的 /actuator 端点生成 heapdump。

我的疑问是,如果 cloudfoundry env 一次运行 2 个实例,它将生成堆转储。如何知道 heapdump 是针对哪个实例的,并且无论如何我们都可以访问特定的实例。

注意:我只想使用 spring boot actuator /heapdump url 选项。

4

1 回答 1

1

我的疑问是,如果 cloudfoundry env 一次运行 2 个实例,它将生成堆转储。

您无法真正知道请求将提前到达哪里。对您的应用程序实例的请求由 Gorouter(循环)负载平衡,因此除非您的应用程序没有流量,否则该请求可能会命中任一后端应用程序实例。

但是,您可以在事后确定请求到达的应用程序实例。

  1. 在终端中,cf logs为您的应用程序运行。

  2. 在另一个终端中,运行curl -v .... 输出将有一个名为X-Vcap-Request-Id. 复制那个指南。

    < 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
    
  3. 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"
    

如何知道 heapdump 是针对哪个实例的,并且无论如何我们都可以访问特定的实例。

这就是你想要的: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-InstanceX-Cf-App-Instance: APP_GUID:APP_INDEX。您可以使用 检索您的应用程序指南cf app myapp --guid。APP_INDEX 是从零开始的,所以 0 是第一个实例,1 是第二个实例,等等......

于 2021-05-20T12:34:48.220 回答