1. 程式人生 > 實用技巧 >混沌測試--網路類故障注入

混沌測試--網路類故障注入

本文主要記錄使用ChaosBlade工具開展網路類故障注入

來源:文件https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/blade

blade create network delay

網路延遲實驗場景

介紹
可以指定網絡卡、本地埠、遠端埠、目標 IP 延遲。需要特別注意,如果不指定埠、ip 引數,而是整個網絡卡延遲,切記要新增 --timeout 引數或者 --exclude-port 引數,前者是指定執行時間,自動停止銷燬實驗,後者是指定排除掉的延遲埠,兩者都是防止因延遲時間設定太長,造成機器無法連線的情況,如果真實發生此問題,重啟機器即可恢復。

本地埠和遠端埠之間是或的關係,即這兩個埠都會發生延遲,只要指定了本地埠或者遠端埠,無需指定需要排除的埠。埠與 IP 之間是與的關係,即指定的 IP:PORT 發生延遲。
網路延遲場景主要驗證網路異常的情況下,系統的自我容錯能力。
引數

--destination-ip string 目標 IP. 支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1
--exclude-port string 排除掉的埠,預設會忽略掉通訊的對端埠,目的是保留通訊可用。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 22,8000 或者 8000-8010。 這個引數不能與 --local-port 或者 --remote-port 引數一起使用 --exclude-ip string 排除受影響的 IP,支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168
.1.1,192.168.2.1--interface string 網絡卡裝置,例如 eth0 (必要引數) --local-port string 本地埠,一般是本機暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080 --offset string 延遲時間上下浮動的值, 單位是毫秒 --remote-port string 遠端埠,一般是要訪問的外部暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080 --time string 延遲時間,單位是毫秒 (必要引數) --force 強制覆蓋已有的 tc 規則,請務必在明確之前的規則可覆蓋的情況下使用 --ignore-peer-port 針對新增 --exclude-port 引數,報 ss 命令找不到的情況下使用,忽略排除埠 --timeout string 設定執行時長,單位是秒,通用引數

案例

# 訪問本機 80808081 埠延遲 3 秒,延遲時間上下浮動 1 秒
blade create network delay --time 3000 --offset 1000 --interface eth0 --local-port 8080,8081

{"code":200,"success":true,"result":"9b4aa9fabe073624"}

# 可以在另一臺相同網路內的機器通過 telnet 命令驗證,即 telnet xxx.xxx.xxx.xxx 8080
# 銷燬實驗
blade destroy 9b4aa9fabe073624

# 本機訪問外部 14.215.177.39 機器(ping www.baidu.com 獲取到的 IP)80 埠延遲 3 秒
blade create network delay --time 3000 --interface eth0 --remote-port 80 --destination-ip 14.215.177.39

# 可在本機通過 telnet 14.215.177.39 80 命令驗證
# 對整個網絡卡 eth0 做 5 秒延遲,排除 22 和 8000到8080 埠
blade create network delay --time 5000 --interface eth0 --exclude-port 22,8000-8080

# 會發現 22 埠和 80008080 埠不受影響,可在另一臺相同網路內的機器通過分別 telnet xxx.xxx.xxx.xxx 8080 和 telnet xxx.xxx.xxx.xxx 8081 進行測試

實現原理
tc 實現


常見問題

Q: {"code":604,"success":false,"error":"RTNETLINK answers: File exists\n exit status 2 exit status 1"} A: 網路相關的場景實驗已存在,銷燬原有的後再執行。 可以通過 blade status --type create 命令來檢視已執行的實驗, success 狀態的表示正在執行; 如果查詢不到相關實驗,比如已經刪除了原有的 chaosblade 目錄,則可通過以下命令恢復實驗,注意 eth0 替換為你機器的網絡卡裝置:
tc filter del dev eth0 parent 1: prio 4
tc qdisc del dev eth0 root
也可以新增 --force 命令強制覆蓋原有規則。


blade create network dns

篡改 dns 域名解析實驗場景

介紹
此實驗會修改本地的 hosts,篡改域名地址對映。
網路丟包場景主要驗證域名解析異常的情況下,系統的自我容錯能力。
引數

--domain string 域名 (必要引數)
--ip string 對映的 ip (必要引數)
--timeout string 設定執行時長,單位是秒,通用引數

