Lỗi 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

Không triển khai được các bản sửa đổi proxy API thông qua giao diện người dùng Edge hoặc API quản lý kèm theo lỗi hết thời gian chờ.

Thông báo lỗi

Click to change deployment status. 
The revision is deployed and traffic can flow, but flow may be impaired. 
Error: Call timed out; either server is down or server is not reachable

Nguyên nhân có thể xảy ra

Nguyên nhân điển hình dẫn đến vấn đề này là:

Nguyên nhân Chi tiết Đối với
Vấn đề về kết nối mạng Lỗi giao tiếp giữa Máy chủ quản lý và Bộ xử lý thư do vấn đề về kết nối mạng hoặc quy tắc tường lửa. Chỉ dành cho người dùng trên đám mây riêng tư
Gói proxy API lớn Trình xử lý thông báo có thể mất nhiều thời gian để kích hoạt nếu gói proxy API có kích thước lớn, dẫn đến tình trạng hết thời gian chờ RPC. Người dùng đám mây riêng và công khai

Vấn đề về kết nối mạng

Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

Chẩn đoán

  1. Nhận trạng thái triển khai của API cụ thể hiển thị lỗi bằng cách sử dụng lệnh gọi API quản lý sau đây:
    curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>
    

    Kết quả mẫu cho thấy lỗi:

    { 
                    "error": "Call timed out; either server is down or server is not reachable", 
                    "status": "error", 
                    "type": [ 
                    "message-processor" 
                    ], 
                    "uUID": "ebbc1078-cbde-4a00-a7db-66a3c1b2b748" 
                    }, 
                    { 
                    "status": "deployed", 
                    "type": [ 
                    "message-processor" 
                    ], 
                    "uUID": "204e2b7e-52f7-46d9-b458-20f9bfb51e6d" 
                    }, 
                    { 
                    "status": "deployed", 
                    "type": [ 
                    "router" 
                    ], 
                    "uUID": "967e63c6-ee95-47c0-9608-f4a32638fb1e" 
                    }, 
                    { 
                    "status": "deployed", 
                    "type": [ 
                    "router" 
                    ], 
                    "state" : "error"
                    } 
    

    Kết quả mẫu ở trên cho thấy lỗi đã xảy ra ở một trong các Bộ xử lý thông báo có UUID "ebbc1078-cbde-4a00-a7db-66a3c1b2b748".

  2. Dựa trên kết quả về trạng thái triển khai cho proxy API của bạn, hãy đăng nhập vào từng Bộ xử lý thông báo bằng mã nhận dạng duy nhất (UUID) tương ứng cho thấy lỗi và thực hiện các bước sau:
    1. Kiểm tra xem Trình xử lý tin nhắn có đang lắng nghe cổng 4528 hay không:
      netstat -an | grep LISTEN | grep 4528
      

      Nếu Bộ xử lý thông báo không lắng nghe trên cổng 4528, hãy khởi động lại Bộ xử lý thông báo:

      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    2. Kiểm tra lại trạng thái triển khai của proxy API bằng cách sử dụng lệnh gọi API quản lý được trình bày trong bước #1 ở trên. Nếu không có lỗi nào thì điều đó cho thấy vấn đề đã được giải quyết.
  3. Nếu sự cố vẫn tiếp diễn, hãy kiểm tra kết nối từ Máy chủ quản lý đến Bộ xử lý thông báo trên cổng 4528 theo các bước sau:
    1. Nếu có thể dùng telnet, hãy dùng telnet:
      telnet <MessageProcessor_IP> 4528
      
    2. Nếu không có telnet, hãy dùng netcat để kiểm tra kết nối như sau:
      nc -vz <MessageProcessor_IP> 4528
      
    3. Nếu bạn nhận được phản hồi "Kết nối bị từ chối" hoặc "Kết nối đã hết thời gian chờ", hãy liên hệ với nhóm điều hành mạng của bạn.
  4. Kiểm tra kết nối từ Trình xử lý thông báo với Máy chủ quản lý trên cổng 4526 theo các bước sau:
    1. Nếu có thể dùng telnet, hãy dùng telnet:
      telnet <management-server-IP> 4526
      
    2. Nếu không có telnet, hãy dùng netcat để kiểm tra kết nối như sau:
      nc -vz <management-server-IP> 4526 
      
    3. Nếu bạn nhận được phản hồi "Kết nối bị từ chối" hoặc "Kết nối đã hết thời gian chờ", hãy liên hệ với nhóm điều hành mạng của bạn.
  5. Làm việc với nhóm điều hành mạng của bạn và làm những việc sau:
    1. Đảm bảo giao thức RPC được cho phép trên cả Máy chủ quản lý và Trình xử lý thông báo.
    2. Xoá mọi giới hạn về tường lửa hoặc quy tắc bảo mật được thiết lập giữa Máy chủ quản lý và Bộ xử lý thông báo để cho phép kết nối với cổng 4526 trên máy chủ quản lý và khả năng kết nối từ Máy chủ quản lý với Bộ xử lý thông báo trên cổng 4528.
  6. Kiểm tra lại trạng thái triển khai (tham khảo bước #1 ở trên). Nếu bạn không thấy lỗi nào, thì tức là lỗi đó đã được khắc phục.
  7. Nếu sự cố vẫn tiếp diễn, hãy kiểm tra xem có sự cố mạng trên Bộ xử lý thư hay không. Nếu có sự cố mạng, việc khởi động lại Bộ xử lý thông báo cụ thể hiển thị lỗi hết thời gian chờ (theo kết quả trạng thái triển khai) có thể giúp khắc phục sự cố:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  8. Nếu vấn đề vẫn tiếp diễn, hãy kiểm tra nhật ký Máy chủ quản lý tại: (/opt/apigee/var/log/edge-management-server/logs/system.log).

    Lỗi cuộc gọi mẫu hết thời gian chờ từ Nhật ký máy chủ quản lý

    2016-05-17 09:29:56,448 org:myorg env:prod qtp281969267-360792 ERROR DISTRIBUTION - RemoteServicesConfigEventHandler.configureServers() : exception for server with uuid e1381db7-d83b-4752-ae04-2de33f07e555 : cause = RPC Error 504: Call timed out communication error = true 
            com.apigee.rpc.RPCException: Call timed out 
            at com.apigee.rpc.impl.AbstractCallerImpl.handleTimeout(AbstractCallerImpl.java:64) ~[rpc-1.0.0.jar:na] 
            at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.handleTimeout(RPCMachineImpl.java:483) ~[rpc-1.0.0.jar:na] 
            at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.access$000(RPCMachineImpl.java:402) ~[rpc-1.0.0.jar:na] 
            at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall$1.run(RPCMachineImpl.java:437) ~[rpc-1.0.0.jar:na] 
            at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:532) ~[netty-all-4.0.0.CR1.jar:na] 
            at io.netty.util.HashedWheelTimer$Worker.notifyExpiredTimeouts(HashedWheelTimer.java:430) ~[netty-all-4.0.0.CR1.jar:na] 
            at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:371) ~[netty-all-4.0.0.CR1.jar:na] 
            at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_79] 
            
    

    Nếu bạn gặp lỗi tương tự như trong ví dụ trên, hãy tăng thời gian chờ RPC trên Máy chủ quản lý để nếu mạng chậm, thì Máy chủ quản lý sẽ có thời gian kết nối với Bộ xử lý thông báo.

