{eval=Array;=+count(Array);}

成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

問答專欄Q & A COLUMN

如何快速分析Linux服務(wù)器的性能問題?

CristicCristic 回答0 收藏1
收藏問題

3條回答

XGBCCC

XGBCCC

回答于2022-06-28 11:21

當(dāng)遇到一個系統(tǒng)性能問題時,如何利用登錄的前60秒對系統(tǒng)的性能情況做一個快速瀏覽和分析,主要包括如下10個工具,這是一個非常有用且有效的命工具列表。本文將詳細介紹這些命令及其擴展選項的意義,及其在實踐中的作用。并利用一個實際出現(xiàn)問題的例子,來驗證這些套路是不是可行,下面工具的屏幕輸出結(jié)果都來自這個出現(xiàn)題的系統(tǒng)。

# 系統(tǒng)負(fù)載概覽uptime

# 系統(tǒng)日志dmesg | tail

# CPUvmstat 1mpstat -P ALL 1pidstat 1

# Diskiostat -xz 1

# 內(nèi)存free -m

# 網(wǎng)絡(luò)sar -n DEV 1sar -n TCP,ETCP 1

# 系統(tǒng)概覽top

上面的工具都基于內(nèi)核提供給用戶態(tài)的統(tǒng)計,并以計數(shù)器形式展示,是快速排查時的利器。對于應(yīng)用和系統(tǒng)的進一步跟蹤(tracing),則需要利用strace和systemtap,不在本文的范疇。

注意:

  • 如上的分類只是基于工具默認(rèn)選項的分類,比如pidstat,默認(rèn)展示進程的CPU統(tǒng)計,但是利用-d參數(shù)可以展示進程的I/O統(tǒng)計。又比如vmstat,雖然名稱是查看虛擬內(nèi)存的工具,但默認(rèn)展示了負(fù)載,內(nèi)存,I/O,系統(tǒng),CPU等多方面的信息。
  • 部分工具需要安裝sysstat包。

1. uptime[root@nginx1 ~]# uptime 15:38:10 up 43 days, 3:54, 1 user, load average: 1.13, 0.41, 0.18

uptime是快速查看load average的方法,在Linux中l(wèi)oad average包括處于runnable和uninterruptable狀態(tài)的進程總數(shù),runnable狀態(tài)的進程包括在CPU上運行的進程和已經(jīng)ready to run在等待CPU時間的進程;uninterruptable狀態(tài)的進程是在等待一些I/O訪問,比如等待disk的返回。Load average沒有根據(jù)系統(tǒng)的CPU數(shù)量做格式化,所以load average 1表示單CPU系統(tǒng)在對應(yīng)時間段內(nèi)(1分鐘, 5分鐘, 15分鐘)一直負(fù)載飽和,而在4 CPU的系統(tǒng)中,load average 1表示有75%的時間在idle。

Load average體現(xiàn)了一個high level的負(fù)載概覽,但是可能需要和別的工具一起來使用以了解更多信息,比如處于runable和uninterruptable的實時進程數(shù)量分別是多少,可以用下面將介紹到的vmstat來查看。1分鐘,5分鐘,15分鐘的負(fù)載平均值同時能體現(xiàn)系統(tǒng)負(fù)載的變化情況。例如,如果你要檢查一個問題服務(wù)器,當(dāng)你看到1分鐘的平均負(fù)載值已經(jīng)遠小于15分鐘的平均負(fù)載值,則意味這也許你登錄晚了點,錯過了現(xiàn)場。用top或者w命令,也可以看到load average信息。

上面示例中最近1分鐘內(nèi)的負(fù)載比15分鐘內(nèi)的負(fù)載高了不少 (因為是個測試的例子,1.13可以看作明顯大于0.18,但是在生產(chǎn)系統(tǒng)上這不能說明什么)。

2. dmesg | tail

[root@nginx1 ~]# dmesg | tail [3128052.929139] device eth0 left promiscuous mode [3128104.794514] device eth0 entered promiscuous mode [3128526.750271] device eth0 left promiscuous mode [3537292.096991] device eth0 entered promiscuous mode [3537295.941952] device eth0 left promiscuous mode [3537306.450497] device eth0 entered promiscuous mode [3537307.884028] device eth0 left promiscuous mode [3668025.020351] bash (8290): drop_caches: 1 [3674191.126305] bash (8290): drop_caches: 2 [3675304.139734] bash (8290): drop_caches: 1

