天天看點

監控性能方面指令大總結

一、last 指令 

last    顯示系統開機以來獲是從每月初登入者的訊息 

    -R  省略 hostname 的欄位 

    -num 展示前 num 個  如:last -3  展示前三行 

    username 展示 username 的登入訊息 

    tty 限制登入訊息包含終端機代号 

範例: 

[root@elain ~]# last -R -2 

root     pts/0        Fri Oct 22 14:23   still logged in    

root     pts/0        Fri Oct 22 12:10 - 14:23  (02:13)     

wtmp begins Sat Sep  4 00:38:05 2010 

[root@elain ~]# last -2 root 

root     pts/0        192.168.8.87     Fri Oct 22 14:23   still logged in    

root     pts/0        192.168.8.87     Fri Oct 22 12:10 - 14:23  (02:13)     

二、top 指令 

top    是Linux下常用的性能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似于Windows的任務管理器。 

top - 14:34:14 up 4 days, 16:20,  2 users,  load average: 0.56, 0.23, 0.32 

Tasks:  75 total,   1 running,  74 sleeping,   0 stopped,   0 zombie 

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.8%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st 

Mem:   1026824k total,   917580k used,   109244k free,   124708k buffers 

Swap:  2096472k total,        0k used,  2096472k free,   664320k cached 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                

 3078 root      15   0 12720 1032  800 R  0.7  0.1   0:00.02 top                    

 2463 root      16   0 10232  676  584 S  0.3  0.1   1:33.69 hald-addon-stor        

    1 root      15   0 10352  692  584 S  0.0  0.1   0:00.61 init                   

    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.35 migration/0            

    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0            

統計資訊區前五行是系統整體的統計資訊。 

第一行是任務隊列資訊,同 uptime 指令的執行結果。其内容如下: 

14:34:14      目前時間 

up 4 days      系統已運作時間 

2 users              目前登入使用者數 

0.56, 0.23, 0.32  系統負載,即任務隊列的平均長度。三個數值分别為1分鐘、5分鐘、15分鐘前到現在的平均值。 

第二行為程序資訊,内容如下: 

Tasks:  75 total    程序總數 

1 running            正在運作的程序數 

74 sleeping            睡眠的程序數 

0 stopped            停止的程序數 

0 zombie            僵屍程序數 

第三行為CPU資訊,當有多個CPU時,這些内容可能會超過兩行。内容如下: 

Cpu(s):  0.0%us            使用者空間占用CPU百分比 

0.0% sy                    核心空間占用CPU百分比 

0.0% ni                    使用者程序空間内改變過優先級的程序占用CPU百分比 

98.8% id            空閑CPU百分比 

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

0.0% hi                    cpu處理硬體中斷的時間; 

0.0% si                 cpu處理軟中斷的時間; 

第四行為記憶體資訊,内容如下: 

Mem: 1026824k total      實體記憶體總量 

917580k used              使用的實體記憶體總量 

109244k free               空閑記憶體總量 

124708k buffers            用作核心緩存的記憶體量 

第五行為SWAP資訊 

Swap: 2096472k total    交換區總量 

2096472k free              空閑交換區總量 

664320k cached            緩沖的交換區總量。 

第六行往後是程序清單,常見的這幾列的意義分别為: 

PID(程序号), USER(運作使用者),PR(優先級),NI(任務nice值),VIRT(虛拟記憶體用量),RES(實體記憶體用量), 

SHR(共享記憶體用量),S(程序狀态),%CPU(CPU占用比),%MEM(記憶體占用比),TIME+(累計CPU占用時間)。 

除了這些資訊之外,top還提供了很多指令能幫我們更好的解讀這些資訊,例如按”M”鍵可以按記憶體用量進行排序; 

按”P”可以按CPU使用量進行排序,這樣一來對于分析系統瓶頸很有幫助;此外,按“f”可以進入互動頁面,選擇指定的列顯示, 

例如可以按“b”選擇顯示PPID,再按一次“b”即可取消顯示。”r”可以改變一個程序的nice值;”k”可以向一個程序發信号; 

”z”可以使用彩色顯示。程序資訊區統計資訊區域的下方顯示了各個程序的詳細資訊。首先來認識一下各列的含義。 

序号    列名    含義 

a    PID    程序id 

b    PPID    父程序id 

c    RUSER    Real user name 

d    UID    程序所有者的使用者id 

e    USER    程序所有者的使用者名 

f    GROUP    程序所有者的組名 

g    TTY    啟動程序的終端名。不是從終端啟動的程序則顯示為 ? 

h    PR    優先級 

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

j    P    最後使用的CPU,僅在多CPU環境下有意義 

