504 Cổng hết thời gian chờ

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Triệu chứng

Ứng dụng nhận được mã trạng thái HTTP 504 kèm theo thông báo Gateway Timeout làm phản hồi cho các lệnh gọi API.

Mã trạng thái HTTP – lỗi 504 Gateway Timeout cho biết ứng dụng không nhận được phản hồi kịp thời từ Edge Gateway hoặc máy chủ phụ trợ trong quá trình thực thi một API

Thông báo lỗi

Ứng dụng sẽ nhận được mã phản hồi sau đây:

HTTP/1.1 504 Gateway Timeout

Trong một số trường hợp, bạn cũng có thể nhận thấy thông báo lỗi sau:

{
   "fault": {
      "faultstring": "Gateway Timeout",
      "detail": {
           "errorcode": "messaging.adaptors.http.flow.GatewayTimeout"
       }
    }
}

Nguyên nhân gây ra thời gian chờ cổng vào là gì?

Đường dẫn điển hình cho một yêu cầu API thông qua nền tảng Edge sẽ là Ứng dụng -> Máy phay gỗ -> Trình xử lý thư -> Máy chủ phụ trợ như minh hoạ trong hình bên dưới:

Ứng dụng, bộ định tuyến và Bộ xử lý tin nhắn trong nền tảng Edge được thiết lập bằng các giá trị thời gian chờ phù hợp. Nền tảng Edge dự kiến sẽ gửi phản hồi trong một khoảng thời gian nhất định cho mọi yêu cầu API dựa trên giá trị thời gian chờ. Nếu bạn không nhận được phản hồi trong vòng khoảng thời gian được chỉ định, thì hàm sẽ trả về 504 Gateway Timeout Error.

Bảng sau đây cung cấp thêm thông tin chi tiết về thời điểm có thể hết thời gian chờ trong Edge:

Lần xuất hiện hết thời gian chờ Thông tin chi tiết
Thời gian chờ xảy ra trên Trình xử lý thư
  • Máy chủ phụ trợ không phản hồi với Trình xử lý thư trong thời gian chờ được chỉ định trên Trình xử lý thư.
  • Trình xử lý thư hết thời gian chờ và gửi trạng thái phản hồi dưới dạng 504 Gateway Timeout tới Bộ định tuyến.
Thời gian chờ xảy ra trên Bộ định tuyến
  • Trình xử lý thông báo không phản hồi lại bộ định tuyến trong thời gian chờ được chỉ định trên Bộ định tuyến.
  • Bộ định tuyến hết thời gian chờ và gửi trạng thái phản hồi dưới dạng 504 Gateway Timeout đến ứng dụng.
Thời gian chờ xảy ra trên ứng dụng
  • Bộ định tuyến không phản hồi ứng dụng khách trong thời gian chờ được chỉ định trên bộ định tuyến.
  • Ứng dụng sẽ hết thời gian chờ và kết thúc trạng thái phản hồi là 504 Gateway Timeout gửi đến người dùng cuối.

Các nguyên nhân có thể

Trong Edge, các nguyên nhân thường gặp gây ra lỗi 504 Gateway Timeout là:

Nguyên nhân Thông tin chi tiết Các bước được cung cấp cho
Máy chủ phụ trợ chậm Máy chủ phụ trợ đang xử lý yêu cầu API quá chậm do tải cao hoặc hiệu suất kém. Người dùng đám mây công khai và riêng tư
Do Edge xử lý yêu cầu API bị chậm Edge mất nhiều thời gian để xử lý yêu cầu API do quá tải hoặc kém hiệu suất.

Chậm máy chủ phụ trợ

Nếu máy chủ phụ trợ rất chậm hoặc mất nhiều thời gian để xử lý yêu cầu API, bạn sẽ gặp lỗi 504 Gateway Timeout. Như đã giải thích trong phần trên, thời gian chờ có thể xảy ra trong một trong các trường hợp sau:

  1. Trình xử lý thư hết thời gian chờ trước khi máy chủ phụ trợ phản hồi.
  2. Bộ định tuyến hết thời gian chờ trước khi Trình xử lý thư/máy chủ phụ trợ phản hồi.
  3. Ứng dụng khách hết thời gian chờ trước khi Bộ định tuyến/Trình xử lý thư/máy chủ phụ trợ phản hồi.

