Linux入門必看:如何在60秒內分析Linux性能?

2022-01-03 雲加社區

導語 | 當你登陸一臺Linux伺服器之後,因為一個問題要做性能分析時,你會在第1分鐘內做哪些檢測呢?本文將詳細為你介紹在最開始的60秒,如何在命令行模式下,使用已有的Linux標準工具來進行性能優化檢測。

(本文譯自Linux文獻:Linux Performance Analysis in 60,000 Milliseconds.

原文:https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10403c55)

在Netflix,我們有很多EC2的Linux機器,並且也需要很多性能分析工具來監控和檢查它們的性能。包括有針對雲上的監控工具Atlas和按需要進行實例分析的Vector。雖然這些工具能幫助我們解決大多數問題,但是我們有時候還需要登陸機器實例去運行一些標準的Linux性能分析工具。

在60秒內只需要通過運行下面的10個命令就可以對系統資源使用和運行進程有一個很高程度的了解。尋找錯誤信息和飽和度指標,並且可以顯示為請求隊列的長度,或者等待時長。因為它們都很容易理解,然後就是資源利用率。飽和度是指一個資源已經超過了它自己的負荷能力。

uptimedmesg | tailvmstat 1mpstat -P ALL 1pidstat 1iostat -xz 1free -msar -n DEV 1sar -n TCP,ETCP 1top

有些命令需要安裝sysstat工具包。這些命令展示的指標會幫助你完成一些USE(Utilization,Saturation,Errors)方法:定位性能瓶頸的方法論。包括了檢查使用率(Utilization),飽和度(Saturation),所有資源(比如CPU,內存,磁碟等)的錯誤指標(Errors)。同樣也要關注你什麼時候檢查和排除一個資源問題,因為通過排除可以縮小分析範圍,同時也指導了任何後續的檢查。

下面的章節將會通過一個生產系統中的例子來介紹這些命令。要了解更多這些工具的信息,也可以查看它們的幫助手冊。

(一)uptime


$ uptime23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02


這是一個快速展示系統平均負載的方法,這也指出了等待運行進程的數量。在Linux系統中,這些數字包括等待CPU運行的進程數,也包括了被不可中斷I/O(通常是磁碟I/O)阻塞的進程。這給出了資源負載的很直接的展示,可以在沒有其它工具的幫助下更好的理解這些數據。它是唯一快捷的查看系統負載的方式。

這三個數字是以遞減的方式統計了過去1分鐘,5分鐘和15分鐘常數的平均數。這三個數字給我們直觀展示了隨著時間的變化系統負載如何變化。例如,如果你被叫去查看一個有問題的伺服器,並且1分鐘的所代表的值比15分鐘的值低很多,那麼你可能由於太遲登陸機器而錯過了問題發生的時間點。

在上面的例子中,平均負載顯示是在不斷增加的,1分鐘的值是30,相比15分鐘的值19來說是增加了。這個數字這麼大就意味著有事情發生了:可能是CPU需求;vmstat或者mpstat會幫助確認到底是什麼,這些命令會在本系列的第3和第4個命令中介紹。

(二)dmesg|tail

