茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1664698 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00201.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

小企鵝開談 : [轉貼]Linux 中查看系統資源佔用情況的命令

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]Linux 中查看系統資源佔用情況的命令

Linux中查看系統資源佔用情況的命令

用 'top -i' 看看有多少進程處於 Running 狀態,可能系統存在內存或 I/O 瓶頸,用 free 看看系統內存使用情況,swap是否被佔用很多,用 iostat 看看 I/O 負載情況...

 

還有一種辦法是 ps -ef | sort -k7 ,將進程按運行時間排序,看哪個進程消耗的cpu時間最多。




======================================

 

top
主要參數
d:指定更新的間隔,以秒計算。
q:沒有任何延遲的更新。 如果消費者有超級用戶,則top命令將會以最高的優先序執行。
c:顯示進程完整的路徑與名稱。
S:累積模式,會將己完成或消失的子行程的CPU時間累積起來。
s:安全模式。
i:不顯示任何閑置(Idle)或無用(Zombie)的行程。
n:顯示更新的次數,完成後將會退出to
顯示參數:
PID(Process ID):進程標示號。
USER:進程擁有者的用戶名。

PR:進程的優先級別。
NI:進程的優先級別數值。
VIRT:進程佔用的虛擬內存值。
RES:進程佔用的物理內存值。
SHR:進程使用的共用內存值。
S:進程的狀態,其中S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值是負數。
%CPU:該進程佔用的CPU使用率。
%MEM:該進程佔用的物理內存和總內存的百分比。
TIME+:該進程啟動後佔用的總的CPU時間。
Command:進程啟動的啟動命令名稱,如果這一行顯示不下,進程會有一個完整的命令列。
top命令使用過程中,還可以使用一些交互的命令來完成其它參數的功能。 這些命令是通過快捷鍵啟動的。
<空格>:立刻刷新。
P:根據CPU使用大小進行排序。
T:根據時間、累計時間排序。
q:退出top命令。
m:切換顯示內存資訊。
t:切換顯示進程和CPU狀態資訊。
c:切換顯示命令名稱和完整命令列。
M:根據使用內存大小進行排序。
W:將當前設置寫入~/.toprc檔中。 這是寫top設定檔的推薦方法。

 

======================================



free
1.作用
free命令用來顯示內存的使用情況,使用權限是所有用戶。
2.格式
free [-b-k-m] [-o] [-s delay] [-t] [-V]
3.主要參數
-b -k -m:分別以字節(KB、MB)為單位顯示內存使用情況。
-s delay:顯示每隔多少秒數來顯示一次內存使用情況。
-t:顯示內存總和列。
-o:不顯示緩沖區調節列。

 

======================================



uptime
18:59:15 up 25 min, 2 users, load average: 1.23, 1.32, 1.21
現在的時間 / 系統開機運轉到現在經過的時間 / 連線的消費者數量 / 最近一分鐘,五分鐘和十五分鐘的系統負載
參數: -V 顯示版本資訊。

 

======================================



vmstat

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 168 6291888 901268 5670852 0 0 0 9 1 1 1 1 98 0 0
1 觀察磁盤活動情況
磁盤活動情況主要從以下幾個指標瞭解:
bi:表示從磁盤每秒讀取的塊數(blocks/s)。 數字越大,表示讀磁盤的活動越多。
bo:表示每秒寫到磁盤的塊數(blocks/s)。 數字越大,表示寫磁盤的活動越多。
wa:cpu等待磁盤I/O(未決的磁盤IO)的時間比例。 數字越大,表示檔系統活動阻礙cpu的情況越嚴重,因為cpu在等待慢速的磁盤系統提供數據。 wa為0是最理想的。 如果wa經常大於10,可能檔系統就需要進行性能調整了。
2 觀察cpu活動情況
vmstat比top更能反映出cpu的使用情況:
us:用戶程式使用cpu的時間比例。 這個數字越大,表示用戶進程越繁忙。
sy: 系統調用使用cpu的時間比例。 注意,NFS由於是在內核裏面運行的,所以NFS活動所佔用的cpu時間反映在sy裏面。
這個數字經常很大的話,就需要注 意是否某個內核進程,比如NFS任務比較繁重。 如果us和sy同時都比較大的話,就需要考慮將某些用戶程式分離到另外的服務器上面,以免互相影響。
id:cpu空閑的時間比例。
wa:cpu等待未決的磁盤IO的時間比例。

 