Các phần sau đây mô tả cách chẩn đoán và giải quyết vấn đề theo từng trường hợp trong trường hợp cụ thể.

Tình huống #1 Trình xử lý thư hết thời gian chờ trước khi máy chủ phụ trợ phản hồi

Chẩn đoán

Bạn có thể làm theo các quy trình sau để chẩn đoán xem đã xảy ra lỗi 504 Gateway Timeout hay chưa do máy chủ phụ trợ chậm.

Quy trình #1 Sử dụng dấu vết

Nếu vấn đề vẫn tiếp diễn (vẫn xảy ra 504 lỗi), hãy làm theo hướng dẫn bên dưới các bước:

  1. Theo dõi API bị ảnh hưởng trong giao diện người dùng Edge. Chờ lỗi xảy ra hoặc nếu bạn có lệnh gọi API, sau đó thực hiện một số lệnh gọi API và tái tạo lỗi 504 Gateway Timeout.
  2. Sau khi xảy ra lỗi, hãy kiểm tra yêu cầu cụ thể, trong đó hiển thị mã phản hồi dưới dạng 504.
  3. Kiểm tra thời gian đã trôi qua ở mỗi giai đoạn và ghi chú về giai đoạn có thời gian dài nhất chi tiêu.
  4. Nếu bạn quan sát lỗi với thời gian trôi qua lâu nhất ngay sau một trong các giai đoạn tiếp theo thì chỉ báo rằng máy chủ phụ trợ bị chậm hoặc mất nhiều thời gian để xử lý yêu cầu:
    • Đã gửi yêu cầu đến máy chủ đích
    • Chính sách về chú thích dịch vụ

Dưới đây là ví dụ về Theo dõi mẫu cho thấy máy chủ phụ trợ không phản hồi thậm chí sau 55 giây dẫn đến lỗi 504 Gateway Timeout:

Trong dấu vết trên, Trình xử lý thông báo hết thời gian chờ sau 55.002 mili giây theo thời gian của máy chủ phụ trợ không phản hồi.

Quy trình số 2 Sử dụng nhật ký Trình xử lý thư

  1. Kiểm tra nhật ký của Trình xử lý thư (/opt/apigee/var/log/edge-message-processor/logs/system.log)
  2. Nếu bạn thấy lỗi Gateway TimeoutonTimeoutRead đối với yêu cầu proxy API cụ thể vào thời điểm cụ thể thì thông báo đó chỉ ra rằng Trình xử lý thư đã hết thời gian chờ.

    Nhật ký Trình xử lý tin nhắn mẫu cho thấy Lỗi thời gian chờ của cổng vào

    2015-09-29 20:16:54,340 org:myorg env:staging api:profiles rev:13 NIOThread@1
    ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() :
    AbstractResponseListener.onError(HTTPResponse@4d898cf1, Gateway
    Timeout)
    2015-09-29 20:16:57,361 org:myorg env:staging api:profileNewsletters rev:8
    NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$3.onTimeout() :
    SSLClientChannel[C:XX.XX.XX.XX:443 Remote
    host:192.168.38.54:38302]@120171 useCount=2 bytesRead=0
    bytesWritten=824 age=55458ms lastIO=55000ms .onTimeoutRead
    

    Trong nhật ký Trình xử lý thư ở trên, bạn nhận thấy rằng máy chủ phụ trợ được biểu thị bằng IP địa chỉ XX.XX.XX.XX không phản hồi ngay cả sau 55 giây (lastIO=55000ms). Do đó, Trình xử lý thư đã hết thời gian chờ và gửi lỗi 504 Gateway Timeout.

    Kiểm tra vấn đề này: Cách kiểm soát thời gian chờ trên Trình xử lý thư?

    • Cách kiểm soát thời gian chờ trên Trình xử lý tin nhắn. Trình xử lý thư thường đặt với giá trị thời gian chờ mặc định là 55 giây) thông qua tài sản HTTPTransport.io.timeout.millis. Giá trị thời gian chờ này là có thể áp dụng cho tất cả Proxy API thuộc về tổ chức được cung cấp bởi Trình xử lý tin nhắn.
      • Nếu máy chủ phụ trợ không phản hồi trong vòng 55 giây thì Thông báo Bộ xử lý đã hết thời gian chờ và gửi lỗi 504 Gateway Timeout cho ứng dụng.
    • Giá trị thời gian chờ được chỉ định trong Trình xử lý thông báo có thể là bị ghi đè bởi thuộc tính io.timeout.millis được chỉ định trong Proxy API. Giá trị thời gian chờ này áp dụng cho một API cụ thể Proxy mà thuộc tính được đề cập ở trên được chỉ định. Ví dụ: nếu io.timeout.millis được đặt thành 10 giây trong Proxy API, sau đó giá trị thời gian chờ 10 giây sẽ được sử dụng cho Proxy API cụ thể này.
      • Nếu máy chủ phụ trợ không phản hồi trong vòng 10 giây đối với Proxy API, sau đó Trình xử lý thư hết thời gian chờ và gửi 504 Gateway Timeout lỗi cho máy khách.

