上下傳效能問題排查清單
當我們打 API 時發現上下傳速度不理想甚至無法進行時可以依照下面的排查清單來進行檢查(建議依序排查以節省寶貴的時間)
確認使用帳號的群組設定
IP 白名單
白名單設定偏差會造成無法下載的問題
若白名單設定無偏差,可以檢查
api_filter.xml
orfilters_config.xml
的 proxy 設定
最大檔案大小、流量限制…
流量限制:若以 curl 觀察,會發現時有定額大小的流量,時無流量
梯形 / 蛋糕波◢██◣__◢██◣
網路測試
測驗 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)
檢測上下傳時各個機器的 CPU / memory
top
htop
測驗 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)
得到的結果類似上圖。