k    %CPU    上次更新到現在的CPU時間占用百分比 

l    TIME    程序使用的CPU時間總計,機關秒 

m    TIME+    程序使用的CPU時間總計,機關1/100秒 

n    %MEM    程序使用的實體記憶體百分比 

o    VIRT    程序使用的虛拟記憶體總量,機關kb。VIRT=SWAP+RES 

p    SWAP    程序使用的虛拟記憶體中,被換出的大小,機關kb。 

q    RES    程序使用的、未被換出的實體記憶體大小,機關kb。RES=CODE+DATA 

r    CODE    可執行代碼占用的實體記憶體大小,機關kb 

s    DATA    可執行代碼以外的部分(資料段+棧)占用的實體記憶體大小,機關kb 

t    SHR    共享記憶體大小,機關kb 

u    nFLT    頁面錯誤次數 

v    nDRT    最後一次寫入到現在,被修改過的頁面數。 

w    S    程序狀态。 

x    COMMAND    指令名/指令行 

y    WCHAN    若該程序在睡眠,則顯示睡眠中的系統函數名 

z    Flags    任務标志,參考 sched.h 

            D=不可中斷的睡眠狀态 

            R=運作 

            S=睡眠 

            T=跟蹤/停止 

            Z=僵屍程序 

預設情況下僅顯示比較重要的  PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND  列。可以通過下面的快捷鍵來更改顯示内容。 

更改顯示内容通過 f 鍵可以選擇顯示的内容。按 f 鍵之後會顯示列的清單,按 a-z  即可顯示或隐藏對應的列,最後按Enter鍵确定。 

按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以将相應的列向右移動,而大寫的 A-Z  可以将相應的列向左移動。最後按Enter鍵确定。 

按大寫的 F 或 O 鍵,然後按 a-z 可以将程序按照相應的列進行排序。而大寫的  R 鍵可以将目前的排序倒轉。 

三、free 指令 

free  

[root@elain ~]# free 

             total       used       free     shared    buffers     cached 

Mem:       1026824     917764     109060          0     124908     664328 

-/+ buffers/cache:     128528     898296 

Swap:      2096472          0    2096472 

第1行 

total 記憶體總數: 1026824 

used 已經使用的記憶體數: 917764 

free 空閑的記憶體數: 109060 

shared 目前已經廢棄不用,總是0 

buffers Buffer Cache記憶體數: 124908 

cached Page Cache記憶體數:  664328 

第2行: 

-/+ buffers/cache的意思相當于: 

-buffers/cache 的記憶體數:1128528 (等于第1行的 used - buffers - cached) 

+buffers/cache 的記憶體數: 2752124 (等于第1行的 free + buffers + cached) 

第3行: 

total 交換分區總數: 2096472 

used 已經使用的: 0 

free 空閑的數: 2096472 

free -m    大小以M來顯示 

四、dstat 指令 

yum install -y dstat 

dstat 

     -c     顯示CPU情況 

-d     顯示磁盤情況 

-g     顯示通信情況 

     -m     顯示記憶體情況 

     -n     顯示網絡情況  

     -p     顯示程序情況 

     -s     顯示swap情況 

     -t     顯示系統時鐘 

     -y     顯示系統統計 

     -f     使用 -C, -D, -I, -N and -S 顯示 

     -v     使用-pmgdsc -D 顯示 

--ipc   報告IPC消息隊列和信号量的使用情況 

    --lock  enable lock stats 

    --raw   enable raw stats 

     --tcp  enable tcp stats 

    --udp   enable udp stats 

   --unix   enable unix stats 

   --mods   stat1,stat2 

 --integer  show integer values Bbs.Svn8.Com 

 --nocolor  disable colors (implies --noupdate) Bbs.Svn8.Com 

--noheaders 隻顯示一次表頭以後就不顯示了,使用重定向寫入檔案時很有用 Bbs.Svn8.Com 

--noupdate  disable intermediate updates Svn中文網 

--output file 寫入到CVS檔案中  

推薦使用 date && dstat -tclmdny 60 一分鐘監視一次(注意調節顯示的寬度,或去掉-t選項)。 

五、iostat 指令 

# cat /proc/partitions 

[root@elain ~]# cat /proc/partitions  

major minor  #blocks  name 

8     0      20971520 sda 

8     1        200781 sda1 

8     2       8193150 sda2 

8     3       2096482 sda3 

8     4             1 sda4 

8     5      10474348 sda5 

major: 主裝置号。8 代表 sda。 

minor: 次裝置号。5 代表 No.5 分區。 

#blocks: 裝置總塊數 