Độ phân giải

  1. Kiểm tra lý do máy chủ phụ trợ mất hơn 55 giây và xem có thể cố định/được tối ưu hoá để phản hồi nhanh hơn.
  2. Nếu không thể sửa/tối ưu hoá máy chủ phụ trợ hoặc đã biết rằng chương trình phụ trợ máy chủ mất nhiều thời gian hơn thời gian chờ được định cấu hình, sau đó Tăng giá trị thời gian chờ trên Bộ định tuyến và Trình xử lý thư lên giá trị phù hợp.

Trường hợp #2 - Bộ định tuyến hết thời gian chờ trước khi Trình xử lý thư/máy chủ phụ trợ phản hồi

Bạn có thể gặp 504 Gateway Timeout lỗi nếu bộ định tuyến hết thời gian chờ trước Thông báo Bộ xử lý/máy chủ phụ trợ phản hồi. Điều này có thể xảy ra trong một trong các trường hợp sau:

  • Giá trị thời gian chờ đã đặt trên Bộ định tuyến ngắn hơn giá trị thời gian chờ đã đặt trên Thông báo Bộ xử lý. Ví dụ: giả sử thời gian chờ trên Bộ định tuyến là 50 giây, trong khi Thông báo Bộ xử lý là 55 giây.
    Hết thời gian chờ trên bộ định tuyến Thời gian chờ trên Trình xử lý thư
    50 giây 55 giây
  • Giá trị thời gian chờ trên Trình xử lý thông báo sẽ bị ghi đè bằng giá trị thời gian chờ cao hơn bằng cách sử dụng thuộc tính io.timeout.millis được đặt trong cấu hình điểm cuối mục tiêu của Proxy API:

    Ví dụ: nếu bạn đặt các giá trị thời gian chờ sau đây:

    Hết thời gian chờ trên bộ định tuyến Thời gian chờ trên Trình xử lý thư Thời gian chờ trong Proxy API
    57 giây 55 giây 120 giây

    Tuy nhiên, io.timeout.millis được đặt thành 120 giây trong Proxy API:

    <HTTPTargetConnection>
         <Properties>
              <Property name="io.timeout.millis">120000</Property>
          </Properties>
          <URL>http://www.apigee.com</URL>
    </HTTPTargetConnection>
    

    Sau đó, Trình xử lý thư sẽ không hết thời gian chờ sau 55 giây ngay cả khi đã hết thời gian chờ (55 giây) nhỏ hơn giá trị thời gian chờ trên bộ định tuyến (57 giây). Điều này là do giá trị thời gian chờ 55 giây trên Trình xử lý thông báo sẽ bị ghi đè bằng giá trị 120 giây được đặt trong Proxy API. Vì vậy, giá trị thời gian chờ của Trình xử lý thư cho Proxy API cụ thể này sẽ là 120 giây.

    Vì Bộ định tuyến có giá trị thời gian chờ thấp hơn (57 giây) so với 120 giây được đặt trong Proxy API, bộ định tuyến sẽ hết thời gian chờ nếu máy chủ phụ trợ không phản hồi lại sau 57 giây.