案例

# www.baidu.com 域名不可訪問
blade create network dns --domain www.baidu.com --ip 10.0.0.0

{"code":200,"success":true,"result":"9e7a168079c68fad"}

# 使用 ping www.baidu.com 來驗證,會發現訪問不通。

實現原理
修改 /etc/hosts
常見問題
Q:{"code":604,"success":false,"error":"10.0.0.0 www.baidu.com #chaosblade has been exist exit status 1"} A:表示此條對映已存在,銷燬之前的實驗即可。如果找不到 UID,可以直接修改 /etc/hosts ,刪除包含 #chaosblade 註釋的項即可


blade create network loss

網路丟包實驗場景

介紹
可以指定網絡卡、本地埠、遠端埠、目標 IP 丟包。需要特別注意,如果不指定埠、ip 引數,而是整個網絡卡丟包,切記要新增 --timeout 引數或者 --exclude-port 引數,前者是指定執行時間,自動停止銷燬實驗,後者是指定排除掉的丟包埠,兩者都是防止因丟包率設定太高,造成機器無法連線的情況,如果真實發生此問題,重啟機器即可恢復。

本地埠和遠端埠之間是或的關係,即這兩個埠都會發生丟包,只要指定了本地埠或者遠端埠,無需指定需要排除的埠。埠與 IP 之間是與的關係,即指定的 IP:PORT 發生丟包。

網路丟包場景主要驗證網路異常的情況下,系統的自我容錯能力。

引數

--destination-ip string 目標 IP. 支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1--exclude-port string 排除掉的埠,預設會忽略掉通訊的對端埠,目的是保留通訊可用。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 22,8000 或者 8000-8010。 這個引數不能與 --local-port 或者 --remote-port 引數一起使用
--exclude-ip string 排除受影響的 IP,支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1--interface string 網絡卡裝置,例如 eth0 (必要引數)
--local-port string 本地埠,一般是本機暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080
--percent string 丟包百分比,取值在[0, 100]的正整數 (必要引數)
--remote-port string 遠端埠,一般是要訪問的外部暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080
--force 強制覆蓋已有的 tc 規則,請務必在明確之前的規則可覆蓋的情況下使用
--ignore-peer-port 針對新增 --exclude-port 引數,報 ss 命令找不到的情況下使用,忽略排除埠
--timeout string 設定執行時長,單位是秒,通用引數

案例

# 訪問本機 80808081 埠丟包率 70%
blade create network loss --percent 70 --interface eth0 --local-port 8080,8081
​
{"code":200,"success":true,"result":"b1cea124e2383848"}
​
# 可以在另一臺相同網路內的機器通過 curl 命令驗證,即 curl xxx.xxx.xxx.xxx:8080,不使用 telnet 的原因是 telnet 內部有重試機制,影響實驗驗證。如果將 percent 的值設定為 100,可以使用 telnet 驗證。
# 銷燬實驗
blade destroy b1cea124e2383848
​
# 本機訪問外部 14.215.177.39 機器(ping www.baidu.com 獲取到的 IP)80 埠丟包率 100%
blade create network loss --percent 100 --interface eth0 --remote-port 80 --destination-ip 14.215.177.39
​
# 可在本機通過 curl 14.215.177.39 命令驗證,會發現訪問不通。執行 curl 14.215.177.38 是通的。
# 對整個網絡卡 eth0 做 60% 的丟包,排除 22 和 8000到8080 埠
blade create network loss --percent 60 --interface eth0 --exclude-port 22,8000-8080
​
# 會發現 22 埠和 80008080 埠不受影響,可在另一臺相同網路內的機器通過分別執行多次 curl xxx.xxx.xxx.xxx:8080 和 telnet xxx.xxx.xxx.xxx:8081 進行測試
​
# 實現整個網絡卡不可訪問,不可訪問時間 20 秒。執行完成下面命令後,當前的網路會中斷掉,20 秒後恢復。切記!!勿忘 --timeout 引數
blade create network loss --percent 100 --interface eth0 --timeout 20


實現原理
待補充

常見問題