Độ phân giải

Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

  1. Thực hiện các bước sau để tăng thời gian chờ RPC:
    1. Tạo tệp /opt/apigee/customer/application/management-server.properties trên máy chủ Quản lý (nếu chưa có).
    2. Thêm dòng sau vào tệp này:
      conf_cluster_rpc.connect.timeout=<time in seconds>
      

      Giá trị thời gian chờ RPC mặc định là 10 và bạn nên tăng giá trị này lên 40 giây. Hãy thiết lập như sau:

      conf_cluster_rpc.connect.timeout=40
      
    3. Đảm bảo tệp này thuộc sở hữu của apigee:
      chown apigee:apigee /opt/apigee/customer/application/management-server.properties
      
    4. Khởi động lại máy chủ quản lý:
      /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
      
    5. Nếu bạn có nhiều Máy chủ quản lý, hãy lặp lại các bước trên cho tất cả các Máy chủ quản lý đó.
    6. Triển khai proxy API trong giao diện người dùng Edge hoặc bằng cách sử dụng lệnh gọi API Quản lý Edge. Nếu proxy API được triển khai mà không gặp vấn đề nào, thì tức là vấn đề đó đã được giải quyết.
  2. Nếu sự cố vẫn tiếp diễn, hãy thu thập lệnh tcpdump từ Máy chủ quản lý và Bộ xử lý thông báo. Bật lệnh tcpdump trên từng máy chủ, sau đó bắt đầu triển khai Proxy API từ giao diện người dùng hoặc sử dụng API quản lý:
    1. Chạy lệnh tcpdump bên dưới từ Máy chủ quản lý:
      tcpdump -i any -s 0 host <message-processor-IP address> -w <File name>
      
    2. Chạy lệnh tcpdump dưới đây qua Bộ xử lý thông báo:
      tcpdump -i any -s 0 host <management-server-IP address> -w <File name>
      
    3. Hãy liên hệ với Bộ phận hỗ trợ Apigee để được hỗ trợ về việc phân tích các tcpdumps và khắc phục thêm sự cố.

Gói proxy API lớn

Chẩn đoán

  1. Kiểm tra kích thước của gói proxy API đang gặp lỗi triển khai.
  2. Nếu kích thước quá lớn (10 MB trở lên) thì rất có thể Trình xử lý thông báo cần thêm thời gian để kích hoạt proxy API.
  3. Nếu kích thước gói Proxy API lớn hơn 15 MB, hãy chuyển sang Gói proxy API lớn hơn 15 MB.

Độ phân giải

Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

Tăng thời gian chờ RPC trên Máy chủ quản lý để Trình xử lý thông báo có đủ thời gian kích hoạt các gói proxy API lớn. Thực hiện các bước sau để tăng giá trị thời gian chờ RPC:

  1. Tạo tệp /opt/apigee/customer/application/management-server.properties trên máy chủ Quản lý nếu chưa có tệp này.
  2. Thêm dòng sau vào tệp này:
    conf_cluster_rpc.connect.timeout=<time in seconds>
    

    Giá trị thời gian chờ RPC mặc định là 10 và bạn nên tăng giá trị này lên 40 giây. Hãy thiết lập như sau:

    conf_cluster_rpc.connect.timeout=40
    
  3. Đảm bảo tệp này thuộc sở hữu của apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    
  4. Khởi động lại máy chủ quản lý:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    
  5. Nếu bạn có nhiều Máy chủ quản lý, hãy lặp lại các bước trên cho tất cả Máy chủ quản lý.

Nếu vấn đề vẫn tiếp diễn, hãy liên hệ với Nhóm hỗ trợ Apigee để được hỗ trợ thêm.