$ dmesg|tail[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0[...][1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

這裡展示的是最近10條系統消息日誌,如果系統消息沒有就不會展示。主要是看由於性能問題導致的錯誤。上面這個例子中包含了殺死OOM問題的進程,丟棄TCP請求的問題。

所以要記得使用這個命令,dmesg命令值得一用。

(三)vmstat 1

$ vmstat 1procs ----memory ---swap-- io---- -system-- -cpu r  b swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  032  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  032  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  032  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  032  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0^C

對虛擬內存統計的簡短展示,vmstat是一個常用工具(最早是幾十年前為BSD創建的)。它每一行列印關鍵的服務信息統計摘要。

vmstat使用參數1來運行的時候,是每1秒列印一條統計信息。在這個版本的vmstat中,輸出的第一行展示的是自從啟動後的平均值,而不是前一秒的統計。所以現在,可以跳過第一行,除非你要看一下抬頭的欄位含義。

每列含義說明:

r: CPU上的等待運行的可運行進程數。這個指標提供了判斷CPU飽和度的數據,因為它不包含I/O等待的進程。可解釋為:「r」 的值比CPU數大的時候就是飽和的。

free:空閒內存,單位是k。如果這個數比較大,就說明你還有充足的空閒內存。「free -m」 和下面第7個命令,可以更詳細的分析空閒內存的狀態。

si,so:交換進來和交換出去的數據量,如果這兩個值為非0值,那麼就說明沒有內存了。

us,sy,id,wa,st:這些是CPU時間的分解,是所有CPU的平均值。它們是用戶時間,系統時間(內核),空閒,等待I/O時間,和被偷的時間(這裡主要指其它的客戶,或者使用Xen,這些客戶有自己獨立的操作域)。

CPU時間的分解可以幫助確定CPU是不是非常忙(通過用戶時間和系統時間累加判斷)。持續的I/O等待則表明磁碟是瓶頸。這種情況下CPU是比較空閒的,因為任務都由於等待磁碟I/O而被阻塞。你可以把等待I/O看作是另外一種形式的CPU空閒,而這個命令給了為什麼它們空閒的線索。

系統時間對於I/O處理來說是必須的。比較高的平均系統時間消耗,比如超過了20%,就有必要進一步探索分析了:也有可能是內核處理I/O效率不夠高導致。

在上面的例子中,CPU時間幾乎都是用戶級別的,說明這是一個應用級別的使用情況。如果CPU的使用率平均都超過了90%。這不一定問題;可以使用 「r」 列來檢查使用飽和度。

(四)mpstat-P ALL 1

$ mpstat -P ALL 1Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.7807:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.9907:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.0007:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.0007:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03[...]

這個命令列印各個CPU的時間統計,可以看出整體CPU的使用是不是均衡的。有一個使用率明顯較高的CPU就可以明顯看出來這是一個單線程應用。

(五)pidstat 1

$ pidstat 1Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/007:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat^C

pidstat命令有點像top命令中的為每個CPU統計信息功能,但是它是以不斷滾動更新的方式列印信息,而不是每次清屏列印。這個對於觀察隨時間變化的模式很有用,同時把你看到的信息(複製粘貼)記到你的調查記錄中。

上面的例子可以看出是2個java進程在消耗CPU。%CPU列是所有CPU的使用率;1591%是說明這個java進程消耗了幾乎16個CPU核。

(六)iostat -xz 1


$ iostat -xz 1Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle 73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %utilxvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03[...]^C

這個工具對於理解塊設備(比如磁碟)很有用,展示了請求負載和性能數據。具體的數據看下面欄位的解釋:

r/s, w/s, rkB/s, wkB/s:這些表示設備上每秒鐘的讀寫次數和讀寫的字節數(單位是k字節)。這些可以看出設備的負載情況。性能問題可能就是簡單的因為大量的文件加載請求。

await:I/O等待的平均時間(單位是毫秒)。這是應用程式所等待的時間,包含了等待隊列中的時間和被調度服務的時間。過大的平均等待時間就預示著設備超負荷了或者說設備有問題了。

avgqu-sz:設備上請求的平均數。數值大於1可能表示設備飽和了(雖然設備通常都是可以支持並行請求的,特別是在背後掛了多個磁碟的虛擬設備)。

%util:設備利用率。是使用率的百分數,展示每秒鐘設備工作的時間。這個數值大於60%則會導致性能很低(可以在await中看),當然這也取決於設備特點。這個數值接近100%則表示設備飽和了。

如果存儲設備是一個邏輯磁碟設備,後面掛載了多個磁碟,那麼100%的利用率則只是表示有些I/O是在100%處理,然而後端的磁碟或許遠遠沒有飽和,還可以處理更多的請求。

請記住,磁碟I/O性能低不一定是應用程式的問題。許多技術通常都被用來實現異步執行I/O,所以應用程式不會直接阻塞和承受延時(比如:預讀取和寫緩衝技術)。

(七)free-m

$ free -m             total       used       free     shared    buffers     cachedMem:        245998      24545     221453         83         59        541-/+ buffers/cache:      23944     222053Swap:            0          0          0

右面兩列展示的是:

buffers:用於塊設備I/O緩衝的緩存。

cached:用於文件系統的頁緩存。

我們只想檢測這些緩存的數值是否接近0。不為0的可能導致較高的磁碟I/O(通過iostat命令來確認)和較差的性能問題。上面的例子看起來沒問題,都還有很多M字節。

「-/+ buffers/cache」 這一行提供了對已使用和空閒內存明確的統計。Linux用空閒內存作為緩存,如果應用程式需要,可以快速拿回去。所以應該包含空閒內存那一列,這裡就是這麼統計的。甚至有一個網站專門來介紹Linux內存消耗的問題:linuxatemyram。

如果在Linux上使用了ZFS文件系統,則可能會更亂,因為當我們在開發一些服務的時候,ZFS有它自己的文件系統緩存,而這部分內存的消耗是不會在free-m這個命令中合理的反映的。顯示了系統內存不足,但是ZFS的這部分緩存是可以被應用程式使用的。



(八)sar-n DEV 1

$ sar -n DEV 1Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015     _x86_64_    (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.0012:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.0012:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.0012:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.0012:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00^C


使用這個工具是可以檢測網絡接口的吞吐:rxkB/s和txkB/s,作為收發數據負載的度量,也是檢測是否達到收發極限。在上面這個例子中,eth0接收數據達到22M字節/秒,也就是176Mbit/秒(網卡的上限是1Gbit/秒)。

這個版本的工具還有一個統計欄位: %ifutil,用於統計設備利用率(全雙工雙向最大值),這個利用率也可以使用Brendan的nicstat工具來測量統計。在這個例子中0.00這種情況就似乎就是沒有統計,這個和nicstat一樣,這個值是比較難統計正確的。

(九)sar-n TCP,ETCP 1

$ sar -n TCP,ETCP 1Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s12:17:21 AM 0.00 0.00 0.00 0.00 0.00^C

這是對TCP關鍵指標的統計,它包含了以下內容:

active/s:每秒本地發起的TCP連接數(例如通過connect()發起的連接)。

passive/s:每秒遠程發起的連接數(例如通過accept()接受的連接)。

retrans/s:每秒TCP重傳數。

負載的粗略估計:新接受連接數(被動),下遊連接數(主動)。可以把主動看作是外部的,被動的是內部,但是這個通常也不是非常準確(例如:當有本地到本地的連接時)。

重傳是網絡或者伺服器有問題的一個信號;可能是一個不可靠的網絡(例如:公網),或者可能是因為伺服器過載了開始丟包。上面這個例子可以看出是每秒新建一個TCP連接。

(十)top

$ toptop - 00:15:40 up 21:56,  1 user,  load average: 31.09, 29.87, 29.92Tasks: 871 total,   1 running, 868 sleeping,   0 stopped,   2 zombie%Cpu(s): 96.8 us,  0.4 sy,  0.0 ni,  2.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem:  25190241+total, 24921688 used, 22698073+free,    60448 buffersKiB Swap:        0 total,        0 used,        0 free.   554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/05 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:08 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched

top命令包含了很多我們前面提到的指標。這個命令可以很容易看出指標的變化表示負載的變化,這個看起來和前面的命令有很大不同。

top的一個缺陷也比較明顯,很難看出變化趨勢,其它像vmstat和pidstat這樣的工具就會很清晰,它們是以滾動的方式輸出統計信息。所以如果你在看到有問題的信息時沒有及時的暫停下來(Ctrl-S是暫停, Ctrl-Q是繼續),那麼這些有用的信息就會被清屏。

還有很多可以使用來深挖系統問題的命令和技術,可以看看Brendan在 2015年講的Linux性能工具介紹 ,這裡面講述了40多個命令,涵蓋了可觀測性,基準測試,調優,靜態性能調優,分析和跟蹤等多個方面。

增值服務部/營銷基礎平臺中心,騰訊遊戲Gcloud雲原生服務開發平臺負責人

許振文,增值服務部/營銷基礎平臺中心,騰訊遊戲Gcloud雲原生服務開發平臺負責人。同時也是Linux內核之旅開源社區的負責人,Istio社區Member和Kubernetes社區Member,參與中國信息通信研究院主導的多個行業標準制定,個人主要關注大數據計算,DevOps,K8S,ServiceMesh技術等。

「Docker VS Kubernetes」是共生還是相愛相殺?

揭秘!是什麼能讓APP快速精準定位?

人機共生時代,分布式機器學習是如何加速的?

手把手教你快速理解gRPC!

相關焦點

  • Linux 大牛收集的 Linux 性能分析工具合集
    【性能分析工具】首先來看一張圖:上圖是Brendan Gregg 的一次性能分析的分享,這裡面的所有工具都可以通過man來獲得它的幫助文檔,下問簡單介紹介紹一下常規的用法:▲ vmstat--虛擬內存統計
  • Linux系統從入門到放棄?
    Linux是一個命令行組成的作業系統,精髓在命令行,學習如何在Linux環境中執行linux命令,包括有關文件、目錄、文件系統、進程等概念,如何使用相應的命令對文件、目錄、進程等進行管理,了解遇到問題時,如何找到幫助信息等等。都將是我們學習入門Linux的第二大步。
  • Linux性能基礎
    而當了解了 linux 基本性能,熟悉其基本指標時,遇到問題往往心裡有底,甚至得心應手。送人玫瑰,手有餘香,特此整理,與君共享。性能指標CPU 使用率提起性能指標,最容易想到的是CPU使用率。linux 作為一個多任務系統,將每個 CPU 的時間劃分為很短的時間片,通過調度器輪流分配給各個任務使用,造成多任務同時運行的錯覺。
  • 如何基準測試 Linux PC 的性能?
    正因為如此,基準測試幾乎就是獲得定量數據、了解系統性能如何的唯一方法――如果你的數據差強人意,這表明應該升級部分PC部件。[1]所以,準備好測試你自己的 PC 了嗎?下面是可供 Linux 用戶使用的一些比較實用的基準測試。
  • 真實記錄我入門學習Linux系統的經歷
    學校不會開一門linux入門的課,身邊估計也不會有同樣喜歡搞linux的同學,所以學習基本全靠自己,遇到了問題主要就是Google了,這過程也許比較痛苦.就是這樣,當別人不學的時候,你的優勢就來了,這就是資源優勢,你可以做別人不會做的事情,這是一件很酷的事情。
  • 在linux下使用noatime提升文件系統性能的方法
    在linux下使用noatime提升文件系統性能的方法 linux系統功能強大,但是目前大多數用戶都是用的是windows系統,對於linux系統來說很多功能用戶還很陌生,本文介紹了在linux下如何使用noatime提升文件系統性能的方法。
  • Linux下33個常用的Find實例
    在當前目錄查找文件使用的名字在當前目錄下,查找所有名稱為linuxprobe.txt的文件# find . -name linuxprobe.txt./linuxprobe.txt2.27.查找最近50天被訪問過的文件# find / -atime 5028.查找最近50天到100天之間修改過的文件# find / -mtime +50 –mtime -10029.查找過去一小時內修改過的文件
  • linux pwn入門學習到放棄
    本文記錄菜鳥學習linux pwn入門的一些過程,詳細介紹linux上的保護機制,分析一些常見漏洞如棧溢出,堆溢出,use after free等,以及一些常見工具集合介紹等。先來學習一些關於linux方面的保護措施,作業系統提供了許多安全機制來嘗試降低或阻止緩衝區溢出攻擊帶來的安全風險,包括DEP、ASLR等。
  • 選擇linux入門教程的三個原則。
    選擇linux入門教程的三個原則。最近網上有一篇文章很火,講的是一名醫生記錄的學習linux系統的經歷,看完之後馬上引起了我的強烈共鳴!我最開始學的是centos系統,想要安裝軟體卻怎麼都不成功,只能在群裡面求救,最後雖然實驗做出來了,但是我依然不懂其中的原因,感覺沒有理論知識做鋪墊真是不行,大家剛開始學習linux系統一定也會遇到很多的問題,這樣不僅會影響到學習的進度,而且長期的實驗做不成功還肯定會影響到我們的學習興趣,我希望通過這篇文章將自己入門經歷中遇到的問題總結出來分享給大家,你們可以少走一些彎路,早日完成自己的夢想
  • linux系統入門用什麼書好
    用戶可以通過網絡或者其他的途徑免費獲得,並且其原始碼也可以隨意的修改,這點其他的作業系統是做不到的;對Linux有了全面的了解後,就知道了為何要學習它了,那接下來就要規劃學習計劃了,剛開始我也很是迷茫,網上關於Linux的書籍太多了,眼花撩論,到底看哪種好呢,於是我去請教Linux學的較好的朋友,向他們取經,他們都說《Linux就該這麼學》這本書不錯,知識全面且易懂,他們都是學習這本書從入門到精通的
  • 性能工具之linux常見日誌統計分析命令
    引言在上文中性能工具之linux三劍客awk、grep、sed詳解,我們已經詳細介紹 linux
  • Linux系統入門命令學習經驗
    此時此刻我想和大家分享一下我在學習linux過程中的一些經驗和教訓,如果有人能夠正好看到我的這篇文章,希望能夠讓想學習linux的同學多少獲得一點經驗,少走一些彎路。能夠比較簡單、快捷的迅速掌握知識是我們學習的目的,但是我們平常的學習中大部分都有一些人在指導。
  • 【Linux | 學習路線分享】
    點藍色字關注「CurryCoder的程序人生」微信公眾號:CurryCoder的程序人生
  • Linux學習總結
    參考書:Linux從入門到精通、unix環境高級編程
  • 深度好文:全面解析 Linux Load
    有興趣的同學可以下載procps-ng源碼包,看看load值是否取自/proc/loadavg。/proc/目錄中mount的是一種叫proc的linux偽文件系統,主要被用作內核數據結構的接口。我們可以通過如下方法查看其中的偽文件和數值的含義。
  • linux靜態庫和動態庫分析
    由於windows和linux的本質不同,因此二者庫的二進位是不兼容的。  本文僅限於介紹linux下的庫。  2.庫的種類  linux下的庫有兩種:靜態庫和共享庫(動態庫)。  二者的不同點在於代碼被載入的時刻不同。
  • 交叉編譯場景分析(arm-linux)(三)--編譯zlib
    過程分析 下載的穩定版本,configure已經存在,直接進行配置: [root@linux zlib-1.2.3]# .OK,按它的用法說明做吧,但問題是如何指定交叉編譯器呢,按照慣例,設置環境變量CC試試看: [root@linux zlib-1.2.3]# export CC=$ARCH-linux-gcc [root@linux zlib-1.2.3]# .
  • Linux常用命令 awk 入門基礎教程
    二、awk命令用法示例1)按行輸出文本1、輸出所有內容[linuxmi@linux:~/linuxmi迷]$ awk '{print}' linuxmi.py[linuxmi@linux:~/linuxmi迷]$ awk '{print
  • 三類重要Linux文件的用途與區別
    當必須添加時,我們可以按以下方式添加:如,添加一個HOST值為linux.com的環境變量:export HOST=linux.com添加時,可以在行尾使用;號,也可以不使用。一個變量名可以對應多個變量值,多個變量值需要使用:進行分隔。
  • cpustat:在 Linux 下根據運行的進程監控 CPU 使用率
    它通過使用 「用於分析任意系統的性能的方法(USE)[2]」,以有效的方式顯示 CPU 利用率和飽和度。它高頻率對系統中運行的每個進程進行取樣,然後以較低的頻率匯總這些樣本。例如,它能夠每 200ms 測量一次每個進程,然後每 5 秒匯總這些樣本,包括某些度量的最小/平均/最大值(min/avg/max)。