name: 裝置名稱。如 sda3。 

[root@elain ~]# iostat -x 

Linux 2.6.18-194.11.3.el5 (elain)      2010年10月22日 

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

           0.17    0.10    0.12    0.05    0.00   99.55 

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util 

sda               0.17     1.14  0.07  0.35     3.38    11.80    35.72     0.03   59.56   3.64   0.15 

sda1              0.00     0.00  0.00  0.00     0.00     0.00    18.96     0.00    8.47   6.65   0.00 

sda2              0.05     1.11  0.06  0.35     3.19    11.68    36.24     0.02   60.31   3.64   0.15 

sda3              0.00     0.00  0.00  0.00     0.00     0.00    31.65     0.00    8.21   6.47   0.00 

sda4              0.00     0.00  0.00  0.00     0.00     0.00     2.00     0.00    6.00   6.00   0.00 

sda5              0.11     0.04  0.01  0.01     0.18     0.12    21.11     0.00   39.66   4.71   0.01 

rrqm/s: 每秒進行 merge 的讀操作數目。即 delta(rmerge)/s 

wrqm/s: 每秒進行 merge 的寫操作數目。即 delta(wmerge)/s 

r/s: 每秒完成的讀 I/O 裝置次數。即 delta(rio)/s 

w/s: 每秒完成的寫 I/O 裝置次數。即 delta(wio)/s 

rsec/s: 每秒讀扇區數。即 delta(rsect)/s 

wsec/s: 每秒寫扇區數。即 delta(wsect)/s 

avgrq-sz: 平均每次裝置I/O操作的資料大小 (扇區)。即 delta(rsect+wsect)/delta(rio+wio) 

avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (因為aveq的機關為毫秒)。 

await: 平均每次裝置I/O操作的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio) 

svctm: 平均每次裝置I/O操作的服務時間 (毫秒)。即 delta(use)/delta(rio+wio) 

%util: 一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。 

即 delta(use)/s/1000 (因為use的機關為毫秒) 

如果 %util 接近 100%,說明産生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。 

svctm 一般要小于 await (因為同時等待的請求的等待時間被重複計算了), 

svctm 的大小一般和磁盤性能有關,CPU/記憶體的負荷也會對其有影響,請求過多 

也會間接導緻 svctm 的增加。await 的大小一般取決于服務時間(svctm) 以及 

I/O 隊列的長度和 I/O 請求的發出模式。如果 svctm 比較接近 await,說明 

I/O 幾乎沒有等待時間;如果 await 遠大于 svctm,說明 I/O 隊列太長,應用 

得到的響應時間變慢,如果響應時間超過了使用者可以容許的範圍,這時可以考慮 

更換更快的磁盤,調整核心 elevator 算法,優化應用,或者更新 CPU。 

隊列長度(avgqu-sz)也可作為衡量系統 I/O 負荷的名額,但由于 avgqu-sz 是 

按照機關時間的平均值,是以不能反映瞬間的 I/O 洪水。 

六、vmstat 指令 

vmstat 指令報告虛拟記憶體統計資訊和CPU負荷:頁面排程,交換,任務交換,CPU使用率。指令的文法是: 

vmstat 

      -swap    現時可用的交換記憶體(k表示) 

      -free    空閑的記憶體(k表示) 

      -disk    顯示每秒的磁盤操作。 s表示scsi盤,0表示盤号 

[root@elain ~]# vmstat 1 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 109036 123156 664444    0    0     1     3   37   12  0  0 100  0  0 

 0  0      0 109036 123156 664444    0    0     0     0 1022   28  0  0 100  0  0 

 0  0      0 109036 123156 664444    0    0     0     0 1003   17  0  0 100  0  0 

如果 r經常大于 4 ,且id經常少于40,表示cpu的負荷很重。 

目前說來,對于伺服器監控有用處的度量主要有: 

r(運作隊列) 

us(使用者CPU) 

sy(系統CPU) 

id(空閑) 

通過VMSTAT識别CPU瓶頸 

r(運作隊列)展示了正在執行和等待CPU資源的任務個數。當這個值超過了CPU數目,就會出現CPU瓶頸了。 

獲得CPU個數的指令(LINUX環境): 

cat /proc/cpuinfo|grep processor|wc -l 

當r值超過了CPU個數,就會出現CPU瓶頸,解決辦法大體幾種: 

1. 最簡單的就是增加CPU個數 

2. 通過調整任務執行時間,如大任務放到系統不繁忙的情況下進行執行,進爾平衡系統任務 

3. 調整已有任務的優先級   

通過VMSTAT識别CPU滿負荷 