iostat
用於統計CPU的使用情況及tty設備、硬盤和CD-ROM的I/0量
參數:
-c 只顯示CPU行
-d 顯示磁盤行
-k 以千字節為單位顯示磁盤輸出
-t 在輸出中包括時間戳
-x 在輸出中包括擴展的磁盤指標
avg-cpu: %user %nice %sys %iowait %idle
20.25 0.18 2.61 76.39 0.57
%iowait 等待本地I/O時CPU空閑時間的百分比
%idle 未等待本地I/O時CPU空閑時間的百分比
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 9.86 284.34 84.48 685407 2036
每秒傳輸數(tps)、每秒512字節塊讀取數(Blk_read/s)、每秒512字節塊寫入數(Blk_wrtn/s)和512字節塊讀取(Blk_read)和寫入(Blk_wrtn)的總數量。




======================================




系統
# uname -a # 查看內核/操作系統/CPU資訊
# head -n 1 /etc/issue # 查看操作系統版本
# cat /proc/cpuinfo # 查看CPU資訊
# hostname # 查看計算機名
# lspci -tv # 列出所有PCI設備
# lsusb -tv # 列出所有USB設備
# lsmod # 列出加載的內核模塊
# env # 查看環境變量

 

======================================

 

資源
# free -m # 查看內存使用量和交換區使用量
# df -h # 查看各分區使用情況
# du -sh # 查看指定目錄的大小
# grep MemTotal /proc/meminfo # 查看內存總量
# grep MemFree /proc/meminfo # 查看空閑內存量
# uptime # 查看系統運行時間、用戶數、負載

# cat /proc/loadavg # 查看系統負載
======================================

 

磁盤和分區
# mount | column -t # 查看掛接的分區狀態
# fdisk -l # 查看所有分區
# swapon -s # 查看所有交換分區
# hdparm -i /dev/hda # 查看磁盤參數(僅適用於IDE設備)
# dmesg | grep IDE # 查看啟動時IDE設備檢測狀況
======================================

 

網絡
# ifconfig # 查看所有網絡介面的屬性
# iptables -L # 查看防火牆設置
# route -n # 查看路由表
# netstat -lntp # 查看所有監聽埠
# netstat -antp # 查看所有已經建立的連接
# netstat -s # 查看網絡統計資訊
======================================

 

進程

# ps -ef # 查看所有進程
# top # 實時顯示進程狀態
======================================

 

用戶
# w # 查看活動用戶
# id # 查看指定用戶資訊
# last # 查看用戶登錄日誌
# cut -d: -f1 /etc/passwd # 查看系統所有用戶
# cut -d: -f1 /etc/group # 查看系統所有組
# crontab -l # 查看當前用戶的計劃任務
======================================

 

服務
# chkconfig --list # 列出所有系統服務
# chkconfig --list | grep on # 列出所有啟動的系統服務
======================================

 

程式
# rpm -qa # 查看所有安裝的軟件


原文出處:Linux中查看系統資源佔用情況的命令 @ 資訊園 :: 痞客邦 ::
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]System Administration Guide, Volume 2
System Administration Guide, Volume 2

How to Check CPU Utilization ( sar -u)

Display CPU utilization with the sar -u command.




$ sar -u
00:00:00 %usr %sys %wio %idle
01:00:00 0 0 0 100

(The sar command without any options is equivalent to sar -u.) At any given moment, the processor is either busy or idle. When busy, the processor is in either user or system mode. When idle, the processor is either waiting for I/O completion or "sitting still" with no work to do.

Output from the -u option is described in the table below.

Table 36-17 Output From the sar -u Command

Field Name 