Chẩn đoán

  1. Kiểm tra nhật ký truy cập NGINX (/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log)
  2. Nếu bộ định tuyến hết thời gian chờ trước Trình xử lý thông báo, thì bạn sẽ thấy trạng thái của 504 trên nhật ký truy cập NGINX đối với yêu cầu API cụ thể và message id từ Trình xử lý thư sẽ được đặt thành -. Nguyên nhân là do Bộ định tuyến không nhận được phản hồi nào từ Trình xử lý thư trong khoảng thời gian chờ được đặt trên bộ định tuyến.

    Mục nhập nhật ký NGINX mẫu hiển thị 504 do hết thời gian chờ của Bộ định tuyến

  3. Trong ví dụ trên, hãy chú ý đến trạng thái của 504 trên NGINX, mã nhận dạng thư từ Thông báo Bộ xử lý là - và tổng thời gian trôi qua là 57,001 giây. Nguyên nhân là do bộ định tuyến đã hết thời gian chờ sau 57,001 giây và chúng tôi không nhận được bất kỳ phản hồi nào từ Bộ xử lý thư.
  4. Trong trường hợp này, bạn sẽ thấy Broken Pipe ngoại lệ trong Thông báo Nhật ký bộ xử lý (/opt/apigee/var/log/edge-message-processor/logs/system.log).
    2017-06-09 00:00:25,886 org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-mp01-18869-23151-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[A:XX.XX.XX.XX:8998 Remote host:YY.YY.YY.YY:51400]@23751 useCount=1 bytesRead=0 bytesWritten=486 age=330465ms  lastIO=0ms )
    2017-06-09 00:00:25,887  org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-mp01-18869-23151-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace:
    java.io.IOException: Broken pipe
            at com.apigee.nio.channels.ClientOutputChannel.writePending(ClientOutputChannel.java:51) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.onWrite(OutputChannel.java:116) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.write(OutputChannel.java:81) ~[nio-1.0.0.jar:na]
    <snipped>
    

Lỗi này hiển thị do khi bộ định tuyến hết thời gian chờ, nó sẽ đóng kết nối với Trình xử lý tin nhắn. Khi quá trình xử lý thư hoàn tất, Trình xử lý thư sẽ cố gắng ghi phản hồi cho bộ định tuyến. Vì kết nối với bộ định tuyến đã bị đóng, bạn sẽ nhận được Broken Pipe exception trên Trình xử lý tin nhắn.

Chúng tôi dự kiến sẽ thấy trường hợp ngoại lệ này trong các trường hợp đã giải thích ở trên. Vậy nên, thực tế nguyên nhân gây ra lỗi 504 Gateway Timeout vẫn là máy chủ phụ trợ mất nhiều thời gian hơn để phản hồi và bạn cần giải quyết vấn đề đó.