dmesg用于查看內(nèi)核緩沖區(qū)存放的系統(tǒng)信息。另外查看/var/log/messages也可能查看出服務(wù)器系統(tǒng)方面的某些問題。

上面示例中的dmesg沒有特別的值得注意的錯誤。

3. vmstat 1

vmstat簡介:

  • vmstat是virtual memory stat的簡寫,能夠打印processes, memory, paging, block IO, traps, disks and cpu的相關(guān)信息。
  • vmstat的格式:vmstat [options] [delay [count]]。在輸入中的1是延遲。第一行打印的是機器啟動到現(xiàn)在的平均值,后面打印的則是根據(jù)deley間隔的取樣結(jié)果,也就是實時的結(jié)果。

結(jié)果中列的含義:

Procs(進程)

r: The number of runnable processes (running or waiting for run time).b: The number of processes in uninterruptible sleep.

注釋:r表示在CPU上運行的進程和ready等待運行的進程總數(shù),相比load average, 這個值更能判斷CPU是否飽和(saturation),因為它沒有包括I/O。如果r的值大于CPU數(shù)目,即達到飽和。

Memory

swpd: the amount of virtual memory used.free: the amount of idle memory.buff: the amount of memory used as buffers.cache: the amount of memory used as cache.

Swap

si: Amount of memory swapped in from disk (/s).so: Amount of memory swapped to disk (/s).

注釋:swap-in和swap-out的內(nèi)存。如果是非零,說明主存中的內(nèi)存耗盡。

IO

bi: Blocks received from a block device (blocks/s).bo: Blocks sent to a block device (blocks/s).

System (中斷和進程上下文切換)

in: The number of interrupts per second, including the clock.cs: The number of context switches per second.

CPU

These are percentages of total CPU time.us: Time spent running non-kernel code. (user time, including nice time)sy: Time spent running kernel code. (system time)id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

根據(jù)user+system時間,可以判斷CPUs是否繁忙。如果wait I/O一直維持一定程度,說明disk有瓶頸,這時CPUs是"idle"的,因為任務(wù)都被block在等待disk I/O中。wait I/O可以被視為另一種形式的CPU idle,并且說明idle的原因就是在等待disk I/O的完成。

處理I/O需要花費system time,在將I/O提交到disk driver之前可能要經(jīng)過remap, split和merge等操作,并被I/O scheduler調(diào)度到request queue。如果處理I/O時平均system time比較高,超過20%,則要進一步分析下,是不是內(nèi)核處理I/O時的效率有問題。

如果用戶空間的CPU使用率接近100%,不一定就代表有問題,可以結(jié)合r列的進程總數(shù)量看下CPU的飽和程度。

上面示例可以看到在CPU方面有一個明顯的問題。user+system的CPU一直維持在50%左右,并且system消耗了大部分的CPU。

4. mpstat -P ALL 1

mpstat可以打印按照CPU的分解,可以用來檢查不不均衡的情況。

上面示例結(jié)果可以印證vmstat中觀察到的結(jié)論,并且可以看到服務(wù)器有2個CPU,其中CPU 1的使用率一直維持在100%,而CPU 0并沒有什么負(fù)載。CPU 1的消耗主要在內(nèi)核空間,而非用戶空間。

5. pidstat 1

默認(rèn)pidstat類似于top按照進程的打印方式,不過是以滾動打印的方式,和top的清屏方式不同。利用-p可以打出指定進程的信息,-p ALL可以打出所有進程的信息。如果沒有指定任何進程默認(rèn)相當(dāng)于-p ALL,但是只打印活動進程的信息(統(tǒng)計非0的數(shù)據(jù))。

pidstat不只可以打印進程的CPU信息,還可以打印內(nèi)存,I/O等方面的信息,如下是比較有用的信息:

  • pidstat -d 1:看哪些進程有讀寫。
  • pidstat -r 1:看進程的page fault和內(nèi)存使用。沒有發(fā)生page fault的進程默認(rèn)不會被打印出來,可以指定-p和進程號來打印查看內(nèi)存。
  • pidstat -t: 利用-t查看線程信息,可以快速查看線程和期相關(guān)線程的關(guān)系。
  • pidstat -w:利用-w查看進程的context switch情況。輸出:
    • cswch/s: 每秒發(fā)生的voluntary context switch數(shù)目 (voluntary cs:當(dāng)進程被block在獲取不到的資源時,主動發(fā)生的context switch)
    • nvcswch/s: 每秒發(fā)生的non voluntary context switch數(shù)目 (non vloluntary cs:進程執(zhí)行一段時間用完了CPU分配的time slice,被強制從CPU上調(diào)度下來,這時發(fā)生的context switch)