Q: {"code":604,"success":false,"error":"RTNETLINK answers: File exists\n exit status 2 exit status 1"} A: 網路相關的場景實驗已存在,銷燬原有的後再執行。 可以通過 blade status --type create 命令來檢視已執行的實驗, success 狀態的表示正在執行; 如果查詢不到相關實驗,比如已經刪除了原有的 chaosblade 目錄,則可通過以下命令恢復實驗,注意 eth0 替換為你機器的網絡卡裝置:

tc filter del dev eth0 parent 1: prio 4
tc qdisc del dev eth0 root
也可以新增 --force 命令強制覆蓋原有規則。

blade create network corrupt

網路包損壞實驗場景

介紹
可以指定網絡卡、本地埠、遠端埠、目標 IP 包損壞。需要特別注意,如果不指定埠、ip 引數,而是整個網絡卡包損壞,切記要新增 --timeout 引數或者 --exclude-port 引數,前者是指定執行時間,自動停止銷燬實驗,後者是指定排除掉的延遲埠,兩者都是防止機器無法連線的情況,如果真實發生此問題,重啟機器即可恢復。

本地埠和遠端埠之間是或的關係,即這兩個埠都會生效,只要指定了本地埠或者遠端埠,無需指定需要排除的埠。埠與 IP 之間是與的關係,即指定的 IP:PORT 發生包損壞。

引數

--destination-ip string 目標 IP. 支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1--exclude-port string 排除掉的埠,預設會忽略掉通訊的對端埠,目的是保留通訊可用。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 22,8000 或者 8000-8010。 這個引數不能與 --local-port 或者 --remote-port 引數一起使用
--exclude-ip string 排除受影響的 IP,支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1--interface string 網絡卡裝置,例如 eth0 (必要引數)
--local-port string 本地埠,一般是本機暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080
--offset string 延遲時間上下浮動的值, 單位是毫秒
--remote-port string 遠端埠,一般是要訪問的外部暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080
--percent 包損壞百分比,取值是不帶%號的正整數
--force 強制覆蓋已有的 tc 規則,請務必在明確之前的規則可覆蓋的情況下使用
--ignore-peer-port 針對新增 --exclude-port 引數,報 ss 命令找不到的情況下使用,忽略排除埠
--timeout string 設定執行時長,單位是秒,通用引數

案例

# 訪問指定的 ip 請求包損壞,百分比 80%
blade create network corrupt --percent 80 --destination-ip 180.101.49.12 --interface eth0
​
ping 180.101.49.1264 bytes from 180.101.49.12: icmp_seq=100 ttl=50 time=9.75 ms
64 bytes from 180.101.49.12: icmp_seq=101 ttl=50 time=9.94 ms
64 bytes from 180.101.49.12: icmp_seq=102 ttl=50 time=9.76 ms
64 bytes from 180.101.49.12: icmp_seq=107 ttl=50 time=9.80 ms
64 bytes from 180.101.49.12: icmp_seq=109 ttl=50 time=9.71 ms
64 bytes from 180.101.49.12: icmp_seq=111 ttl=50 time=10.2 ms
64 bytes from 180.101.49.12: icmp_seq=118 ttl=50 time=9.72 ms
64 bytes from 180.101.49.12: icmp_seq=119 ttl=50 time=9.94 ms
64 bytes from 180.101.49.12: icmp_seq=120 ttl=50 time=10.0 ms
64 bytes from 180.101.49.12: icmp_seq=121 ttl=50 time=9.86 ms
64 bytes from 180.101.49.12: icmp_seq=122 ttl=50 time=9.76 ms
可以看出執行命令後 icmp_seq=102 開始出現包丟失的情況,執行恢復命令後,從 icmp_seq=118 開始正常

實現原理
tc 實現

blade create network reorder

網路包重排序實驗場景

介紹
可以指定網絡卡、本地埠、遠端埠、目標 IP 包重排。需要特別注意,如果不指定埠、ip 引數,而是整個網絡卡包重複,切記要新增 --timeout 引數或者 --exclude-port 引數,前者是指定執行時間,自動停止銷燬實驗,後者是指定排除掉不受影響的埠,兩者都是防止機器無法連線的情況,如果真實發生此問題,重啟機器即可恢復。

本地埠和遠端埠之間是或的關係,即這兩個埠都會生效,只要指定了本地埠或者遠端埠,無需指定需要排除的埠。埠與 IP 之間是與的關係,即指定的 IP:PORT 發生包重排。

