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

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

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

CristicCristic 回答0 收藏1
收藏問題

3條回答

XGBCCC

XGBCCC

回答于2022-06-28 11:21

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

# 系統負載概覽uptime

# 系統日志dmesg | tail

# CPUvmstat 1mpstat -P ALL 1pidstat 1

# Diskiostat -xz 1

# 內存free -m

# 網絡sar -n DEV 1sar -n TCP,ETCP 1

# 系統概覽top

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

注意:

  • 如上的分類只是基于工具默認選項的分類,比如pidstat,默認展示進程的CPU統計,但是利用-d參數可以展示進程的I/O統計。又比如vmstat,雖然名稱是查看虛擬內存的工具,但默認展示了負載,內存,I/O,系統,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中load average包括處于runnable和uninterruptable狀態的進程總數,runnable狀態的進程包括在CPU上運行的進程和已經ready to run在等待CPU時間的進程;uninterruptable狀態的進程是在等待一些I/O訪問,比如等待disk的返回。Load average沒有根據系統的CPU數量做格式化,所以load average 1表示單CPU系統在對應時間段內(1分鐘, 5分鐘, 15分鐘)一直負載飽和,而在4 CPU的系統中,load average 1表示有75%的時間在idle。

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

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

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用于查看內核緩沖區存放的系統信息。另外查看/var/log/messages也可能查看出服務器系統方面的某些問題。

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

3. vmstat 1

vmstat簡介:

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

結果中列的含義:

Procs(進程)

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

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

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的內存。如果是非零,說明主存中的內存耗盡。

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.

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

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

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

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

4. mpstat -P ALL 1

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

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

5. pidstat 1

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

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

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

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

6. iostat -zx 1

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

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

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

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

查看內存使用情況。倒數第二列:

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

Linux用free memory來做cache, 當應用需要時,這些cache可以被回收。比如kswapd內核進程做頁面回收時可能回收cache;另外手動寫/proc/sys/vm/drop_caches也會導致cache回收。

上面示例中free的內存只有129M,大部分memory被cache占用。但是系統并沒有問題。

8. sar -n DEV 1

輸出指標的含義如下:

  • 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.

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

9. sar -n TCP,ETCP 1

輸出指標的含義如下:

  • 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個指標:active/s, passive/s和retrans/s是比較有代表性的指標。

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

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是一個常用的命令,包括了多方面的指標。缺點是沒有滾動輸出(rolling output),不可復現問題發生時不容易保留信息。對于信息保留,用vmstat或者pidstat等能夠提供滾動輸出的工具會更好。

示例的問題?

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

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

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

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

xinhaip

回答于2022-06-28 11:21

1 cpu性能評估

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

1.1 vmstat命令

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

下面是vmstat命令在某個系統的輸出結果:

[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時間片的進程數,這個值如果長期大于系統CPU的個數,說明CPU不足,需要增加CPU。

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

l memory

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

? free列表示當前空閑的物理內存數量(以k為單位)

? buff列表示buffers cache的內存數量,一般對塊設備的讀寫才需要緩沖。

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

l swap

? si列表示由磁盤調入內存,也就是內存進入內存交換區的數量。

? so列表示由內存調入磁盤,也就是內存交換區進入內存的數量。

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

l IO項顯示磁盤讀寫狀況

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

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

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

l system 顯示采集間隔內發生的中斷數

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

? cs列表示每秒產生的上下文切換次數。

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

l CPU項顯示了CPU的使用狀態,此列是我們關注的重點。

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

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

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

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

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

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

1.2 sar命令

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

下面是sar命令對某個系統的CPU統計輸出:

[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列顯示了系統進程消耗的CPU時間百分比。

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

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

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

1.3 iostat命令

iostat指令主要用于統計磁盤IO狀態,但是也能查看CPU的使用信息,它的局限性是只能顯示系統所有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”參數,只顯示系統CPU的統計信息,輸出中每項代表的含義與sar命令的輸出項完全相同,不再詳述。

1.4 uptime命令

uptime是監控系統性能最常用的一個命令,主要用來統計系統當前的運行狀況,輸出的信息依次為:系統現在的時間、系統從上次開機到現在運行了多長時間、系統目前有多少登陸用戶、系統在一分鐘內、五分鐘內、十五分鐘內的平均負載。看下面的一個輸出:

[root@webserver ~]# uptime

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

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

1.5 本節小結

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

2 內存性能評估

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

2.1 free 命令

free是監控linux內存使用狀況最常用的指令,看下面的一個輸出:

[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為單位查看內存使用情況,在這個輸出中,我們重點關注的應該是free列與cached列的輸出值,由輸出可知,此系統共8G內存,系統空閑內存還有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系統緩存了很多的文件和目錄,而對于應用程序來說,可以使用的內存還有7468M,當然這個7468M包含了Buffer Cache和Page Cache的值。在swap項可以看出,交換分區還未使用。所以從應用的角度來說,此系統內存資源還非常充足。

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

2.2 通過watch與free相結合動態監控內存狀況

watch是一個非常有用的命令,幾乎每個linux發行版都帶有這個工具,通過watch,可以動態的監控命令的運行結果,省去手動執行的麻煩。

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

[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”指定重復執行的時間,“-d”表示高亮顯示變動。

2.3 vmstat命令監控內存

vmstat命令在監控系統內存方面功能強大,請看下面的一個輸出:

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

對于內存的監控,在vmstat中重點關注的是swpd、si和so行,從這個輸出可以看出,此系統內存資源緊缺,swpd占用了900M左右內存,si和so占用很大,而由于系統內存的緊缺,導致出現15%左右的系統等待,此時增加系統的內存是必須要做的。

2.4 sar -r命令組合

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

[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表示空閑物理內存大小,kbmemused表示已使用的物理內存空間大小,%memused表示已使用內存占總內存大小的百分比,kbbuffers和kbcached分別表示Buffer Cache和Page Cache的大小,kbcommit和%commit分別表示應用程序當前使用的內存大小和使用百分比。

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

2.5 本節小結

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

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

Shisui

回答于2022-06-28 11:21

Linux服務器性能快速分析通常使用top命令,通過一個命令,就能實時查看服務器的負載、cpu、內存使用率,類似windows 系統的任務管理器。那如何使用top命令查看和分析各項性能指標呢?

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

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

第1行是任務隊列信息

當前時間 22:52:45

系統運行時間 823 days

當前登錄用戶數 2 users

系統負載 load average: 0.00, 0.03, 0.06 。 三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。如果15分鐘對應的數值在升高,但1分鐘對應數值降低,則代表服務器負載呈下降趨勢,反之代表負載在升高。

第2行為進程信息:

進程總數 121

正在運行的進程數 1

睡眠的進程數 119

停止的進程數 1

僵尸進程數 0

第3行為cpu信息:

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

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

用戶進程空間內改變過優先級的進程占用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行為內存信息:

物理內存總量 6291456k

使用的物理內存總量 5760744k

空閑內存總量 530712k

用作內核緩存的內存量 209064k

交換區總量6258680k

使用的交換區總量 3132084k

空閑交換區總量 3126596k

緩沖的交換區總量 437464k

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

PID 進程id

USER 進程所有者的用戶名

PR 優先級

NI nice值。負值表示高優先級,正值表示低優先級

VIRT 進程使用的虛擬內存總量,單位kb

RES 進程使用的、未被換出的物理內存大小

SHR 共享內存大小

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

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

%MEM 進程使用的物理內存百分比 ,即內存使用率

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

COMMAND 命令名/命令行

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

1.CPU

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

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

3.服務器負載,若服務器負載 load average超過cpu核心數的話,則說明系統超負荷運行。如果是單核CPU,負載等于1就是滿負荷運轉了,如果是四核、甚至更多核心的CPU,負載大于1這說明系統當前負載很小,不需要過多關心。

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

相關問題

最新活動

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

我的邀請列表

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