上面示例中可以明確得看到是nc這個進程在消耗CPU 1 100%的CPU。因為測試系統(tǒng)里消耗CPU的進程比較少,所以一目了然,在生產(chǎn)系統(tǒng)中pidstat應(yīng)該能輸出更多正在消耗CPU的進程情況。

6. iostat -zx 1

了解塊設(shè)備(block device, 這里是disk)負(fù)載和性能的工具。主要看如下指標(biāo):

  • r/s, w/s, rkB/s, wkB/s:每秒完成的讀請求次數(shù)(read requests, after merges),每秒完成的寫請求次數(shù)(write requests completed, after merges),每秒讀取的千字節(jié)數(shù),每秒寫入的千字節(jié)數(shù)。這些指標(biāo)可以看出disk的負(fù)載情況。一個性能問題可能僅僅是因為disk的負(fù)載過大。
  • await:每個I/O平均所需的時間,單位為毫秒。await不僅包括硬盤設(shè)備處理I/O的時間,還包括了在kernel隊列中等待的時間。要精確地知道塊設(shè)備service一個I/O請求地時間,可供iostat讀取地內(nèi)核統(tǒng)計并沒有體現(xiàn),需要用如blktrace這樣地跟蹤工具來跟蹤。對于blktrace來說,D2C的時間間隔代表硬件塊設(shè)備地service time,Q2C代表整個I/O請求所消耗的時間,即iostat的await。
  • avgqu-sz:隊列里的平均I/O請求數(shù)量 (更恰當(dāng)?shù)睦斫鈶?yīng)該是平均未完成的I/O請求數(shù)量)。如果該值大于1,則有飽和的趨勢 (當(dāng)然設(shè)備可以并發(fā)地處理請求,特別是一個front對多個backend disk的虛擬設(shè)備)。
  • %util:設(shè)備在處理I/O的時間占總時間的百分比。表示該設(shè)備有I/O(即非空閑)的時間比率,不考慮I/O有多少,只考慮有沒有。通常該指標(biāo)達到60%即可能引起性能問題 (可以根據(jù)await指標(biāo)進一步求證)。如果指標(biāo)接近100%,通常就說明出現(xiàn)了飽和。

如果存儲設(shè)備是一個對應(yīng)多個后端磁盤的邏輯磁盤,那么100%使用率可能僅僅表示一些I/O在處理時間占比達到100%,其他后端磁盤不一定也到達了飽和。請注意磁盤I/O的性能問題并不一定會造成應(yīng)用的問題,很多技術(shù)都是使用異步I/O操作,所以應(yīng)用不一定會被block或者直接受到延遲的影響。

7. free -m# free -m total used free shared buff/cache available Mem: 7822 129 214 0 7478 7371 Swap: 0 0 0

查看內(nèi)存使用情況。倒數(shù)第二列:

  • buffers: buffer cache,用于block device I/O。
  • cached: page cache, 用于文件系統(tǒng)。

Linux用free memory來做cache, 當(dāng)應(yīng)用需要時,這些cache可以被回收。比如kswapd內(nèi)核進程做頁面回收時可能回收cache;另外手動寫/proc/sys/vm/drop_caches也會導(dǎo)致cache回收。

上面示例中free的內(nèi)存只有129M,大部分memory被cache占用。但是系統(tǒng)并沒有問題。

8. sar -n DEV 1

輸出指標(biāo)的含義如下:

  • rxpck/s: Total number of packets received per second.
  • txpck/s: Total number of packets transmitted per second.
  • rxkB/s: Total number of kilobytes received per second.
  • txkB/s: Total number of kilobytes transmitted per second.
  • rxcmp/s: Number of compressed packets received per second (for cslip etc.).
  • txcmp/s: Number of compressed packets transmitted per second.
  • rxmcst/s: Number of multicast packets received per second.
  • %ifutil: Utilization percentage of the network interface. For half-duplex interfaces, utilization is calculated using the sum of rxkB/s and txkB/s as a percentage of the interface speed.
  • For full-duplex, this is the greater of rxkB/S or txkB/s.

這個工具可以查看網(wǎng)絡(luò)接口的吞吐量,特別是上面藍色高亮的rxkB/s和txkB/s,這是網(wǎng)絡(luò)負(fù)載,也可以看是否達到了limit。

9. sar -n TCP,ETCP 1