Độ phân giải

  1. Nếu đó là một máy chủ phụ trợ tuỳ chỉnh,
    1. Kiểm tra lý do máy chủ phụ trợ mất nhiều thời gian để phản hồi và xem liệu máy chủ đó có hoạt động hay không cố định/được tối ưu hoá để phản hồi nhanh hơn.
    2. Nếu không thể sửa/tối ưu hoá máy chủ phụ trợ hoặc có một thực tế là máy chủ phụ trợ mất nhiều thời gian, hãy bật chế độ Tăng giá trị thời gian chờ Bộ định tuyến và bộ xử lý tin nhắn.

      Ý tưởng: Đặt giá trị thời gian chờ trên các thành phần khác nhau trong phần sau đơn đặt hàng:

      Thời gian chờ trên ứng dụng > Thời gian chờ trên Bộ định tuyến > Hết thời gian chờ trên Tin nhắn Bộ xử lý > Thời gian chờ trong Proxy API

  2. Nếu là máy chủ phụ trợ NodeJS, thì:
    1. Kiểm tra xem mã NodeJS có thực hiện lệnh gọi đến bất kỳ máy chủ phụ trợ nào khác không và có đang lấy trong một khoảng thời gian dài mới có thể trả lời. Kiểm tra lý do máy chủ phụ trợ mất nhiều thời gian hơn và khắc phục sự cố khi thích hợp.
    2. Kiểm tra xem Trình xử lý thư có đang gặp mức sử dụng CPU hoặc bộ nhớ cao hay không:
      1. Nếu có Trình xử lý thư nào đang gặp tình trạng sử dụng CPU cao, hãy tạo chuỗi kết xuất mỗi 30 giây bằng cách sử dụng lệnh sau:
        JAVA_HOME/bin/jstack -l PID > FILENAME
      2. Nếu Trình xử lý thư đang gặp tình trạng sử dụng bộ nhớ cao thì hãy tạo một vùng nhớ khối xếp kết xuất bằng lệnh sau:
        sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
      3. Khởi động lại Trình xử lý thư bằng lệnh bên dưới. Nó sẽ làm giảm CPU và bộ nhớ:
        /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      4. Giám sát các lệnh gọi API để xác nhận xem vấn đề còn tồn tại hay không.
      5. Liên hệ với Bộ phận hỗ trợ Apigee Edge và cung cấp tệp kết xuất luồng, tệp báo lỗi và nhật ký Trình xử lý thông báo (/opt/apigee/var/log/edge-message-processor/logs/system.log)để trợ giúp điều tra nguyên nhân dẫn đến mức sử dụng CPU/bộ nhớ cao.

Kiểm tra vấn đề này: Cách kiểm soát thời gian chờ cho các máy chủ phụ trợ NodeJS trên Thông báo Bộ xử lý

  • Máy chủ phụ trợ NodeJS chạy trong quy trình JVM của Trình xử lý thông báo. Chiến lược phát hành đĩa đơn giá trị thời gian chờ cho các máy chủ phụ trợ NodeJS được kiểm soát thông qua thuộc tính http.request.timeout.seconds trong tệp nodejs.properties. Chiến dịch này được đặt thành 0 theo mặc định, tức là thời gian chờ bị tắt theo mặc định đối với tất cả Các proxy API thuộc về tổ chức được Trình xử lý thư này cung cấp. Vì vậy, ngay cả khi máy chủ phụ trợ NodeJS mất nhiều thời gian, Trình xử lý thông báo sẽ không hết thời gian chờ.
  • Tuy nhiên, nếu máy chủ phụ trợ NodeJS mất nhiều thời gian và liệu API có cần thời gian yêu cầu là > 57 giây, sau đó Bộ định tuyến sẽ hết thời gian chờ và gửi 504 Gateway Timeout lỗi cho máy khách.

Tình huống 3 – Ứng dụng khách hết thời gian chờ trước khi Bộ định tuyến/Trình xử lý thông báo/máy chủ phụ trợ phản hồi

Bạn có thể gặp 504 Gateway Timeout lỗi nếu ứng dụng hết thời gian chờ trước máy chủ phụ trợ phản hồi. Trường hợp này có thể xảy ra nếu:

  1. Giá trị thời gian chờ được đặt trên ứng dụng khách thấp hơn giá trị thời gian chờ đã đặt trên bộ định tuyến và Trình xử lý tin nhắn:

    Ví dụ: nếu bạn đặt các giá trị thời gian chờ sau đây:

    Hết thời gian chờ trên ứng dụng Hết thời gian chờ trên bộ định tuyến Thời gian chờ trên Trình xử lý thư
    50 giây 57 giây 55 giây

    Trong trường hợp này, tổng thời gian cần thiết để nhận phản hồi cho một yêu cầu API thông qua Edge là <= 50 giây. Thời gian này bao gồm cả thời gian cần thiết để tạo yêu cầu API, yêu cầu đang được được Edge (Bộ định tuyến, Bộ xử lý thư) xử lý, yêu cầu này đang được gửi đến máy chủ phụ trợ (nếu có), phần phụ trợ sẽ xử lý yêu cầu và gửi phản hồi, Edge sẽ xử lý và cuối cùng là gửi lại cho khách hàng.

    Nếu bộ định tuyến không phản hồi ứng dụng trong vòng 50 giây thì ứng dụng sẽ hết thời gian chờ và đóng kết nối với bộ định tuyến. Khách hàng sẽ nhận được mã phản hồi là 504.

    Việc này sẽ khiến NGINX đặt mã trạng thái 499 cho biết ứng dụng đã đóng kết nối.