Description 

%sys

Lists the percentage of time that the processor is in system mode 

%user

Lists the percentage of time that the processor is in user mode 

%wio

Lists the percentage of time the processor is idle and waiting for I/O completion 

%idle

Lists the percentage of time the processor is idle and is not waiting for I/O 

A high %wio generally means a disk slowdown has occurred.

Example--Checking CPU Utilization

The following example shows output from the sar -u command.




$ sar -u
SunOS venus 5.8 Generic sun4u 09/07/99
00:00:00 %usr %sys %wio %idle
01:00:00 0 0 0 100
02:00:02 0 0 0 100
03:00:00 0 0 0 100
04:00:00 0 0 0 100
05:00:01 0 0 0 100
06:00:00 0 0 0 100
07:00:00 0 0 0 100
08:00:01 0 0 0 100
08:20:00 0 0 0 100
08:40:00 0 0 0 100
09:00:00 0 0 0 100
09:20:00 0 0 0 100
09:40:00 0 0 0 100
10:00:00 0 0 0 100
10:20:00 0 0 0 100
10:40:01 0 0 0 100
11:00:00 5 2 10 82
Average 0 0 0 100

原文出處:How to Check CPU Utilization (sar -u) (System Administration Guide, Volume 2)
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]Monitoring CPU Usage
Monitoring CPU Usage

The uptime, mpstat, sar, dstat, and top utilities allow you to monitor CPU usage. When a system's CPU cores are all occupied executing the code of processes, other processes must wait until a CPU core becomes free or the scheduler switches a CPU core to run their code. If too many processes are queued too often, this can represent a bottleneck in the performance of the system.

The commands mpstat -P ALL and sar -u -P ALL display CPU usage statistics for each CPU core and averaged across all CPU cores.

The %idle value shows the percentage of time that a CPU was not running system code or process code. If the value of %idle is near 0% most of the time on all CPU cores, the system is CPU-bound for the workload that it is running. The percentage of time spent running system code (%systemor %sys) should not usually exceed 30%, especially if %idle is close to 0%.

The system load average represents the number of processes that are running on CPU cores, waiting to run, or waiting for disk I/O activity to complete averaged over a period of time. On a busy system, the load average reported by uptime or sar -q should usually be not greater than two times the number of CPU cores over periods as long as 5 or 15 minutes. If the load average exceeds four times the number of CPU cores for long periods, the system is overloaded.

In addition to load averages (ldavg-*), the sar -q command reports the number of processes currently waiting to run (the run-queue size, runq-sz) and the total number of processes (plist_sz). The value of runq-sz also provides an indication of CPU saturation.

Determine the system's average load under normal loads where users and applications do not experience problems with system responsiveness, and then look for deviations from this benchmark over time. A dramatic rise in the load average can indicate a serious performance problem.

A combination of sustained large load average or large run queue size and low %idle can indicate that the system has insufficient CPU capacity for the workload. When CPU usage is high, use a command such as dstat or top to determine which processes are most likely to be responsible. For example, the following dstat command shows which processes are using CPUs, memory, and block I/O most intensively:
# dstat --top-cpu --top-mem --top-bio

The top command provides a real-time display of CPU activity. By default, top lists the most CPU-intensive processes on the system. In its upper section, top displays general information including the load averages over the past 1, 5 and 15 minutes, the number of running and sleeping processes (tasks), and total CPU and memory usage. In its lower section, top displays a list of processes, including the process ID number (PID), the process owner, CPU usage, memory usage, running time, and the command name. By default, the list is sorted by CPU usage, with the top consumer of CPU listed first. Type f to select which fields top displays, o to change the order of the fields, or O to change the sort field. For example, entering On sorts the list on the percentage memory usage field (%MEM).

原文出處:8.2.2.1 Monitoring CPU Usage
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]Linux 服務器性能出問題,排查下這些參數指標

Linux 服務器性能出問題,排查下這些參數指標