輸出指標(biāo)的含義如下:

  • active/s: The number of times TCP connections have made a direct transition to the SYN-SENT state from the CLOSED state per second [tcpActiveOpens].
  • passive/s: The number of times TCP connections have made a direct transition to the SYN-RCVD state from the LISTEN state per second [tcpPassiveOpens].
  • iseg/s: The total number of segments received per second, including those received in error [tcpInSegs]. This count includes segments received on currently established connections.
  • oseg/s: The total number of segments sent per second, including those on current connections but excluding those containing only retransmitted octets [tcpOutSegs].
  • atmptf/s: The number of times per second TCP connections have made a direct transition to the CLOSED state from either the SYN-SENT state or the SYN-RCVD state, plus the number of times per second TCP connections have made a direct transition to the LISTEN state from the SYN-RCVD state [tcpAttemptFails].
  • estres/s: The number of times per second TCP connections have made a direct transition to the CLOSED state from either the ESTABLISHED state or the CLOSE-WAIT state [tcpEstabResets].
  • retrans/s: The total number of segments retransmitted per second - that is, the number of TCP segments transmitted containing one or more previously transmitted octets [tcpRetransSegs].
  • isegerr/s: The total number of segments received in error (e.g., bad TCP checksums) per second [tcpInErrs].
  • orsts/s: The number of TCP segments sent per second containing the RST flag [tcpOutRsts].

上述藍色高亮的3個指標(biāo):active/s, passive/s和retrans/s是比較有代表性的指標(biāo)。

  • active/s和passive/s分別是本地發(fā)起的每秒新建TCP連接數(shù)和遠程發(fā)起的TCP新建連接數(shù)。這兩個指標(biāo)可以粗略地判斷服務(wù)器的負(fù)載??梢杂胊ctive衡量出站發(fā)向,用passive衡量入站方向,但也不是完全準(zhǔn)確(比如,考慮localhost到localhost的連接)。
  • retrans是網(wǎng)絡(luò)或者服務(wù)器發(fā)生問題的象征。有可能問題是網(wǎng)絡(luò)不穩(wěn)定,比如Internet網(wǎng)絡(luò)問題,或者服務(wù)器過載丟包。

10. top

# top Tasks: 79 total, 2 running, 77 sleeping, 0 stopped, 0 zombie %Cpu(s): 6.0 us, 44.1 sy, 0.0 ni, 49.6 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 8010456 total, 7326348 free, 132296 used, 551812 buff/cache KiB Swap: 0 total, 0 free, 0 used. 7625940 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4617 root 20 0 44064 2076 1544 R 100.0 0.0 16:27.23 nc 13634 nginx 20 0 121192 3864 1208 S 0.3 0.0 17:59.85 nginx 1 root 20 0 125372 3740 2428 S 0.0 0.0 6:11.53 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.60 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:17.92 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:03.21 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 31:47.62 rcu_sched 10 root rt 0 0 0 0 S 0.0 0.0 0:10.00 watchdog/0

top是一個常用的命令,包括了多方面的指標(biāo)。缺點是沒有滾動輸出(rolling output),不可復(fù)現(xiàn)問題發(fā)生時不容易保留信息。對于信息保留,用vmstat或者pidstat等能夠提供滾動輸出的工具會更好。

示例的問題?

在上面利用工具排查的過程中,我們可以在非常短的時間內(nèi)快速得到如下結(jié)論:

  • 2個CPU,nc這個進程消耗了CPU 1 100%的時間,并且時間消耗在system內(nèi)核態(tài)。其他進程基本沒有在消耗CPU。
  • 內(nèi)存free比較少,大部分在cache中 (并不是問題)。
  • Disk I/O非常低,平均讀寫請求小于1個。
  • 收到報文在個位數(shù)KB/s級別,每秒有15個被動建立的TCP連接,沒有明顯異常。

整個排查過程把系統(tǒng)的問題定位到了進程級別,并且能排除一些可能性 (Disk I/O和內(nèi)存)。接下來就是進一步到進程級別的排查,不屬于本文的覆蓋范圍,有時間再進一步演示。

評論0 贊同0
  •  加載中...
xinhaip

xinhaip

回答于2022-06-28 11:21

1 cpu性能評估

Cpu是影響Linux性能的主要因素之一,下面先介紹幾個查看CPU性能的命令。

1.1 vmstat命令

該命令可以顯示關(guān)于系統(tǒng)各種資源之間相關(guān)性能的簡要信息,這里我們主要用它來看CPU的一個負(fù)載情況。