Chẩn đoán

  1. Nếu ứng dụng hết thời gian chờ trước khi nhận được phản hồi từ bộ định tuyến, thì ứng dụng sẽ đóng kết nối với bộ định tuyến. Trong trường hợp này, bạn sẽ thấy mã trạng thái 499 trong nhật ký truy cập NGINX cho yêu cầu API cụ thể đó.

    Mục nhập nhật ký NGINX mẫu hiển thị mã trạng thái 499

  2. Trong ví dụ trên, xin lưu ý rằng trạng thái của 499 trên NGINX và tổng thời gian đã trôi qua là 50,001 giây. Điều này cho biết ứng dụng đã hết thời gian chờ sau 50,001 giây.
  3. Trong trường hợp này, bạn sẽ thấy Broken Pipe ngoại lệ trong Thông báo Nhật ký bộ xử lý (/opt/apigee/var/log/edge-message-processor/logs/system.log).
    2017-06-09 00:00:25,886 org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-1-11193-11467656-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[A:XX.XX.XX.XX:8998 Remote host:YY.YY.YY.YY:51400]@23751 useCount=1 bytesRead=0 bytesWritten=486 age=330465ms  lastIO=0ms )
    2017-06-09 00:00:25,887  org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-1-11193-11467656-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace:
    java.io.IOException: Broken pipe
            at com.apigee.nio.channels.ClientOutputChannel.writePending(ClientOutputChannel.java:51) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.onWrite(OutputChannel.java:116) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.write(OutputChannel.java:81) ~[nio-1.0.0.jar:na]
    <snipped>
    
  4. Sau khi hết thời gian chờ, Bộ định tuyến sẽ đóng kết nối với Trình xử lý thông báo. Khi Trình xử lý thư hoàn tất quá trình xử lý của nó, cố gắng ghi phản hồi cho Bộ định tuyến. Vì kết nối với Bộ định tuyến đã bị đóng nên bạn sẽ nhận được Broken Pipe exception trên Trình xử lý thông báo.
  5. Ngoại lệ này được mong đợi trong các trường hợp đã giải thích ở trên. Vậy nguyên nhân thực sự khiến lỗi 504 Gateway Timeout vẫn là máy chủ phụ trợ mất nhiều thời gian để phản hồi và bạn cần giải quyết vấn đề đó.

Độ phân giải

  1. Nếu đó là máy chủ phụ trợ tuỳ chỉnh của bạn thì:
    1. Kiểm tra máy chủ phụ trợ để xác định lý do khiến quá trình này mất hơn 57 giây và xem thì có thể khắc phục/tối ưu hoá để phản hồi nhanh hơn.
    2. Nếu không thể sửa/tối ưu hoá máy chủ phụ trợ hoặc nếu bạn biết rằng máy chủ phụ trợ sẽ mất nhiều thời gian, sau đó tăng giá trị thời gian chờ trên và Trình xử lý tin nhắn.

      Ý tưởng: Đặt giá trị thời gian chờ trên các thành phần khác nhau trong phần sau đơn đặt hàng:

      Thời gian chờ trên ứng dụng > Thời gian chờ trên Bộ định tuyến > Hết thời gian chờ trên Tin nhắn Bộ xử lý > Thời gian chờ trong Proxy API

  2. Nếu đó là phần phụ trợ NodeJS, thì:
    1. Kiểm tra xem mã NodeJS có thực hiện lệnh gọi đến bất kỳ máy chủ phụ trợ nào khác không và có phải đó là mất nhiều thời gian để quay lại. Kiểm tra lý do các máy chủ phụ trợ đó mất nhiều thời gian hơn.
    2. Kiểm tra xem Bộ xử lý thư có đang gặp mức sử dụng CPU hoặc bộ nhớ cao hay không:
      1. Nếu Bộ xử lý thư đang gặp mức sử dụng CPU cao, hãy tạo chuỗi kết xuất mỗi 30 giây bằng cách sử dụng lệnh sau:
        JAVA_HOME/bin/jstack -l PID > FILENAME
      2. Nếu Trình xử lý thư đang gặp phải tình trạng sử dụng bộ nhớ cao, hãy tạo một tệp báo lỗi bằng lệnh sau:
        sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
      3. Khởi động lại Trình xử lý thư bằng lệnh bên dưới. Điều này sẽ làm giảm CPU và bộ nhớ:
        /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      4. Giám sát các lệnh gọi API để xác nhận xem vấn đề còn tồn tại hay không.
      5. Liên hệ với Bộ phận hỗ trợ Apigee Edge và cung cấp tệp kết xuất luồng, tệp báo lỗi và nhật ký Trình xử lý thông báo (/opt/apigee/var/log/edge-message-processor/logs/system.log)để giúp họ điều tra nguyên nhân dẫn đến mức sử dụng CPU/bộ nhớ cao.