引數

--destination-ip string 目標 IP. 支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1--exclude-port string 排除掉的埠,預設會忽略掉通訊的對端埠,目的是保留通訊可用。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 22,8000 或者 8000-8010。 這個引數不能與 --local-port 或者 --remote-port 引數一起使用
--exclude-ip string 排除受影響的 IP,支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1--interface string 網絡卡裝置,例如 eth0 (必要引數)
--local-port string 本地埠,一般是本機暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080
--offset string 延遲時間上下浮動的值, 單位是毫秒
--remote-port string 遠端埠,一般是要訪問的外部暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080
--correlation string 和上一包的相關性,取值在 0~100,必要引數,例如 --correlation 70
--gap string 包序列大小,取值是正整數,例如 --gap 5
--percent string 立即傳送百分比,取值是不帶%號的正整數,例如 --percent 50,(必要引數)
--time string 網路包延遲時間,單位是毫秒,預設值是 10,取值時正整數
--force 強制覆蓋已有的 tc 規則,請務必在明確之前的規則可覆蓋的情況下使用
--ignore-peer-port 針對新增 --exclude-port 引數,報 ss 命令找不到的情況下使用,忽略排除埠
--timeout string 設定執行時長,單位是秒,通用引數

案例

# 訪問指定的 ip 請求包亂序
blade c network reorder --correlation 80 --percent 50 --gap 2 --time 500 --interface eth0 --destination-ip 180.101.49.12ping 180.101.49.12 -A
​
PING 180.101.49.12 (180.101.49.12) 56(84) bytes of data.
64 bytes from 180.101.49.12: icmp_seq=1 ttl=50 time=510 ms
64 bytes from 180.101.49.12: icmp_seq=2 ttl=50 time=9.66 ms
64 bytes from 180.101.49.12: icmp_seq=4 ttl=50 time=9.70 ms
64 bytes from 180.101.49.12: icmp_seq=3 ttl=50 time=509 ms
64 bytes from 180.101.49.12: icmp_seq=6 ttl=50 time=10.0 ms
64 bytes from 180.101.49.12: icmp_seq=5 ttl=50 time=509 ms
64 bytes from 180.101.49.12: icmp_seq=8 ttl=50 time=9.71 ms
64 bytes from 180.101.49.12: icmp_seq=7 ttl=50 time=509 ms
64 bytes from 180.101.49.12: icmp_seq=10 ttl=50 time=9.72 ms
64 bytes from 180.101.49.12: icmp_seq=9 ttl=50 time=509 ms
64 bytes from 180.101.49.12: icmp_seq=11 ttl=50 time=509 ms
64 bytes from 180.101.49.12: icmp_seq=12 ttl=50 time=509 ms
64 bytes from 180.101.49.12: icmp_seq=13 ttl=50 time=509 ms
64 bytes from 180.101.49.12: icmp_seq=15 ttl=50 time=9.90 ms
64 bytes from 180.101.49.12: icmp_seq=14 ttl=50 time=509 ms
64 bytes from 180.101.49.12: icmp_seq=16 ttl=50 time=509 ms
可以看出執行命令後開始出現包亂序的情況,執行恢復命令後,開始正常

實現原理
tc 實現


blade create network duplicate

網路包重複實驗場景

介紹
可以指定網絡卡、本地埠、遠端埠、目標 IP 包重複。需要特別注意,如果不指定埠、ip 引數,而是整個網絡卡包重複,切記要新增 --timeout 引數或者 --exclude-port 引數,前者是指定執行時間,自動停止銷燬實驗,後者是指定排除掉不受影響的埠,兩者都是防止機器無法連線的情況,如果真實發生此問題,重啟機器即可恢復。

本地埠和遠端埠之間是或的關係,即這兩個埠都會生效,只要指定了本地埠或者遠端埠,無需指定需要排除的埠。埠與 IP 之間是與的關係,即指定的 IP:PORT 發生包重複。

引數