下面是vmstat命令在某個系統(tǒng)的輸出結(jié)果:

[root@node1 ~]# vmstat 2 3

procs ———–memory———- —swap– —–io—- –system– —–cpu——

r b swpd free buff cache si so bi bo in cs us sy id wa st

0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0

0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0

0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0

對上面每項的輸出解釋如下:

l procs

? r列表示運行和等待cpu時間片的進程數(shù),這個值如果長期大于系統(tǒng)CPU的個數(shù),說明CPU不足,需要增加CPU。

? b列表示在等待資源的進程數(shù),比如正在等待I/O、或者內(nèi)存交換等。

l memory

? swpd列表示切換到內(nèi)存交換區(qū)的內(nèi)存數(shù)量(以k為單位)。如果swpd的值不為0,或者比較大,只要si、so的值長期為0,這種情況下一般不用擔(dān)心,不會影響系統(tǒng)性能。

? free列表示當(dāng)前空閑的物理內(nèi)存數(shù)量(以k為單位)

? buff列表示buffers cache的內(nèi)存數(shù)量,一般對塊設(shè)備的讀寫才需要緩沖。

? cache列表示page cached的內(nèi)存數(shù)量,一般作為文件系統(tǒng)cached,頻繁訪問的文件都會被cached,如果cache值較大,說明cached的文件數(shù)較多,如果此時IO中bi比較小,說明文件系統(tǒng)效率比較好。

l swap

? si列表示由磁盤調(diào)入內(nèi)存,也就是內(nèi)存進入內(nèi)存交換區(qū)的數(shù)量。

? so列表示由內(nèi)存調(diào)入磁盤,也就是內(nèi)存交換區(qū)進入內(nèi)存的數(shù)量。

一般情況下,si、so的值都為0,如果si、so的值長期不為0,則表示系統(tǒng)內(nèi)存不足。需要增加系統(tǒng)內(nèi)存。

l IO項顯示磁盤讀寫狀況

? Bi列表示從塊設(shè)備讀入數(shù)據(jù)的總量(即讀磁盤)(每秒kb)。

? Bo列表示寫入到塊設(shè)備的數(shù)據(jù)總量(即寫磁盤)(每秒kb)

這里我們設(shè)置的bi+bo參考值為1000,如果超過1000,而且wa值較大,則表示系統(tǒng)磁盤IO有問題,應(yīng)該考慮提高磁盤的讀寫性能。

l system 顯示采集間隔內(nèi)發(fā)生的中斷數(shù)

? in列表示在某一時間間隔中觀測到的每秒設(shè)備中斷數(shù)。

? cs列表示每秒產(chǎn)生的上下文切換次數(shù)。

上面這2個值越大,會看到由內(nèi)核消耗的CPU時間會越多。

l CPU項顯示了CPU的使用狀態(tài),此列是我們關(guān)注的重點。

? us列顯示了用戶進程消耗的CPU 時間百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大于50%,就需要考慮優(yōu)化程序或算法。

? sy列顯示了內(nèi)核進程消耗的CPU時間百分比。Sy的值較高時,說明內(nèi)核消耗的CPU資源很多。

根據(jù)經(jīng)驗,us+sy的參考值為80%,如果us+sy大于 80%說明可能存在CPU資源不足。

? id 列顯示了CPU處在空閑狀態(tài)的時間百分比。

? wa列顯示了IO等待所占用的CPU時間百分比。wa值越高,說明IO等待越嚴(yán)重,根據(jù)經(jīng)驗,wa的參考值為20%,如果wa超過20%,說明IO等待嚴(yán)重,引起IO等待的原因可能是磁盤大量隨機讀寫造成的,也可能是磁盤或者磁盤控制器的帶寬瓶頸造成的(主要是塊操作)。

綜上所述,在對CPU的評估中,需要重點注意的是procs項r列的值和CPU項中us、sy和id列的值。

1.2 sar命令

檢查CPU性能的第二個工具是sar,sar功能很強大,可以對系統(tǒng)的每個方面進行多帶帶的統(tǒng)計,但是使用sar命令會增加系統(tǒng)開銷,不過這些開銷是可以評估的,對系統(tǒng)的統(tǒng)計結(jié)果不會有很大影響。

下面是sar命令對某個系統(tǒng)的CPU統(tǒng)計輸出:

[root@webserver ~]# sar -u 3 5

Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)

11:41:24 AM CPU %user %nice %system %iowait %steal %idle

11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83

11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50

11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99. 45

對上面每項的輸出解釋如下:

l %user列顯示了用戶進程消耗的CPU 時間百分比。

l %nice列顯示了運行正常進程所消耗的CPU 時間百分比。

l %system列顯示了系統(tǒng)進程消耗的CPU時間百分比。

l %iowait列顯示了IO等待所占用的CPU時間百分比

l %steal列顯示了在內(nèi)存相對緊張的環(huán)境下pagein強制對不同的頁面進行的steal操作 。

l %idle列顯示了CPU處在空閑狀態(tài)的時間百分比。

1.3 iostat命令

iostat指令主要用于統(tǒng)計磁盤IO狀態(tài),但是也能查看CPU的使用信息,它的局限性是只能顯示系統(tǒng)所有CPU的平均信息,看下面的一個輸出:

[root@webserver ~]# iostat -c

Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

2.52 0.00 0.30 0.24 0.00 96.96

在這里,我們使用了“-c”參數(shù),只顯示系統(tǒng)CPU的統(tǒng)計信息,輸出中每項代表的含義與sar命令的輸出項完全相同,不再詳述。

1.4 uptime命令

uptime是監(jiān)控系統(tǒng)性能最常用的一個命令,主要用來統(tǒng)計系統(tǒng)當(dāng)前的運行狀況,輸出的信息依次為:系統(tǒng)現(xiàn)在的時間、系統(tǒng)從上次開機到現(xiàn)在運行了多長時間、系統(tǒng)目前有多少登陸用戶、系統(tǒng)在一分鐘內(nèi)、五分鐘內(nèi)、十五分鐘內(nèi)的平均負(fù)載??聪旅娴囊粋€輸出:

[root@webserver ~]# uptime

18:52:11 up 27 days, 19:44, 2 users, load average: 0.12, 0.08, 0.08

這里需要注意的是load average這個輸出值,這三個值的大小一般不能大于系統(tǒng)CPU的個數(shù),例如,本輸出中系統(tǒng)有8個CPU,如果load average的三個值長期大于8時,說明CPU很繁忙,負(fù)載很高,可能會影響系統(tǒng)性能,但是偶爾大于8時,倒不用擔(dān)心,一般不會影響系統(tǒng)性能。相反,如果load average的輸出值小于CPU的個數(shù),則表示CPU還有空閑的時間片,比如本例中的輸出,CPU是非常空閑的。

1.5 本節(jié)小結(jié)

上面介紹了檢查CPU使用狀況的四個命令,通過這些命令需要了解的是:系統(tǒng)CPU是否出現(xiàn)性能瓶頸,也就是說,以上這些命令只能查看CPU是否繁忙,負(fù)載是否過大,但是無法知道CPU為何負(fù)載過大,因而,判斷系統(tǒng)CPU出現(xiàn)問題后,要結(jié)合top、ps等命令進一步檢查是由那些進程導(dǎo)致CPU負(fù)載過大的。引起CPU資源緊缺的原因可能是應(yīng)用程序不合理造成的,也可能是硬件資源匱乏引起的,所以,要具體問題具體分析,或者優(yōu)化應(yīng)用程序,或者增加系統(tǒng)CPU資源。

2 內(nèi)存性能評估

內(nèi)存的管理和優(yōu)化是系統(tǒng)性能優(yōu)化的一個重要部分,內(nèi)存資源的充足與否直接影響應(yīng)用系統(tǒng)的使用性能,在進行內(nèi)存優(yōu)化之前,一定要熟悉linux的內(nèi)存管理機制,這一點我們在前面的章節(jié)已經(jīng)有深入講述,本節(jié)的重點是如何通過系統(tǒng)命令監(jiān)控linux系統(tǒng)的內(nèi)存使用狀況。

2.1 free 命令

free是監(jiān)控linux內(nèi)存使用狀況最常用的指令,看下面的一個輸出:

[root@webserver ~]# free -m

total used free shared buffers cached

Mem: 8111 7185 925 0 243 6299

-/+ buffers/cache: 643 7468

Swap: 8189 0 8189

“free –m”表示以M為單位查看內(nèi)存使用情況,在這個輸出中,我們重點關(guān)注的應(yīng)該是free列與cached列的輸出值,由輸出可知,此系統(tǒng)共8G內(nèi)存,系統(tǒng)空閑內(nèi)存還有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系統(tǒng)緩存了很多的文件和目錄,而對于應(yīng)用程序來說,可以使用的內(nèi)存還有7468M,當(dāng)然這個7468M包含了Buffer Cache和Page Cache的值。在swap項可以看出,交換分區(qū)還未使用。所以從應(yīng)用的角度來說,此系統(tǒng)內(nèi)存資源還非常充足。