Bật giá trị thời gian chờ Bộ định tuyến và bộ xử lý thư

Chọn giá trị thời gian chờ cần đặt trên Bộ định tuyến và Trình xử lý thư một cách cẩn thận tuỳ thuộc các yêu cầu của bạn. Không được đặt giá trị thời gian chờ lớn một cách tuỳ ý. Nếu bạn cần hỗ trợ, hãy liên hệ với Hỗ trợ Apigee Edge.

Bộ định tuyến

chown apigee:apigee /opt/apigee/customer/application/router.properties
  1. Tạo tệp /opt/apigee/customer/application/router.properties trên Máy định tuyến, nếu chưa có.
  2. Thêm dòng sau vào tệp này:
    conf_load_balancing_load.balancing.driver.proxy.read.timeout=TIME_IN_SECONDS

    Ví dụ: nếu bạn muốn đặt giá trị thời gian chờ là 120 giây, thì hãy đặt thành sau:

    conf_load_balancing_load.balancing.driver.proxy.read.timeout=120
  3. Đảm bảo tệp này thuộc sở hữu của API:
  4. Khởi động lại bộ định tuyến:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
    
  5. Nếu có nhiều bộ định tuyến, hãy lặp lại các bước trên cho tất cả các bộ định tuyến.

Trình xử lý tin nhắn

  1. Tạo tệp /opt/apigee/customer/application/message-processor.properties trên máy Xử lý thư, nếu chưa có.
  2. Thêm dòng sau vào tệp này:
    conf_http_HTTPTransport.io.timeout.millis=TIME_IN_MILLISECONDS

    Ví dụ: nếu bạn muốn đặt giá trị thời gian chờ là 120 giây, thì hãy đặt thành sau:

    conf_http_HTTPTransport.io.timeout.millis=120000
  3. Đảm bảo tệp này thuộc sở hữu của API:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Khởi động lại Trình xử lý thư:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  5. Nếu bạn có nhiều Trình xử lý thư, hãy lặp lại các bước trên cho tất cả các Thư Bộ xử lý.

Ý tưởng: Đặt giá trị thời gian chờ trên các thành phần khác nhau theo thứ tự sau:

Thời gian chờ trên ứng dụng > Thời gian chờ trên Bộ định tuyến > Thời gian chờ trên Trình xử lý thư &gt; Thời gian chờ trong Proxy API

Edge xử lý yêu cầu API chậm

Nếu Edge rất chậm và/hoặc mất nhiều thời gian để xử lý yêu cầu API, thì bạn sẽ nhận được lỗi 504 Gateway Timeout lỗi.

