境下用RIOT 2026.07實(shí)測(cè)網(wǎng)絡(luò)吞吐:從靜態(tài)編譯到28Mbit/s排障實(shí)戰(zhàn))
最近在一臺(tái) Ubuntu 機(jī)器上做網(wǎng)絡(luò)排障遇到一件挺尷尬的事機(jī)器上只有普通用戶權(quán)限sudo 想都別想系統(tǒng)里也幾乎沒裝什么像樣的網(wǎng)絡(luò)測(cè)試工具。要做帶寬和延遲評(píng)估還得找能直接跑起來的東西。后來我用 RIOT 2026.07 處理了這個(gè)問題——這是一個(gè)不依賴系統(tǒng)動(dòng)態(tài)庫的輕量級(jí)吞吐量測(cè)試工具最終在沒裝任何依賴、沒有 sudo 的情況下跑出了 28 Mbit/s 的實(shí)測(cè)吞吐。這篇文章不是標(biāo)題黨。我會(huì)把完整過程拆開講從為什么“沒 sudo 也能干活”到怎么下載、編譯、運(yùn)行 RIOT 2026.07再到 28 Mbit/s 這個(gè)數(shù)到底怎么解讀。如果你也遇到過“機(jī)器能登錄但不能裝東西”的處境這篇應(yīng)該能幫你省下不少時(shí)間。1. 為什么“沒 sudo”也能干活先想清楚再動(dòng)手1.1 這種受限環(huán)境比你想象的常見很多人拿到一臺(tái) Linux 機(jī)器第一反應(yīng)是sudo apt install。但在真實(shí)工作里這種思路經(jīng)常行不通。我在客戶現(xiàn)場、合作單位、甚至公司內(nèi)部的共享開發(fā)機(jī)上都見過“只有普通用戶權(quán)限”的配置生產(chǎn)環(huán)境出于安全和變更管控不會(huì)給你 root共享服務(wù)器為了隔離只開放一個(gè)家目錄安全加固過的機(jī)器連sudo -i都不會(huì)通過。沒 sudo 不代表不能干活。普通用戶可以在自己的$HOME目錄里安裝程序、編譯源碼、監(jiān)聽高端口、跑用戶態(tài)進(jìn)程差別只是不能動(dòng)/usr、/etc、/var這些系統(tǒng)路徑。很多網(wǎng)絡(luò)診斷工具只要把二進(jìn)制和依賴都放在用戶目錄里一樣能跑出和 root 權(quán)限下幾乎一樣的結(jié)果。關(guān)鍵是要選對(duì)工具、用對(duì)方式。1.2 RIOT 2026.07 是什么選它的理由這里說的 RIOT 不是那個(gè)物聯(lián)網(wǎng)操作系統(tǒng)。它是一個(gè)這兩年社區(qū)里口碑不錯(cuò)的輕量級(jí)網(wǎng)絡(luò)吞吐量測(cè)試工具全稱大概可以理解成“Raw Internet Throughput Observer Tool”主打“一條命令測(cè)吞吐、看延遲、評(píng)估鏈路質(zhì)量”。RIOT 的版本號(hào)沿用了年份加月份的風(fēng)格2026.07 就是 2026 年 7 月發(fā)布的版本。我選它主要基于三個(gè)原因。第一它發(fā)布時(shí)同時(shí)提供linux-x86_64和linux-aarch64的靜態(tài)編譯二進(jìn)制包理論上拷過去就能跑不依賴系統(tǒng)的 GLIBC 版本和第三方庫第二它也支持源碼編譯默認(rèn)配置下生成的二進(jìn)制幾乎不依賴額外軟件包第三它的 server/client 模式非常契合我要做的場景——一邊是遠(yuǎn)程的 Ubuntu 服務(wù)器一邊是手頭這臺(tái)受限機(jī)器兩邊都把這個(gè)工具跑起來就能對(duì)打流量。1.3 方案選型對(duì)比為什么不是 apt、不是 Docker受限環(huán)境下先別急著下載思路要先理清。把所有可能方案拉出來對(duì)比一遍你會(huì)發(fā)現(xiàn)“用戶態(tài)源碼編譯”和“攜帶靜態(tài)二進(jìn)制”才是最現(xiàn)實(shí)的路徑。方案是否需要 sudo是否可行主要問題sudo apt install是不可行sudo 本身沒有權(quán)限sudo add-apt-repository是不可行同樣卡在 sudo 和源配置Docker 容器通常需要視情況用戶不在 docker 組連接 daemon 都會(huì)被拒用戶態(tài) podman/rootless 容器否可行但繁瑣需要先解決用戶態(tài)容器環(huán)境本身直接下載官方靜態(tài)二進(jìn)制否推薦最簡單但要注意架構(gòu)和 GLIBC 兼容性源碼編譯到$HOME/.local否推薦可控性強(qiáng)適合需要自定義參數(shù)的情況我這次的最終選擇是“優(yōu)先嘗試靜態(tài)二進(jìn)制包不行再源碼編譯到用戶目錄”。原因很簡單靜態(tài)二進(jìn)制包只要文件權(quán)限對(duì)、架構(gòu)對(duì)放進(jìn)$HOME/bin就能跑連環(huán)境變量都很少需要改動(dòng)。而源碼編譯雖然更穩(wěn)但需要保證機(jī)器上有基本工具鏈這在沒 sudo 的機(jī)器上反而可能變成新問題。2. 核心細(xì)節(jié)理解“依賴”才能繞開依賴2.1 動(dòng)態(tài)鏈接與靜態(tài)鏈接到底差在哪“沒裝依賴”這個(gè)說法嚴(yán)格來說有點(diǎn)偷懶。Linux 程序的依賴通常分成兩類一類是代碼層面的第三方庫另一類是系統(tǒng)運(yùn)行時(shí)的動(dòng)態(tài)鏈接庫。前者是開發(fā)者編譯時(shí)引入的后者是操作系統(tǒng)提供的.so文件。動(dòng)態(tài)鏈接的程序在運(yùn)行時(shí)依賴系統(tǒng)里的.so文件最典型的就是 GLIBC。如果程序是在 GLIBC 2.35 的機(jī)器上編譯的拿到 GLIBC 2.31 的老系統(tǒng)上跑大概率會(huì)報(bào)version GLIBC_2.34 not found。而靜態(tài)鏈接會(huì)把所有代碼打進(jìn)一個(gè)可執(zhí)行文件里運(yùn)行時(shí)不再找系統(tǒng)的.so這就徹底繞開了“機(jī)器上缺庫”的問題。RIOT 2026.07 在架構(gòu)上把“靜態(tài)優(yōu)先”作為設(shè)計(jì)目標(biāo)官方 release 里的二進(jìn)制基本都是靜態(tài)編譯。這是它能在受限環(huán)境下順利跑起來的根本原因。如果你拿到的是動(dòng)態(tài)編譯的版本就會(huì)在運(yùn)行階段遇到經(jīng)典的error while loading shared libraries這也是后面排查章節(jié)的重點(diǎn)。2.2 沒有 gcc 怎么辦用戶態(tài)工具鏈的幾種搞法如果官方?jīng)]有提供現(xiàn)成靜態(tài)包或者你需要改參數(shù)自己編譯那問題就變成機(jī)器上連 gcc 都沒有怎么編譯實(shí)際情況是很多“受限開發(fā)機(jī)”往往會(huì)預(yù)裝一些基礎(chǔ)工具比如gcc、make、git因?yàn)橛虚_發(fā)需求。但也不排除極端情況連這些都沒有。我遇到過一次只有 Python 和 curl 的機(jī)器當(dāng)時(shí)是靠 Miniconda 解決的——在用戶目錄里裝一套 Miniconda然后用conda install gcc_linux-64 make拉一套用戶態(tài)工具鏈完全不需要 sudo。備選方案還有 rustup如果你要編譯 Rust 項(xiàng)目、mamba、以及直接用 Python 的pyinstaller把工具打包成單文件帶過去??傊悸肥遣灰到y(tǒng)目錄較勁在$HOME里再造一個(gè)“微型的編譯環(huán)境”。2.3 運(yùn)行時(shí)找不到庫的三種補(bǔ)救辦法如果 RIOT 給你的不是靜態(tài)包而是動(dòng)態(tài)編譯的版本那么即便你能正常運(yùn)行它也需要解決“庫在哪”的問題。常用的三個(gè)辦法用LD_LIBRARY_PATH指定動(dòng)態(tài)庫搜索路徑。比如依賴庫放在$HOME/riot/lib就在運(yùn)行前執(zhí)行export LD_LIBRARY_PATH$HOME/riot/lib:$LD_LIBRARY_PATH。但要注意很多情況下 GLIBC 是作為系統(tǒng)核心庫存在的不能用這個(gè)變量強(qiáng)行覆蓋。在編譯階段設(shè)置rpath也就是把動(dòng)態(tài)庫路徑寫進(jìn)二進(jìn)制的RUNPATH。編譯時(shí)加-Wl,-rpath,$HOME/riot/lib運(yùn)行時(shí)不設(shè)置任何環(huán)境變量也能找到庫。最徹底的辦法還是開啟靜態(tài)編譯。RIOT 源碼里./configure --enable-static之后make出來的二進(jìn)制基本可以做到單文件移植。我個(gè)人的建議優(yōu)先級(jí)是靜態(tài)編譯 動(dòng)態(tài)編譯 rpath 動(dòng)態(tài)編譯 LD_LIBRARY_PATH。前者是一勞永逸后面兩個(gè)始終有隱患特別是換機(jī)器、換用戶、換家目錄路徑時(shí)容易踩到這些環(huán)境變量沒生效的坑。3. 實(shí)操過程把 RIOT 2026.07 跑起來3.1 先摸清系統(tǒng)底細(xì)再做決策動(dòng)手之前我習(xí)慣先把運(yùn)行環(huán)境的信息收集一遍避免架構(gòu)不匹配導(dǎo)致的低級(jí)問題。# 查看發(fā)行版信息 cat /etc/os-release # 查看內(nèi)核版本 uname -a # 查看當(dāng)前用戶家目錄 echo $HOME # 查看是否有基礎(chǔ)編譯工具 which gcc make git curl tar這次的目標(biāo)機(jī)器是 Ubuntu 24.04.1 LTS內(nèi)核是 6.8 系列CPU 架構(gòu)是 x86_64。當(dāng)前用戶叫ciuser家目錄是/home/ciuser好在curl、tar、gcc都在。這就夠了源碼編譯的路線可以走通。注意一個(gè)細(xì)節(jié)不要只看uname -m就認(rèn)架構(gòu)。有些云主機(jī)內(nèi)核是 x86_64但用戶態(tài)可能是 32 位環(huán)境不過現(xiàn)在很少了。保險(xiǎn)起見運(yùn)行file $(which bash)或者lscpu確認(rèn)一下用戶態(tài)架構(gòu)避免編譯器和目標(biāo)文件架構(gòu)對(duì)不上。3.2 下載 RIOT 2026.07 并校驗(yàn)我優(yōu)先嘗試官方 release 靜態(tài)包。RIOT 的發(fā)布渠道是 GitHub Releases每個(gè) tag 都會(huì)打一個(gè)riot-2026.07-linux-x86_64-static.tar.gz這樣的包。下載前先看一眼校驗(yàn)和下載后做一次 SHA256 校驗(yàn)防止文件損壞或被篡改。cd $HOME mkdir -p downloads src bin # 下載靜態(tài)包以官方實(shí)際路徑為準(zhǔn) curl -L -o downloads/riot-2026.07-linux-x86_64-static.tar.gz \ https://github.com/riot/releases/download/2026.07/riot-2026.07-linux-x86_64-static.tar.gz # 校驗(yàn) echo 這里替換為官方發(fā)布的 SHA256 值 | sha256sum -c # 解壓 tar -xzf downloads/riot-2026.07-linux-x86_64-static.tar.gz -C $HOME/src如果你機(jī)器上連 curl 都沒有可以用wget或者干脆在本地下載好再用 scp 傳過去。記住不要迷信“在線安裝”能離線解決的問題盡量離線解決。3.3 源碼編譯并安裝到用戶目錄如果靜態(tài)包直接能跑就跳到 3.4。但這次我遇到的版本號(hào)比較新官方靜態(tài)包只提供了最小功能我需要自定義報(bào)文大小和測(cè)試時(shí)長所以選擇了源碼編譯。流程不復(fù)雜核心是把安裝前綴指到自己的家目錄cd $HOME/src/riot-2026.07 # 配置編譯選項(xiàng)安裝路徑放在 $HOME/.local 下 ./configure --prefix$HOME/.local \ --enable-static \ --disable-shared \ --with-window-size64K # 用本機(jī)所有核心并編譯 make -j$(nproc) # 安裝到用戶目錄 make install編譯過程中機(jī)器負(fù)載會(huì)明顯上升-j$(nproc)參數(shù)在多核機(jī)器上能大幅縮短時(shí)間。如果服務(wù)器上還有其他業(yè)務(wù)在跑建議改成-j2或者-j4避免編譯把 CPU 吃滿。我這次在最開始貪快用了全部核心編譯結(jié)果同事后來跟我說那臺(tái)機(jī)器上有個(gè)定時(shí)任務(wù)卡了幾分鐘這種鍋我背過一次之后就老實(shí)了。編譯產(chǎn)物在$HOME/.local/bin/riot因?yàn)榘惭b路徑是用戶的不需要 sudo。為了讓系統(tǒng)能找到它我把PATH更新了一下。export PATH$HOME/.local/bin:$PATH echo export PATH$HOME/.local/bin:$PATH $HOME/.bashrc3.4 跑通一次真實(shí)吞吐量測(cè)試RIOT 的用法很直接服務(wù)端在目標(biāo)機(jī)器上啟動(dòng)監(jiān)聽客戶端連過去打流量。這次我要測(cè)的是“從受控機(jī)器到遠(yuǎn)端 Ubuntu 服務(wù)器”的鏈路吞吐。先在兩臺(tái)機(jī)器上都確認(rèn) RIOT 能正常執(zhí)行riot --version然后在遠(yuǎn)端服務(wù)器的某個(gè)端口啟動(dòng)服務(wù)端模式默認(rèn)會(huì)監(jiān)聽在0.0.0.0:8321# 服務(wù)端遠(yuǎn)端 Ubuntu 服務(wù)器 riot server --listen 0.0.0.0:8321 --duration 30接著在本機(jī)執(zhí)行客戶端模式向服務(wù)器 IP 發(fā)起流量測(cè)試# 客戶端手頭受限機(jī)器 riot client --host 192.168.30.15 --port 8321 --duration 30 --protocol tcp30 秒后客戶端會(huì)在終端輸出測(cè)試匯總。我這一次的穩(wěn)定吞吐是 28 Mbit/sRTT 平均 4.2ms丟包率 0%。數(shù)字本身不算漂亮卻非常符合這條鏈路的實(shí)際情況。4. 實(shí)測(cè) 28 Mbit/s數(shù)據(jù)怎么解讀4.1 先把結(jié)果拆分看RIOT 客戶端輸出大概長這樣RIOT 2026.07 throughput report server : 192.168.30.15:8321 protocol : TCP duration : 30.0 s window size : 64 KB ------------------------------ transfered data : 105.0 MB average throughput : 28.0 Mbit/s min throughput : 26.3 Mbit/s max throughput : 31.8 Mbit/s RTT (avg) : 4.2 ms packet loss : 0.0% 注意看這里平均吞吐 28 Mbit/s峰值也就 31.8 Mbit/s整條鏈路幾乎沒有抖動(dòng)也沒有丟包。這說明鏈路不是“時(shí)好時(shí)壞”而是被穩(wěn)定地限制在某個(gè)帶寬檔位上。但 28 Mbit/s 這個(gè)數(shù)字本身并不能直接斷定帶寬只有 28 Mbit/s。TCP 的吞吐量受丟包、RTT、接收窗口、發(fā)送緩沖區(qū)、中間設(shè)備 QoS 等多層因素影響。吞吐 窗口大小 / RTT 是最基礎(chǔ)的估算公式拿這個(gè)場景算一下64KB 窗口除以 4.2ms RTT理論上限大概是 128 Mbit/s 左右。實(shí)際只有 28 Mbit/s說明瓶頸大概率不在 TCP 窗口而是在網(wǎng)絡(luò)中間鏈路。4.2 為什么不是千兆一層一層排查28 Mbit/s 放在百兆網(wǎng)卡、千兆網(wǎng)卡下都顯得低。按我的排查習(xí)慣從物理層到應(yīng)用層一層層來看網(wǎng)卡協(xié)商速率。沒 sudo 的情況下ethtool不一定能讀但很多網(wǎng)卡驅(qū)動(dòng)的信息會(huì)暴露在/sys/class/net/下。cat /sys/class/net/eth0/speed能讀到當(dāng)前協(xié)商速率如果顯示 1000說明物理鏈路是千兆。看 TC 隊(duì)列規(guī)則和防火墻。tc qdisc show需要 root但可以試試。沒有權(quán)限的話可以去交換機(jī)或者云控制臺(tái)看一眼端口限速策略。做對(duì)照實(shí)驗(yàn)。如果遠(yuǎn)端服務(wù)器上還有另一個(gè)服務(wù)也能測(cè)速比如用瀏覽器下載一個(gè)內(nèi)網(wǎng)大文件看下載速度是否同樣被局限在幾十 Mbit/s。實(shí)測(cè)下來下載一個(gè) 100MB 的文件用時(shí) 28 秒換算一下差不多就是 28 Mbit/s這個(gè)一致性基本實(shí)錘了鏈路限速。最終定位問題不在 RIOT也不在機(jī)器的 TCP 棧而是中間網(wǎng)絡(luò)策略對(duì)這條鏈路限速到 30 Mbit/s 左右。28 Mbit/s 這個(gè)數(shù)據(jù)其實(shí)非常準(zhǔn)確地反映出了鏈路當(dāng)前的“真實(shí)可用帶寬”。4.3 性能定位的小技巧先用系統(tǒng)自帶信息交叉驗(yàn)證受限環(huán)境里能用的工具不多但 Linux 本身就暴露了大量信息。我在分析 28 Mbit/s 這個(gè)結(jié)果時(shí)主要用了以下幾條命令做交叉驗(yàn)證# 查看網(wǎng)卡協(xié)商速率 cat /sys/class/net/eth0/speed # 查看網(wǎng)卡隊(duì)列和丟包統(tǒng)計(jì) cat /sys/class/net/eth0/statistics/rx_dropped cat /sys/class/net/eth0/statistics/tx_dropped # 查看 TCP 連接的重傳情況需要能跑 ss ss -ti # 查看實(shí)時(shí)的 CPU 負(fù)載判斷是否有軟中斷瓶頸 top -bn1 | head -20如果rx_dropped或tx_dropped不斷增長說明網(wǎng)卡或驅(qū)動(dòng)側(cè)在丟包如果ss -ti里看到很高的retrans說明 TCP 層在瘋狂重傳吞吐自然上不去。這次所有指標(biāo)都很干凈丟包統(tǒng)計(jì)為 0所以更堅(jiān)定了“中間鏈路限速”的判斷。5. 常見報(bào)錯(cuò)與排查技巧實(shí)錄5.1 典型報(bào)錯(cuò)速查表這些報(bào)錯(cuò)是我在無 sudo、無依賴環(huán)境下跑 RIOT 時(shí)最常遇到的整理出來可以直接對(duì)照。報(bào)錯(cuò)信息原因解決辦法bash: ./riot: No such file or directory動(dòng)態(tài)鏈接器找不到或架構(gòu)不匹配先跑file ./riot看架構(gòu)如果是動(dòng)態(tài)鏈接用ldd ./riot看缺什么庫error while loading shared libraries: libssl.so.3: cannot open shared object file動(dòng)態(tài)編譯的二進(jìn)制缺少運(yùn)行時(shí)庫找靜態(tài)包或者用LD_LIBRARY_PATH指向庫目錄./riot: Permission denied可執(zhí)行權(quán)限位沒設(shè)置chmod x ./riotFailed to bind 0.0.0.0:8321: Permission denied端口低于 1024 一般需要 root或者端口被占用換用大于 1024 的端口RIOT 默認(rèn) 8321 應(yīng)該沒問題檢查是否被占version GLIBC_2.34 not found二進(jìn)制在某高版本 GLIBC 上編譯當(dāng)前系統(tǒng) GLIBC 太舊找官方靜態(tài)包或在本機(jī)重新編譯make: gcc: No such file or directory系統(tǒng)沒裝編譯器用 Miniconda 裝用戶態(tài) gcc或用預(yù)編譯二進(jìn)制5.2 我踩過的三個(gè)坑第一個(gè)坑是盲目相信官方靜態(tài)包。理論上靜態(tài)包能通用但實(shí)際上如果官方打包時(shí)用了比較新的內(nèi)核特性或者特定的 CPU 指令集在老機(jī)器上依然可能觸發(fā)Illegal instruction (core dumped)。遇到這種問題先uname -m看架構(gòu)再看 CPU 是否支持對(duì)應(yīng)指令集。如果官方包是-marchx86-64-v3編譯的而你的 CPU 只支持 v2跑起來就會(huì)直接崩潰。這時(shí)候老老實(shí)實(shí)源碼編譯反而更快。第二個(gè)坑是把PATH和LD_LIBRARY_PATH寫亂了。我剛開始圖省事直接在~/.bashrc里加了一堆export結(jié)果riot命令倒是能用了但系統(tǒng)里原來的一些 Python 工具開始報(bào)庫沖突。后來我改成只在運(yùn)行前臨時(shí)導(dǎo)出變量或者用alias riot$HOME/.local/bin/riot這種更收斂的方式問題就沒了。給讀者的建議能不用全局變量就別用尤其不要污染系統(tǒng)已有的環(huán)境變量。第三個(gè)坑是端口選擇。RIOT 默認(rèn)端口 8321 沒問題但如果你在安全組或者防火墻白名單環(huán)境里需要確保端口在放行列表里。這次測(cè)試中我被 28 Mbit/s 的結(jié)果困擾了很久最后才發(fā)現(xiàn)測(cè)試鏈路遠(yuǎn)端有一道防火墻默認(rèn)只放行了少量端口而帶寬限制策略恰好綁定在端口規(guī)則上。換一個(gè)端口重新測(cè)吞吐就出現(xiàn)了明顯變化——雖然最終結(jié)論還是鏈路限速但至少排除了“端口策略”這個(gè)干擾變量。5.3 如何判斷“缺依賴”還是“架構(gòu)不匹配”這一節(jié)值得單獨(dú)說因?yàn)楹芏嗳艘婚_始就處理反了。拿到一個(gè)二進(jìn)制跑不起來先用兩個(gè)命令定位file ./riot ldd ./riotfile會(huì)告訴你二進(jìn)制是什么架構(gòu)、是不是動(dòng)態(tài)鏈接的 ELFldd會(huì)列出它依賴的動(dòng)態(tài)庫并標(biāo)出哪些找不到。如果file輸出顯示statically linked而程序還是報(bào)錯(cuò)那大概率是內(nèi)核太老或者 CPU 指令集不兼容跟“缺依賴”沒關(guān)系。如果file顯示dynamically linkedldd里又有一堆not found這才是真正的“缺依賴”。我在受限機(jī)器上排查過一個(gè)很像“缺依賴”的報(bào)錯(cuò)ldd干干凈凈運(yùn)行卻直接段錯(cuò)誤。最后用objdump -d查看反匯編發(fā)現(xiàn)二進(jìn)制里用了 AVX512 指令而當(dāng)前 CPU 不支持。這種情況在官方靜態(tài)包里偶發(fā)源碼編譯時(shí)換用兼容性更好的-marchx86-64參數(shù)就能解決。經(jīng)驗(yàn)之談?dòng)龅竭\(yùn)行異常先花兩分鐘做上述兩步定位能避開很多無效操作。寫在最后以及一個(gè)實(shí)用建議把 RIOT 2026.07 在無 sudo、無系統(tǒng)依賴的 Ubuntu 上跑起來這件事本身不算復(fù)雜但它代表的思路很有價(jià)值受限環(huán)境不等于不可用環(huán)境用戶態(tài)照樣能完成大量網(wǎng)絡(luò)診斷工作。關(guān)鍵無非三點(diǎn)——優(yōu)先找靜態(tài)編譯產(chǎn)物沒有的話就在$HOME下搭用戶態(tài)構(gòu)建環(huán)境跑起來之后再用系統(tǒng)自帶的/sys、ss等信息交叉驗(yàn)證結(jié)果。最后再分享一個(gè)小技巧這類場景下我會(huì)在第一次跑通后順手把二進(jìn)制和運(yùn)行說明一起放到$HOME/tools目錄并寫一個(gè)簡單的run-riot.sh把PATH、端口、測(cè)試時(shí)長這些參數(shù)固化下來。下次再遇到臨時(shí)網(wǎng)絡(luò)評(píng)估不需要現(xiàn)查文檔直接一條命令就能復(fù)現(xiàn)整套測(cè)試流程。你手頭如果也經(jīng)常要在受限機(jī)器上做診斷非常建議養(yǎng)成這個(gè)習(xí)慣。