--destination-ip string 目標 IP. 支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1--exclude-port string 排除掉的埠,預設會忽略掉通訊的對端埠,目的是保留通訊可用。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 22,8000 或者 8000-8010。 這個引數不能與 --local-port 或者 --remote-port 引數一起使用
--exclude-ip string 排除受影響的 IP,支援通過子網掩碼來指定一個網段的IP地址, 例如 192.168.1.0/24. 則 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通過都號分隔多個引數,例如 192.168.1.1,192.168.2.1--interface string 網絡卡裝置,例如 eth0 (必要引數)
--local-port string 本地埠,一般是本機暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080
--offset string 延遲時間上下浮動的值, 單位是毫秒
--remote-port string 遠端埠,一般是要訪問的外部暴露服務的埠。可以指定多個,使用逗號分隔或者連線符表示範圍,例如 80,8000-8080
--percent 包重複百分比,取值是不帶%號的正整數
--force 強制覆蓋已有的 tc 規則,請務必在明確之前的規則可覆蓋的情況下使用
--ignore-peer-port 針對新增 --exclude-port 引數,報 ss 命令找不到的情況下使用,忽略排除埠
--timeout string 設定執行時長,單位是秒,通用引數

案例

# 訪問指定的 ip 請求包損壞,百分比 80%
blade create network corrupt --percent 80 --destination-ip 180.101.49.12 --interface eth0
​
ping 180.101.49.1264 bytes from 180.101.49.12: icmp_seq=64 ttl=50 time=9.94 ms
64 bytes from 180.101.49.12: icmp_seq=65 ttl=50 time=9.73 ms
64 bytes from 180.101.49.12: icmp_seq=65 ttl=50 time=9.74 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=66 ttl=50 time=9.77 ms
64 bytes from 180.101.49.12: icmp_seq=66 ttl=50 time=9.80 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=67 ttl=50 time=9.70 ms
64 bytes from 180.101.49.12: icmp_seq=67 ttl=50 time=9.71 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=68 ttl=50 time=11.0 ms
64 bytes from 180.101.49.12: icmp_seq=68 ttl=50 time=11.1 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=69 ttl=50 time=9.78 ms
64 bytes from 180.101.49.12: icmp_seq=69 ttl=50 time=9.78 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=70 ttl=50 time=9.70 ms
64 bytes from 180.101.49.12: icmp_seq=70 ttl=50 time=9.70 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=71 ttl=50 time=9.71 ms
64 bytes from 180.101.49.12: icmp_seq=71 ttl=50 time=9.71 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=72 ttl=50 time=9.73 ms
64 bytes from 180.101.49.12: icmp_seq=72 ttl=50 time=9.74 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=73 ttl=50 time=9.69 ms
64 bytes from 180.101.49.12: icmp_seq=73 ttl=50 time=9.73 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=74 ttl=50 time=9.73 ms
64 bytes from 180.101.49.12: icmp_seq=74 ttl=50 time=9.73 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=75 ttl=50 time=9.68 ms
64 bytes from 180.101.49.12: icmp_seq=75 ttl=50 time=9.68 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=76 ttl=50 time=10.0 ms
64 bytes from 180.101.49.12: icmp_seq=76 ttl=50 time=10.0 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=77 ttl=50 time=9.68 ms
64 bytes from 180.101.49.12: icmp_seq=77 ttl=50 time=9.80 ms (DUP!)
64 bytes from 180.101.49.12: icmp_seq=78 ttl=50 time=9.70 ms
64 bytes from 180.101.49.12: icmp_seq=79 ttl=50 time=9.70 ms
64 bytes from 180.101.49.12: icmp_seq=80 ttl=50 time=9.74 ms
可以看出執行命令後開始出現包重複的情況,執行恢復命令後,開始正常

實現原理
tc 實現

blade create network occupy

網路本地端口占用

介紹
本地端口占用,驗證埠已被佔用的情況下,使用此埠的業務容錯能力

引數

--port string 指定被佔用的埠,(必填項)
--force 強制佔用此埠,會將已使用此埠的程序殺掉
--timeout string 設定執行時長,單位是秒,通用引數

案例

# 指定 8080 端口占用
blade c network occupy --port 8080 --force
​
# 命令執行前
netstat -tanp | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 19562/java
​
# 命令執行後
netstat -tanp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 20041/chaos_occupyn

實現原理
指定埠啟動 server 實現

常見問題
Q: {"code":604,"success":false,"error":"Error: listen tcp :8080: bind: address already in use exit status 1"} A:指定的埠已被佔用,可以新增 --force 引數,強制殺掉使用此埠的程序