Chẩn đoán

  1. Theo dõi API bị ảnh hưởng trong giao diện người dùng Edge.
  2. Chờ lỗi xảy ra hoặc nếu bạn có lệnh gọi API, hãy thực hiện một số lệnh gọi API và tái tạo lỗi 504 Gateway Timeout.
  3. Lưu ý: trong trường hợp này, bạn có thể thấy phản hồi thành công trong công cụ Theo dõi.
    1. Bộ định tuyến/ứng dụng hết thời gian chờ vì Trình xử lý thư không phản hồi lại trong khoảng thời gian chờ được chỉ định trên Bộ định tuyến/máy khách (bất kỳ ứng dụng nào có khoảng thời gian hết thời gian chờ thấp nhất). Tuy nhiên, Đơn vị xử lý thư sẽ tiếp tục xử lý yêu cầu và có thể hoàn tất thành công.
    2. Ngoài ra, giá trị HTTPTransport.io.timeout.millis được đặt trên Trình xử lý thư chỉ kích hoạt nếu Trình xử lý thư giao tiếp với HTTP/HTTPS máy chủ phụ trợ. Nói cách khác, thời gian chờ này sẽ không được kích hoạt khi bất kỳ chính sách nào (nếu so với chính sách ServiceAnnotation) trong Proxy API mất nhiều thời gian.
  4. Sau khi xảy ra lỗi, hãy kiểm tra yêu cầu cụ thể có thời gian lưu .
  5. Kiểm tra thời gian đã trôi qua ở mỗi giai đoạn và ghi chú về giai đoạn có nhiều thời gian nhất chi tiêu.
  6. Nếu bạn nhận thấy thời gian trôi qua lâu nhất trong bất kỳ chính sách nào khác ngoài Dịch vụ Chính sách chú thích, sau đó cho biết rằng Edge sẽ mất nhiều thời gian để xử lý của bạn.
  7. Dưới đây là dấu vết giao diện người dùng mẫu cho thấy thời gian đã trôi qua rất cao trên Chính sách JavaScript:

  8. Trong ví dụ trên, bạn nhận thấy rằng chính sách JavaScript mất nhiều thời gian bất thường khoảng 245 giây.

Độ phân giải

  1. Kiểm tra xem chính sách có mất nhiều thời gian để phản hồi hay không và có mã tuỳ chỉnh nào không có thể mất nhiều thời gian để xử lý. Nếu có mã như vậy, hãy xem liệu bạn có thể sửa/tối ưu hoá mã đã xác định.
  2. Nếu không có mã tuỳ chỉnh có thể dẫn đến thời gian xử lý lâu, hãy kiểm tra xem Thông báo Bộ xử lý đang gặp phải tình trạng sử dụng CPU hoặc bộ nhớ cao:
    1. Nếu có Trình xử lý thư nào đang gặp tình trạng sử dụng CPU cao, hãy tạo chuỗi kết xuất mỗi 30 giây bằng cách sử dụng lệnh sau:
      JAVA_HOME/bin/jstack -l PID > FILENAME
    2. Nếu Trình xử lý thông báo đang có mức sử dụng Bộ nhớ cao, hãy tạo một tệp báo lỗi bằng lệnh sau:
      sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
    3. Khởi động lại Trình xử lý thư bằng lệnh bên dưới. Thao tác này sẽ làm giảm CPU và Bộ nhớ.
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    4. Giám sát các lệnh gọi API và xác nhận xem vấn đề còn tồn tại hay không.
    5. Liên hệ với Bộ phận hỗ trợ Apigee Edge và cung cấp chuỗi thảo luận tệp kết xuất, tệp báo lỗi và nhật ký Trình xử lý thông báo (/opt/apigee/var/log/edge-message-processor/logs/system.log)để giúp họ điều tra nguyên nhân dẫn đến mức sử dụng CPU/bộ nhớ cao.

Chẩn đoán các sự cố bằng tính năng Giám sát API

Tính năng Giám sát API giúp bạn nhanh chóng tách biệt các khu vực có vấn đề để chẩn đoán các lỗi, hiệu suất và độ trễ cũng như nguồn gốc của các vấn đề đó. chẳng hạn như ứng dụng dành cho nhà phát triển, proxy API, mục tiêu phụ trợ hoặc nền tảng API.

Xem qua một tình huống mẫu minh hoạ cách khắc phục sự cố 5xx với API của bạn bằng cách sử dụng Giám sát API. Ví dụ: bạn có thể muốn thiết lập cảnh báo để được thông báo khi số lượng mã trạng thái 504 vượt quá ngưỡng cụ thể.