一般有這樣一個經(jīng)驗公式:應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存>70%時,表示系統(tǒng)內(nèi)存資源非常充足,不影響系統(tǒng)性能,應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<20%時,表示系統(tǒng)內(nèi)存資源緊缺,需要增加系統(tǒng)內(nèi)存,20%< 應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<70%時,表示系統(tǒng)內(nèi)存資源基本能滿足應(yīng)用需求,暫時不影響系統(tǒng)性能。

2.2 通過watch與free相結(jié)合動態(tài)監(jiān)控內(nèi)存狀況

watch是一個非常有用的命令,幾乎每個linux發(fā)行版都帶有這個工具,通過watch,可以動態(tài)的監(jiān)控命令的運行結(jié)果,省去手動執(zhí)行的麻煩。

可以在watch后面跟上需要運行的命令,watch就會自動重復(fù)去運行這個命令,默認(rèn)是2秒鐘執(zhí)行一次,并把執(zhí)行的結(jié)果更新在屏幕上。例如:

[root@webserver ~]# watch -n 3 -d free

Every 3.0s: free Sun Nov 30 16:23:20 2008

total used free shared buffers cached

Mem: 8306544 7349548 956996 0 203296 6500024

-/+ buffers/cache: 646228 7660316

Swap: 8385888 160 8385728

其中,“-n”指定重復(fù)執(zhí)行的時間,“-d”表示高亮顯示變動。

2.3 vmstat命令監(jiān)控內(nèi)存

vmstat命令在監(jiān)控系統(tǒng)內(nèi)存方面功能強大,請看下面的一個輸出:

procs ———–memory———- —swap– —–io—- –system– —-cpu—-

r b swpd free buff cache si so bi bo in cs us sy id wa

0 0 906440 22796 155616 1325496 340 180 2 4 1 4 80 0 10 10

0 0 906440 42796 155616 1325496 320 289 0 54 1095 287 70 15 0 15

0 0 906440 42884 155624 1325748 236 387 2 102 1064 276 78 2 5 15

對于內(nèi)存的監(jiān)控,在vmstat中重點關(guān)注的是swpd、si和so行,從這個輸出可以看出,此系統(tǒng)內(nèi)存資源緊缺,swpd占用了900M左右內(nèi)存,si和so占用很大,而由于系統(tǒng)內(nèi)存的緊缺,導(dǎo)致出現(xiàn)15%左右的系統(tǒng)等待,此時增加系統(tǒng)的內(nèi)存是必須要做的。

2.4 sar -r命令組合

sar命令也可以監(jiān)控linux的內(nèi)存使用狀況,可以通過“sar –r”組合查看系統(tǒng)內(nèi)存和交換空間的使用率。請看下面的一個輸出:

[root@webserver ~]# sar -r 2 3

Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU)

09:57:33 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit

09:57:35 PM 897988 7408556 89.19 249428 6496532 786556 4.71

09:57:37 PM 898564 7407980 89.18 249428 6496532 784276 4.70

09:57:39 PM 899196 7407348 89.17 249440 6496520 782132 4.69

Average: 898583 7407961 89.18 249432 6496528 784321 4.70

其中:

Kbmemfree表示空閑物理內(nèi)存大小,kbmemused表示已使用的物理內(nèi)存空間大小,%memused表示已使用內(nèi)存占總內(nèi)存大小的百分比,kbbuffers和kbcached分別表示Buffer Cache和Page Cache的大小,kbcommit和%commit分別表示應(yīng)用程序當(dāng)前使用的內(nèi)存大小和使用百分比。

可以看出sar的輸出其實與free的輸出完全對應(yīng),不過sar更加人性化,不但給出了內(nèi)存使用量,還給出了內(nèi)存使用的百分比以及統(tǒng)計的平均值。從%commit項可知,此系統(tǒng)目前內(nèi)存資源充足。

2.5 本節(jié)小結(jié)

上面介紹了內(nèi)存監(jiān)控常用的幾個指令以及一些經(jīng)驗規(guī)則,其實現(xiàn)在的系統(tǒng)在內(nèi)存方面出現(xiàn)的瓶頸已經(jīng)很少,因為內(nèi)存價格很低,充足的內(nèi)存已經(jīng)完全能滿足應(yīng)用程序和系統(tǒng)本身的需要,如果系統(tǒng)在內(nèi)存方面出現(xiàn)瓶頸,很大的可能是應(yīng)用程序本身的問題造成的。