首先需要聲明一點的是,vmstat中CPU的度量是百分比的。當us+sy的值接近100的時候,表示CPU正在接近滿負荷工作。 

但要注意的是,CPU 滿負荷工作并不能說明什麼,UNIX總是試圖要CPU盡可能的繁忙,使得任務的吞吐量最大化。唯一能夠确定CPU瓶頸的還是r(運作隊列)的值。  

通過VMSTAT識别RAM瓶頸 

資料庫伺服器都隻有有限的RAM,出現記憶體争用現象是Oracle的常見問題。 

首先察看RAM的數量,指令如下(LINUX環境): 

Mem:       1026824     918284     108540          0     123180     664448 

-/+ buffers/cache:     130656     896168 

當然可以使用top等其他指令來顯示RAM。 

當記憶體的需求大于RAM的數量,伺服器啟動了虛拟記憶體機制,通過虛拟記憶體,可以将RAM段移到SWAP DISK的特殊磁盤段上, 

這樣會出現虛拟記憶體的頁導出和頁導入現象,頁導出并不能說明RAM瓶頸,虛拟記憶體系統經常會對記憶體段進行頁導出, 

但頁導入操作就表明了伺服器需要更多的記憶體了,頁導入需要從SWAP DISK上将記憶體段複制回RAM,導緻伺服器速度變慢。  

解決的辦法有幾種: 

1. 最簡單的,加大RAM 

2. 改小SGA,使得對RAM需求減少 

3. 減少RAM的需求(如:減少PGA) 

vmstat各項: 

procs: 

r-->在運作隊列中等待的程序數 

b-->在等待io的程序數 

w-->可以進入運作隊列但被替換的程序 

memoy 

swap-->現時可用的交換記憶體(k表示) 

free-->空閑的記憶體(k表示) 

pages 

re--》回收的頁面 

mf--》非嚴重錯誤的頁面 

pi--》進入頁面數(k表示) 

po--》出頁面數(k表示) 

fr--》空餘的頁面數(k表示) 

de--》提前讀入的頁面中的未命中數 

sr--》通過時鐘算法掃描的頁面 

disk 顯示每秒的磁盤操作。 s表示scsi盤,0表示盤号 

fault 顯示每秒的中斷數 

in--》裝置中斷 

sy--》系統中斷 

cy--》cpu交換 

cpu 表示cpu的使用狀态 

cs--》使用者程序使用的時間 

sy--》系統程序使用的時間 

id--》cpu空閑的時間 

如果pi,po 長期不等于0,表示記憶體不足。 

如果disk 經常不等于0, 且在 b中的隊列 大于3, 表示 io性能不好。 

七、mpstat 指令 

mpstat是MultiProcessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計資訊,這些資訊存放在/proc/stat檔案中。 

在多CPUs系統裡,其不但能檢視所有CPU的平均狀況資訊,而且能夠檢視特定CPU的資訊。mpstat的文法如下: 

[root@elain ~]# mpstat 

16時13分59秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s 

16時13分59秒  all    0.17    0.10    0.07    0.05    0.02    0.03    0.00   99.56   1018.86 

%user 在internal時間段裡,使用者态的CPU時間(%),不包含 nice值為負 程序 (usr/total)*100   

%nice 在internal時間段裡,nice值為負程序的CPU時間(%)   (nice/total)*100   

%sys  在internal時間段裡,核心時間(%)   (system/total)*100 

%iowait 在internal時間段裡,硬碟IO等待時間(%) (iowait/total)*100 

%irq 在internal時間段裡,硬中斷時間(%)      (irq/total)*100 

%soft 在internal時間段裡,軟中斷時間(%)    (softirq/total)*100 

%idle 在internal時間段裡,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間(%)(idle/total)*100 

%intr/s 在internal時間段裡,每秒CPU接收的中斷的次數intr/total)*100 

total_cur=user+system+nice+idle+iowait+irq+softirq 

total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq 

user=user_cur – user_pre 

total=total_cur-total_pre 

其中_cur 表示目前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數點。 

執行個體: 每2秒産生了2個處理器的統計資料報告 

下面的指令可以每2秒産生了2個處理器的統計資料報告,一共産生三個interval 的資訊,然後再給出這三個interval的平 

均資訊。預設時,輸出是按照CPU 号排序。第一個行給出了從系統引導以來的所有活躍資料。接下來每行對應一個處理器的 

活躍狀态。。 

[root@elain ~]# mpstat -P ALL 2 3 

16時17分43秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s 

16時17分45秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00   1036.36 

16時17分45秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00   1036.36 

16時17分45秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      0.00 

16時17分45秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s 