這裡只是一些簡單的工具查看系統的相關參數,當然很多工具也是通過分析加工 /proc、/sys 下的數據來工作的,而那些更加細緻、專業的性能監測和調優,可能還需要更加專業的工具(perf、systemtap 等)和技術才能完成哦。


畢竟來說,系統性能監控本身就是個大學問。



一、CPU和內存類



1.1

top


➜ ~ top

第一行後面的三個值是系統在之前 1、5、15 的平均負載,也可以看出系統負載是上升、平穩、下降的趨勢,當這個值超過 CPU 可執行單元的數目,則表示 CPU 的性能已經飽和成為瓶頸了。

第三行 CPU 佔用率根據類型有以下幾種情況:


  • (us) user:CPU 在低 nice 值(高優先級)用戶態所佔用的時間(nice<=0)。正常情況下只要服務器不是很閒,那麼大部分的 CPU 時間應該都在此執行這類程序

  • (sy) system:CPU 處於內核態所佔用的時間,操作系統通過系統調用(system call)從用戶態陷入內核態,以執行特定的服務;通常情況下該值會比較小,但是當服務器執行的 IO 比較密集的時候,該值會比較大

  • (ni) nice:CPU 在高 nice 值(低優先級)用戶態以低優先級運行佔用的時間(nice>0)。默認新啟動的進程 nice=0,是不會計入這裡的,除非手動通過 renice 或者 setpriority() 的方式修改程序的nice值

  • (id) idle:CPU 在空閒狀態(執行 kernel idle handler )所佔用的時間

  • (wa) iowait:等待 IO 完成做佔用的時間

  • (hi) irq:系統處理硬件中斷所消耗的時間

  • (si) softirq:系統處理軟中斷所消耗的時間,記住軟中斷分為 softirqs、tasklets (其實是前者的特例)、work queues,不知道這裡是統計的是哪些的時間,畢竟 work queues 的執行已經不是中斷上下文了

  • (st) steal:在虛擬機情況下才有意義,因為虛擬機下 CPU 也是共享物理 CPU 的,所以這段時間表明虛擬機等待 hypervisor 調度 CPU 的時間,也意味著這段時間 hypervisor 將 CPU 調度給別的 CPU 執行,這個時段的 CPU 資源被「stolen」了。這個值在我 KVM 的 VPS 機器上是不為 0 的,但也只有 0.1 這個數量級,是不是可以用來判斷 VPS 超售的情況?


CPU 佔用率高很多情況下意味著一些東西,這也給服務器 CPU 使用率過高情況下指明了相應地排查思路:

  1. 當 user 佔用率過高的時候,通常是某些個別的進程佔用了大量的 CPU,這時候很容易通過 top 找到該程序;此時如果懷疑程序異常,可以通過 perf 等思路找出熱點調用函數來進一步排查;

  2. 當 system 佔用率過高的時候,如果 IO 操作(包括終端 IO)比較多,可能會造成這部分的 CPU 佔用率高,比如在 file server、database server 等類型的服務器上,否則(比如>20%)很可能有些部分的內核、驅動模塊有問題;

  3. 當 nice 佔用率過高的時候,通常是有意行為,當進程的發起者知道某些進程佔用較高的 CPU,會設置其 nice 值確保不會淹沒其他進程對 CPU 的使用請求;

  4. 當 iowait 佔用率過高的時候,通常意味著某些程序的 IO 操作效率很低,或者 IO 對應設備的性能很低以至於讀寫操作需要很長的時間來完成;

  5. 當 irq/softirq 佔用率過高的時候,很可能某些外設出現問題,導致產生大量的irq請求,這時候通過檢查 /proc/interrupts 文件來深究問題所在;

  6. 當 steal 佔用率過高的時候,黑心廠商虛擬機超售了吧!

而 avail Mem 是一個新的參數值,用於指示在不進行交換的情況下,可以給新開啟的程序多少內存空間,大致和 free + buff/cached 相當,而這也印證了上面的說法,free + buffers + cached Mem才是真正可用的物理內存。並且,使用交換分區不見得是壞事情,所以交換分區使用率不是什麼嚴重的參數,但是頻繁的 swap in/out 就不是好事情了,這種情況需要注意,通常表示物理內存緊缺的情況。


