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ư |
|
Thời gian chờ xảy ra trên Bộ định tuyến |
|
Thời gian chờ xảy ra trên ứng dụng |
|
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:
- Trình xử lý thư hết thời gian chờ trước khi máy chủ phụ trợ phản hồi.
- 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.
- Ứ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:
- 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
. - 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
. - 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.
- 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ư
- Kiểm tra nhật ký của Trình xử lý thư
(
/opt/apigee/var/log/edge-message-processor/logs/system.log
) -
Nếu bạn thấy lỗi
Gateway Timeout
vàonTimeoutRead
đố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.
- 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
- 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ếuio.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.
- 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
- 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
Độ phân giải
- 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.
- 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
- Kiểm tra nhật ký truy cập NGINX
(
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
) -
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
- 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ư. - 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
- Nếu đó là một máy chủ phụ trợ tuỳ chỉnh,
- 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.
- 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
- Nếu là máy chủ phụ trợ NodeJS, thì:
- 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.
- 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:
- 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
- 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
- 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
- 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.
- 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.
- 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:
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ý
|
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:
- 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
- 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
- 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. - 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>
- 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. - 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
- Nếu đó là máy chủ phụ trợ tuỳ chỉnh của bạn thì:
- 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.
- 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
- Nếu đó là phần phụ trợ NodeJS, thì:
- 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.
- 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:
- 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
- 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
- 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
- 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.
- 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.
- 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:
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
- Tạo tệp
/opt/apigee/customer/application/router.properties
trên Máy định tuyến, nếu chưa có. - 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
- Đảm bảo tệp này thuộc sở hữu của API:
- Khởi động lại bộ định tuyến:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- 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
- Tạo tệp
/opt/apigee/customer/application/message-processor.properties
trên máy Xử lý thư, nếu chưa có. - 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
- Đả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
- Khởi động lại Trình xử lý thư:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 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ư > 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
- 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, hãy thực hiện một số lệnh gọi API
và tái tạo lỗi
504 Gateway Timeout
. - 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.
- 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.
- 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.
- Sau khi xảy ra lỗi, hãy kiểm tra yêu cầu cụ thể có thời gian lưu .
- 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.
- 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.
- 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:
- 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
- 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.
- 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:
- 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
- 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
- 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
- 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.
- 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.
- 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:
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ể.