16時17分47秒  all    0.00    0.00    0.00    0.00    0.00    0.25    0.00   99.75   1045.27 

16時17分47秒    0    0.00    0.00    0.00    0.00    0.50    0.00    0.00   99.50   1045.27 

16時17分47秒    1    0.50    0.00    0.00    0.00    0.00    0.00    0.00   99.50      0.00 

16時17分47秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s 

16時17分49秒  all    0.00    0.00    0.25    0.50    0.00    0.00    0.00   99.25   1031.84 

16時17分49秒    0    0.00    0.00    0.50    1.49    0.00    0.00    0.00   98.01   1031.84 

16時17分49秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      0.00 

Average:     CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s 

Average:     all    0.00    0.00    0.08    0.17    0.00    0.08    0.00   99.67   1037.83 

Average:       0    0.00    0.00    0.17    0.50    0.17    0.00    0.00   99.17   1037.83 

Average:       1    0.17    0.00    0.00    0.00    0.00    0.00    0.00   99.83      0.00 

八、sar 指令 

該指令是系統維護 的重要工具,主要幫助我們掌握系統資源的使用情況,特别是記憶體和CPU 的使用情況, 是UNIX系統使用者應該掌握的工具之 一。  

sar  

-A:所有報告的總和。  

  -u:CPU使用率  

  -v:程序、I節點、檔案和鎖表狀态。  

-d:硬碟使用報告。  

-r:沒有使用的記憶體頁面和硬碟塊。  

-g:序列槽I/O的情況。  

   -b:緩沖區使用情況。  

   -a:檔案讀寫情況。  

   -c:系統調用情況。  

   -R:程序的活動情況。  

   -y:終端裝置活動情況。  

   -w:系統交換活動。  

執行個體1:每60秒采樣一次,連續采樣5次,觀察CPU的使用情況,并将采樣結果以二進制形式存入目前目錄下的檔案/sar中,需鍵入如下指令: 

[root@elain ~]# sar -u -o sar 60 5  

16時28分47秒       CPU     %user     %nice   %system   %iowait    %steal     %idle 

16時29分47秒       all      0.00      0.00      0.00      1.00      0.00     99.00 

16時30分47秒       all      0.00      0.00      0.00      1.00      0.00     99.00 

16時31分47秒       all      0.00      0.00      0.00      1.50      0.00     98.50 

16時32分47秒       all      0.00      0.00      0.00      1.00      0.00     99.00 

16時33分57秒       all      0.00      0.00      0.00      1.00      0.00     99.00 

Average:          all      0.00      0.00      0.00      1.10      0.00     98.90 

在顯示内容包括:  

%usr:   CPU處在使用者模式下的時間百分比。  

%sys:   CPU處在系統模式下的時間百分比。  

%iowait:CPU等待輸入輸出完成時間的百分比。  

%idle:  CPU空閑時間百分比。  

我們應主要注意%wio和%idle,%wio的值過高,表示硬碟存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高 但系統響應慢時,有可能是CPU等待配置設定記憶體, 

此時應加大記憶體容量。%idle值如果持續低于10,那麼系統的CPU處理能力相對較低,表明系統中最需要 解決的資源是CPU。  

檢視二進制檔案sar中的内容,則需鍵入如下sar指令:  

sar -u -f sar 

執行個體2:每30秒采樣一次,連續采樣5次,觀察核心表的狀态,需鍵入如下指令:  

[root@elain ~]# sar -v 60 5 

16時32分54秒 dentunusd   file-sz  inode-sz  super-sz %super-sz  dquot-sz %dquot-sz  rtsig-sz %rtsig-sz 

16時33分54秒     60602       510     50659         0      0.00         0      0.00         0      0.00 

16時34分54秒     60602       510     50659         0      0.00         0      0.00         0      0.00 

16時35分54秒     60602       510     50659         0      0.00         0      0.00         0      0.00 

16時36分54秒     60602       510     50659         0      0.00         0      0.00         0      0.00 

16時37分54秒     60602       510     50659         0      0.00         0      0.00         0      0.00 

Average:        60602       510     50659         0      0.00         0      0.00         0      0.00 

顯示内容表示,核心使用完全正常,三個表沒有出現溢出現象,核心參數不需調整,如果出現溢出時,要調整相應的核心參數,将對應的表項數加大。  

小提示: 

懷疑CPU存在瓶頸,可用sar -u 和sar -q來看,懷疑I/O存在 瓶頸,可用sar -b、sar -u和sar-d來看。 

本文轉自 elain2012 51CTO部落格,原文連結:http://blog.51cto.com/elain/619144

繼續閱讀