top 雖然非常強大,但是通常用於控制台實時監測系統信息,不適合長時間(幾天、幾個月)監測系統的負載信息,同時對於短命的進程也會遺漏無法給出統計信息。


1.2

vmstat


vmstat 是除 top 之外另一個常用的系統檢測工具,下面截圖是我用-j4編譯boost的系統負載。


說到這裡,想到以前很多人糾結編譯 linux kernel 的時候 -j 參數究竟是 CPU Core 還是 CPU Core+1?通過上面修改 -j 參數值編譯 boost 和 linux kernel 的同時開啟 vmstat 監控,發現兩種情況下 context switch 基本沒有變化,且也只有顯著增加 -j 值後 context switch 才會有顯著的增加,看來不必過於糾結這個參數了,雖然具體編譯時間長度我還沒有測試。資料說如果不是在系統啟動或者 benchmark 的狀態,參數 context switch>100000 程序肯定有問題。


1.3

pidstat


如果想對某個進程進行全面具體的追蹤,沒有什麼比 pidstat 更合適的了——棧空間、缺頁情況、主被動切換等信息盡收眼底。這個命令最有用的參數是-t,可以將進程中各個線程的詳細信息羅列出來。


-r: 顯示缺頁錯誤和內存使用狀況,缺頁錯誤是程序需要訪問映射在虛擬內存空間中但是還尚未被加載到物理內存中的一個分頁,缺頁錯誤兩個主要類型是

  1. minflt/s 指的 minor faults,當需要訪問的物理頁面因為某些原因(比如共享頁面、緩存機制等)已經存在於物理內存中了,只是在當前進程的頁表中沒有引用,MMU 只需要設置對應的 entry 就可以了,這個代價是相當小的

  2. majflt/s 指的 major faults,MMU 需要在當前可用物理內存中申請一塊空閒的物理頁面(如果沒有可用的空閒頁面,則需要將別的物理頁面切換到交換空間去以釋放得到空閒物理頁面),然後從外部加載數據到該物理頁面中,並設置好對應的 entry,這個代價是相當高的,和前者有幾個數據級的差異

-s:棧使用狀況,包括 StkSize 為線程保留的棧空間,以及 StkRef 實際使用的棧空間。使用ulimit -s發現CentOS 6.x上面默認棧空間是10240K,而 CentOS 7.x、Ubuntu系列默認棧空間大小為8196K

這麼看來,如果查看單個尤其是多線程的任務時候,pidstat比常用的ps更好使!


1.4

其他



如果想直接監測某個進程佔用的資源,既可以使用top -u taozj的方式過濾掉其他用戶無關進程,也可以採用下面的方式進行選擇,ps命令可以自定義需要打印的條目信息:


while :; do ps -eo user,pid,ni,pri,pcpu,psr,comm | grep 'ailawd'; sleep 1; done


如想理清繼承關係,下面一個常用的參數可以用於顯示進程樹結構,顯示效果比pstree詳細美觀的多

➜ ~ ps axjf


二、磁盤IO類



iotop 可以直觀的顯示各個進程、線程的磁盤讀取實時速率;lsof 不僅可以顯示普通文件的打開信息(使用者),還可以操作 /dev/sda1 這類設備文件的打開信息,那麼比如當分區無法 umount 的時候,就可以通過 lsof 找出磁盤該分區的使用狀態了,而且添加 +fg 參數還可以額外顯示文件打開 flag 標記。


2.1

iostat


