上下傳效能問題排查清單

當我們打 API 時發現上下傳速度不理想甚至無法進行時可以依照下面的排查清單來進行檢查(建議依序排查以節省寶貴的時間

  1. 確認使用帳號的群組設定

    • IP 白名單

      • 白名單設定偏差會造成無法下載的問題

      • 若白名單設定無偏差,可以檢查 api_filter.xml or filters_config.xml 的 proxy 設定

    • 最大檔案大小、流量限制…

      • 流量限制:若以 curl 觀察,會發現時有定額大小的流量,時無流量

        • 梯形 / 蛋糕波◢██◣__◢██◣

  2. 網路測試

    • 測驗 navigate-AP, AP-Amos, AP-DB, Amos-Amos 的網路連接可行性

      • curl

        • 可測試 http(s) 服務之通透

        • 可驗證 / 確認系統 (openssl) 面之憑證辨認問題

          • 例如此系統之 openssl 層是否恰當信任了自簽憑證

      • port-tester.py

        • 可應對服務未建立時的測試

        • 可測試以建立之服務 port 之通透

    • 測驗 navigate-AP, AP-Amos, Amos-Amos 的網路連接效能

      • curl

        • 因為有速率報表,所以可用於對 http(s) 服務流量之測試

      • iperf3

        • 需要安裝

        • 需要測試 port 的淨空(測試的 port 不能被佔用)

    • 如果中間有 VIP ,則繞過 VIP 的測試也要進行,以確認 VIP 是否從中作梗

      • e.g. Navigate-AP 有 VIP 時,要測 Navigate-AP(via VIP) 以及 Navigate-AP(direct)

  3. 檢測上下傳時各個機器的 CPU / memory

    • top

    • htop

  4. 測驗 Amos 的 IO 效能

    • dd

    • time cp

      • 因為無法迴避 OS buffer 所以不建議

下面分別詳述

確認使用帳號的群組設定

這項設定可以透過 OSM 方便地查找。如果沒有操作 OSM 的權限,可以聯絡有權限的人幫忙尋找。

若可以直接碰到 DB ,則可以利用 UserServiceQuota + PackageAttrs 的資訊來確認。

測試兩台機器的網路連通性

curl

若要測試的對象是 http(s) server,可以用大家都耳熟能詳的 curl 測試。方法不贅述。

port-tester.py

此工具適合用在以下情境。

  • 服務未啟動,但想測試 80 / 443 通不通

  • 服務已經啟動,但該服務不是 http(s) 服務

  • 服務尚未架設,但必須驗證防火牆設定

工具需要 python2/3 才可以執行

服務端(若本來的服務尚未就緒)

$ python port-tester.py server -i 192.168.1.228 -p 9999 starting up on 192.168.1.228 port 9999 Echo server started

測試端

$ # connection is good $ python port-tester.py client -i 192.168.1.228 -p 9999 connecting to 192.168.1.228 port 9999 Data is not provided Connection opened successfully Closing socket $ # connection is not okay $ python port-tester.py client -i 192.168.1.228 -p 9998 connecting to 192.168.1.228 port 9998Traceback (most recent call last): File "port-tester.py", line 124, in <module> main(sys.argv[1:]) File "port-tester.py", line 121, in main sys.exit(get_action(pargs.action)(pargs)) File "port-tester.py", line 69, in action_client sock.connect(server_address) File "/usr/lib64/python2.7/socket.py", line 228, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 111] Connection refused

socket.error 都可以表示連接有問題

--help 看更多

$ python port-tester.py server --help usage: Port tester V20200426-1040 server [-h] [-i IP] -p PORT optional arguments: -h, --help show this help message and exit -i IP, --ip IP listening ip -p PORT, --port PORT listening port $ python port-tester.py client --help usage: Port tester V20200426-1040 client [-h] -i IP -p PORT [-d DATA_SOURCE] [-e] optional arguments: -h, --help show this help message and exit -i IP, --ip IP target ip -p PORT, --port PORT target port -d DATA_SOURCE, --data DATA_SOURCE Data (from a local file). When not assigned, the client checks if the port is open -e, --echo Expecting an echo server awaits in the remote target

port-tester.py 可以在平台分享工具箱中取得。

 

 

測試兩台機器的網路效能

iperf3

此工具需要進行安裝

使用上需要指定一架機器為接受端 (server),另一個為發送端 (client)

接受端啟動(使用預設 5201 port)

接受端啟動(使用指定的 port)

接著啟動發送端 (client)

發送端會有如下訊息。注意紅框部份

而接收端也會有訊息如下。注意紅色框框部份

測驗機器硬碟的 IO 效能

dd (write)

count 的單位是 block 。一個 block 多為 512 bytes 。Block size 可以用 bs 調整。

執行後範例如下,注意紅色框框部份

如果在數秒內便寫入完成,則建議調大 count ,或者加上 oflag=nocache 以獲得更真實的結果

dd (read)

得到的結果類似上圖。