評論0 贊同0
  •  加載中...
Shisui

Shisui

回答于2022-06-28 11:21

Linux服務(wù)器性能快速分析通常使用top命令,通過一個命令,就能實時查看服務(wù)器的負(fù)載、cpu、內(nèi)存使用率,類似windows 系統(tǒng)的任務(wù)管理器。那如何使用top命令查看和分析各項性能指標(biāo)呢?

只需登錄到服務(wù)器后,在命令行模式下輸入top即可,是不是很容易呢。如下圖所示:

前5行是服務(wù)器性能指標(biāo)概覽。以上圖為例來詳細說明各項指標(biāo)代表的含義,以便于理解。

第1行是任務(wù)隊列信息

當(dāng)前時間 22:52:45

系統(tǒng)運行時間 823 days

當(dāng)前登錄用戶數(shù) 2 users

系統(tǒng)負(fù)載 load average: 0.00, 0.03, 0.06 。 三個數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值。如果15分鐘對應(yīng)的數(shù)值在升高,但1分鐘對應(yīng)數(shù)值降低,則代表服務(wù)器負(fù)載呈下降趨勢,反之代表負(fù)載在升高。

第2行為進程信息:

進程總數(shù) 121

正在運行的進程數(shù) 1

睡眠的進程數(shù) 119

停止的進程數(shù) 1

僵尸進程數(shù) 0

第3行為cpu信息:

用戶空間占用CPU百分比 (us)0.3%

內(nèi)核空間占用CPU百分比(sy)0.2%

用戶進程空間內(nèi)改變過優(yōu)先級的進程占用CPU百分比(ni)10%

空閑CPU百分比(id)89.2%

等待輸入輸出的CPU時間百分比(wa) 0.0%

硬中斷(Hardware IRQ)占用CPU的百分比(hi)0.0%

軟中斷(Software Interrupts)占用CPU的百分比(si)0.2%

虛擬 CPU 等待實際 CPU 的時間的百分比(st)0.2%

第4、5行為內(nèi)存信息:

物理內(nèi)存總量 6291456k

使用的物理內(nèi)存總量 5760744k

空閑內(nèi)存總量 530712k

用作內(nèi)核緩存的內(nèi)存量 209064k

交換區(qū)總量6258680k

使用的交換區(qū)總量 3132084k

空閑交換區(qū)總量 3126596k

緩沖的交換區(qū)總量 437464k

第6行開始是進程信息區(qū),下方顯示了各個進程的詳細信息。字段含義分別為:

PID 進程id

USER 進程所有者的用戶名

PR 優(yōu)先級

NI nice值。負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級

VIRT 進程使用的虛擬內(nèi)存總量,單位kb

RES 進程使用的、未被換出的物理內(nèi)存大小

SHR 共享內(nèi)存大小

S 進程狀態(tài)(D=不可中斷的睡眠狀態(tài) R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程 )

%CPU 上次更新到現(xiàn)在的CPU時間占用百分比,即cpu使用率

%MEM 進程使用的物理內(nèi)存百分比 ,即內(nèi)存使用率

TIME+ 進程使用的CPU時間總計

COMMAND 命令名/命令行

各指標(biāo)含義已詳細說明,指標(biāo)項很多,但我們工作中判斷服務(wù)器是否存在性能問題,通常關(guān)注以下幾項指標(biāo):

1.CPU

使用率。在top基本視圖中,按鍵盤數(shù)字“1”,可監(jiān)控每個邏輯CPU的狀況。CPU使用率數(shù)值越高,代表服務(wù)器越繁忙。而進程信息區(qū)還會顯示各進程當(dāng)前的cpu使用率,若需查詢進程下各線程cpu使用率情況,可使用top -p 進程id -H,配合使用jstack命令還可定位到具體占用cpu過高的功能。

2.內(nèi)存使用率。若使用的內(nèi)存過高,空閑內(nèi)存較低,則需注意。

3.服務(wù)器負(fù)載,若服務(wù)器負(fù)載 load average超過cpu核心數(shù)的話,則說明系統(tǒng)超負(fù)荷運行。如果是單核CPU,負(fù)載等于1就是滿負(fù)荷運轉(zhuǎn)了,如果是四核、甚至更多核心的CPU,負(fù)載大于1這說明系統(tǒng)當(dāng)前負(fù)載很小,不需要過多關(guān)心。

評論0 贊同0
  •  加載中...

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<