其實無論使用 iostat -xz 1 還是使用 sar -d 1,對於磁盤重要的參數是:

  • avgqu-s:發送給設備 I/O 請求的等待隊列平均長度,對於單個磁盤如果值>1表明設備飽和,對於多個磁盤陣列的邏輯磁盤情況除外


  • await(r_await、w_await):平均每次設備 I/O 請求操作的等待時間(ms),包含請求排列在隊列中和被服務的時間之和;

  • svctm:發送給設備 I/O 請求的平均服務時間(ms),如果 svctm 與 await 很接近,表示幾乎沒有 I/O 等待,磁盤性能很好,否則磁盤隊列等待時間較長,磁盤響應較差;

  • %util:設備的使用率,表明每秒中用於 I/O 工作時間的占比,單個磁盤當 %util>60% 的時候性能就會下降(體現在 await 也會增加),當接近100%時候就設備飽和了,但對於有多個磁盤陣列的邏輯磁盤情況除外;

還有,雖然監測到的磁盤性能比較差,但是不一定會對應用程序的響應造成影響,內核通常使用 I/O asynchronously 技術,使用讀寫緩存技術來改善性能,不過這又跟上面的物理內存的限制相制約了。

上面的這些參數,對網絡文件系統也是受用的。


三、網絡類



網絡性能對於服務器的重要性不言而喻,工具 iptraf 可以直觀的現實網卡的收發速度信息,比較的簡潔方便通過 sar -n DEV 1 也可以得到類似的吞吐量信息,而網卡都標配了最大速率信息,比如百兆網卡千兆網卡,很容易查看設備的利用率。

通常,網卡的傳輸速率並不是網絡開發中最為關切的,而是針對特定的 UDP、TCP 連接的丟包率、重傳率,以及網絡延時等信息。


3.1

netstat


➜ ~ netstat -s


顯示自從系統啟動以來,各個協議的總體數據信息。雖然參數信息比較豐富有用,但是累計值,除非兩次運行做差才能得出當前系統的網絡狀態信息,亦或者使用 watch 眼睛直觀其數值變化趨勢。所以netstat通常用來檢測端口和連接信息的:

netstat –all(a) –numeric(n) –tcp(t) –udp(u) –timers(o) –listening(l) –program(p)

–timers可以取消域名反向查詢,加快顯示速度;比較常用的有


➜  ~ netstat -antp  #列出所有TCP的連接

➜  ~ netstat -nltp   #列出本地所有TCP偵聽套接字,不要加-a參數



3.2

sar


sar 這個工具太強大了,什麼 CPU、磁盤、頁面交換啥都管,這裡使用 -n 主要用來分析網絡活動,雖然網絡中它還給細分了 NFS、IP、ICMP、SOCK 等各種層次各種協議的數據信息,我們只關心 TCP 和 UDP。下面的命令除了顯示常規情況下段、數據報的收發情況,還包括

TCP

  • active/s:本地發起的 TCP 連接,比如通過 connect(),TCP 的狀態從CLOSED -> SYN-SENT

  • passive/s:由遠程發起的 TCP 連接,比如通過 accept(),TCP 的狀態從LISTEN -> SYN-RCVD

  • retrans/s(tcpRetransSegs):每秒鐘 TCP 重傳數目,通常在網絡質量差,或者服務器過載後丟包的情況下,根據 TCP 的確認重傳機制會發生重傳操作

➜ ~ sudo sar -n UDP 1 

  • noport/s(udpNoPorts):每秒鐘接收到的但是卻沒有應用程序在指定目的端口的數據報個數

當然,這些數據一定程度上可以說明網絡可靠性,但也只有同具體的業務需求場景結合起來才具有意義。


3.3

tcpdump


tcpdump 不得不說是個好東西。大家都知道本地調試的時候喜歡使用 wireshark,但是線上服務端出現問題怎麼弄呢?


下面就是一個小的測試,可見 Chrome 啟動時候自動向 Webserver 發起建立了三條連接,由於這裡限制了 dst port 參數,所以服務端的應答包被過濾掉了,拿下來用 wireshark 打開,SYNC、ACK 建立連接的過程還是很明顯的!在使用 tcpdump 的時候,需要盡可能的配置抓取的過濾條件,一方面便於接下來的分析,二則 tcpdump 開啟後對網卡和系統的性能會有影響,進而會影響到在線業務的性能。

本文完!


原文出處:马哥Linux运维:Linux 服务器性能出问题,排查下这些参数指标
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|