Linux vmstat命令--監控CPU 性能分析


top是給Linux設計的。在FreeBSD VM里面的Free概念和其他OS完全不同,使用top查看Free內存對於FreeBSD來說可以說沒什么意義。正確的方法是看vmstat。

vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫, 是實時系統監控工具。該命令通過使用knlist子程序和/dev/kmen偽設備驅動器訪問這些數據,輸出信息直接打印在屏幕。vmstat反饋的與CPU相關的信息包括:
(1)多少任務在運行
(2)CPU使用的情況
(3)CPU收到多少中斷
(4)發生多少上下文切換

使用方法:

一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是采樣的時間間隔數,單位是秒,第二個參數是采樣的次數,如:

root@ubuntu:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0

2表示每個兩秒采集一次服務器狀態,1表示只采集一次。

Linux下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 100152 2436 97200 289740 0 1 34 45 99 33 0 0 99 0

procs
r 列表示運行和等待cpu時間片的進程數,如果長期大於1,說明cpu不足,需要增加cpu。當這個值超過了CPU數目,就會出現CPU瓶頸了。
b 列表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。
cpu 表示cpu的使用狀態
us 列顯示了用戶方式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化用戶的程序。
sy 列顯示了內核進程所花費的cpu時間的百分比。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。
wa 列顯示了IO等待所占用的CPU時間的百分比。這里wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁盤大量隨機訪問造成的,也可能磁盤或者磁盤訪問控制器的帶寬瓶頸造成的(主要是塊操作)。 
id 列顯示了cpu處在空閑狀態的時間百分比。空閑 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
system 顯示采集間隔內發生的中斷數
in 列表示在某一時間間隔中觀測到的每秒設備中斷數。
cs列表示每秒產生的上下文切換次數,如當 cs 比磁盤 I/O 和網絡信息包速率高得多,都應進行進一步調查。每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千並發甚至幾萬並發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經事的時間少了,CPU沒有充分利用,是不可取的。
memory
swpd 切換到內存交換區的內存數量(k表示)。如果swpd的值不為0,或者比較大,比如超過了100m,只要si、so的值長期為0,系統性能還是正常。否則,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那么你該升級內存了或者把耗內存的任務遷移到其他機器。
free 當前的空閑頁面列表中內存數量(k表示) 
buff 作為buffer cache的內存數量,一般對塊設備的讀寫才需要緩沖。 
cache: 作為page cache的內存數量,一般作為文件系統的cache,如果cache較大,說明用到cache的文件較多,如果此時IO中bi比較小,說明文件系統效率比較好。 
swap
si 由內存進入內存交換區數量。
so由內存交換區進入內存數量。 
IO
bi 從塊設備讀入數據的總量(讀磁盤)(每秒kb)。
bo 塊設備寫入數據的總量(寫磁盤)(每秒kb)
這里我們設置的bi+bo參考值為1000,如果超過1000,而且wa值較大應該考慮均衡磁盤負載,可以結合iostat輸出來分析。


Solairs系統下vmstat輸出釋疑

vmstat 5 5
linux_unix_vmstat

kthr
r 列, 表示在運行隊列中等待的進程數。
b 列, 表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。
w 列, 表示可以進入運行隊列但被交換出來的進程

 
cpu 表示cpu的使用狀態
us 列, 顯示了用戶方式下所花費 CPU 時間的百分比。一個 UNIX 進程可以在用戶方式下執行,也可以在系統(內核)方式下執行。當在用戶方式下時,進程在它自己的應用程序代碼中執行,不需要內核資源來進行計算、管理內存或設置變量。
sy 列, 詳述了 CPU 在系統方式下執行一個進程所花時間的百分比。這包括內核進程(kprocs)和其它需要訪問內核資源的進程所消耗的 CPU 資源。如果一個進程需要內核資源,它必須執行一個系統調用,並由此切換到系統方式從而使該資源可用。例如,對一個文件的讀或寫操作需要內核資源來打開文件、尋找特定的位置,以及讀或寫數據,除非使用內存映射文件。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
id 列, 顯示了沒有未決本地磁盤 I/O 時 CPU 空閑或等待的時間百分比。


faults 顯示采集間隔內發生的中斷數
in 列, 表示在某一時間間隔中觀測到的每秒設備中斷數。iostat命令輸出更有參考意義。
sy 列, 表示在某一時間間隔中觀測到的每秒系統調用次數。通過明確的系統調用,用戶進程可以使用資源。這些調用指示內核執行調用線程的操作,並在內核和該進程之間交換數據。因為工作負載和應用程序變化很大,不同的調用執行不同的功能,所以不可能定義每秒鍾有多少系統調用才算太多。這里設置參考值為10000,超過10000,用戶需要注意。
cs 列, 表示,如當 cs 比磁盤 I/O 和網絡信息包速率高得多,都應進行進一步調查。


memory
swap 列, 當前可用內存交換區容量(k表示)。
free 列, 當前的空閑頁面列表中內存數量(k表示)


page
re 列, 表示回收的頁面數。
mf 列, 表示小級別錯誤計數。
pi 列, 表示進入頁面數 (k表示)。
po 列, 表示出頁面數(k表示)。
fr 列, 表示空余的頁面數(k表示)。
de 列, 表示提前讀入的頁面中的未命中數。
sr 列, 表示通過時鍾算法掃描的頁面計數

 

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

sd列,

sd列,

--列,

解釋:
  如果 r經常大於 4 ,且id經常少於40,表示cpu的負荷很重。
  如果pi,po 長期不等於0,表示內存不足。
  如果disk 經常不等於0, 且在 b中的隊列 大於3, 表示 io性能不好。

 

AIX下vmstat釋疑:

# vmstat 5 20
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 1 244528 1227 0 3 3 56 151 0 404 1420 1415 4 2 88 6
2 6 244538 1241 0 39 148 2424 3511 0 904 4660 7571 49 12 2 38
5 3 244540 791 0 2 221 3937 6077 0 1183 6605 24619 44 34 1 21
1 7 245326 1009 0 11 331 1071 1934 0 884 3788 13000 23 25 0 52

分析如下:
kthr
kthr列表示每秒鍾在采樣間隔時間上對各種隊列中的內核線程數求得的平均值

r 列表示可運行的內核線程平均數,包括正在運行的線程和正在等待 CPU的線程。如果這個數字大於 CPU 的數目,至少有一個線程要等待 CPU,等待 CPU 的線程越多,越有可能對性能產生影響。


b 列表示每秒 VMM 等待隊列中的內核線程平均數。這包括正在等待文件系統 I/O 的線程,或由於內存裝入控制而暫掛的線程。這里參考值為2,大於2表示被阻塞列線程數目太多。 
[b] !阻塞線程數目太多
CPU
us 列顯示了用戶方式下所花費 CPU 時間的百分比。一個 UNIX 進程可以在用戶方式下執行,也可以在系統(內核)方式下執行。當在用戶方式下時,進程在它自己的應用程序代碼中執行,不需要內核資源來進行計算、管理內存或設置變量。
sy 列詳述了 CPU 在系統方式下執行一個進程所花時間的百分比。這包括內核進程(kprocs)和其它需要訪問內核資源的進程所消耗的 CPU 資源。如果一個進程需要內核資源,它必須執行一個系統調用,並由此切換到系統方式從而使該資源可用。例如,對一個文件的讀或寫操作需要內核資源來打開文件、尋找特定的位置,以及讀或寫數據,除非使用內存映射文件。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
id 列顯示了沒有未決本地磁盤 I/O 時 CPU 空閑或等待的時間百分比。
wa 列詳細顯示了暫掛本地磁盤 I/O 和 NFS 加載的磁盤的 CPU 空閑百分比。這里參考值為25%,大於25% 可能表示磁盤子系統可能沒有被正確平衡,或者這也可能是磁盤密集工作負載的結果。 
[us]+[sy] !IO不平衡
[wa] 正常
fault
in 列表示在某一時間間隔中觀測到的每秒設備中斷數。iostat命令輸出更有參考意義。
sy 列表示在某一時間間隔中觀測到的每秒系統調用次數。通過明確的系統調用,用戶進程可以使用資源。這些調用指示內核執行調用線程的操作,並在內核和該進程之間交換數據。因為工作負載和應用程序變化很大,不同的調用執行不同的功能,所以不可能定義每秒鍾有多少系統調用才算太多。這里設置參考值為10000,超過10000,用戶需要注意。
cs 列表示,如當 cs 比磁盤 I/O 和網絡信息包速率高得多,都應進行進一步調查。
[sy] 正常
memory
avm 列表示在收集 vmstat 樣本時存在的活動虛擬內存頁面數(4k為單位)。理想情況下, avm 應該比總 RAM 數小。如果不是,可能會出現一些虛擬內存頁面調度量。有多少頁面調度發生取決於兩個值之間的差值。記住,虛擬內存的概念是提供給我們尋址大於實內存容量的能力(一些在 RAM 內存中,而另一些在調頁空間中)。但是如果虛擬內存遠大於實內存,可能造成過度的頁面調度,從而導致延時。如果 avm 小於 RAM,那么當 RAM 中填滿文件頁時就會引起調頁空間的頁面調度。這種情況下,調整 minperm、maxperm 和 maxclient 的值可以減少調頁空間的頁面調度量。
fre 列顯示出空閑內存頁面的平均數量(4k為單位)。VMM 在空閑列表上保存的最少頁面數由 minfree 參數決定。這里的參考值為maxfree的缺省值720,小於720說明存在內存系統顛簸。 
[fre] 正常
[avm] avm的值約為:958MB
page
pi 列詳細描述了從調頁空間調入的頁數。調頁空間是駐留在磁盤上的虛擬內存的一部分。當內存過量使用時,它用作溢出。調頁空間由用於存儲從實內存中竊取到的工作組頁面的邏輯卷組成。當進程訪問一個竊取頁時,產生了一個缺頁故障,這一頁必須從調頁空間讀入內存。這里設置pi的參考值為5,大於5說明內存不足。
po 列顯示了調出到調頁空間的頁面數(速率)。無論什么時候竊取工作存儲器的一頁,如果它仍未駐留在調頁空間中或已被修改,那它會被寫入調頁空間。如果不被再次訪問,它會留在頁面調度設備中直到進程終止或放棄空間。如果包含在出故障頁面中的后續地址引用導致缺頁故障,那么這些頁面將會由系統個別調進。當一個進程正常終止,任何分配給該進程的調頁空間將被釋放。
fr 列表示在一定時間間隔內根據頁面替換算法每秒所釋放的頁數。當 VMM 頁面替換例程掃描頁面幀表(Page Frame Table,PFT)時,它使用一些條件選取要竊取的頁面以插入到可用內存幀的空閑列表中。
sr 列表示在一定時間間隔內根據頁面替換算法每秒所檢查的頁面數。頁面替換算法在可以竊取足夠的頁面以滿足頁面替換線程的需要之前可能不得不掃描許多頁面幀。
cy 列表示每秒頁面替換代碼掃描了 PFT 多少次。因為插入空閑列表可以不需要完全掃描 PFT,並且因為所有的 vmstat 字段報告為整數,這一字段通常為 0。
這里設置fr:sr的參考值為3,超過說明內存不足。 
[pi] !存在內存不足
[fr:sr] 正常

 

Hp-UNIX 命令vmstat釋疑

# vmstat 5 5
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
2 0 0 52260 24324 9 4 0 0 0 0 1 109 427 81 2 1 97
2 0 0 52260 24285 0 0 0 0 0 0 0 110 207 90 0 0 99
1 0 0 56211 24285 0 0 0 0 0 0 0 106 192 80 0 0 100
1 0 0 56211 24285 0 0 0 0 0 0 0 107 152 76 0 0 100
2 0 0 56552 24285 0 0 0 0 0 0 0 106 154 72 0 0 100

分析結果
procs
r 列表示在運行隊列中等待的進程數。
b 列表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。
w 列表示可以進入運行隊列但被交換出來的進程 。
[b] 正常
cpu 表示cpu的使用狀態
us 列顯示了用戶方式下所花費 CPU 時間的百分比。一個 UNIX 進程可以在用戶方式下執行,也可以在系統(內核)方式下執行。當在用戶方式下時,進程在它自己的應用程序代碼中執行,不需要內核資源來進行計算、管理內存或設置變量。
sy 列詳述了 CPU 在系統方式下執行一個進程所花時間的百分比。這包括內核進程(kprocs)和其它需要訪問內核資源的進程所消耗的 CPU 資源。如果一個進程需要內核資源,它必須執行一個系統調用,並由此切換到系統方式從而使該資源可用。例如,對一個文件的讀或寫操作需要內核資源來打開文件、尋找特定的位置,以及讀或寫數據,除非使用內存映射文件。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
id 列顯示了沒有未決本地磁盤 I/O 時 CPU 空閑或等待的時間百分比。 
[us]+[sy] 正常
fault 顯示采集間隔內發生的中斷數
in 列表示在某一時間間隔中觀測到的每秒設備中斷數。iostat命令輸出更有參考意義。
sy 列表示在某一時間間隔中觀測到的每秒系統調用次數。通過明確的系統調用,用戶進程可以使用資源。這些調用指示內核執行調用線程的操作,並在內核和該進程之間交換數據。因為工作負載和應用程序變化很大,不同的調用執行不同的功能,所以不可能定義每秒鍾有多少系統調用才算太多。這里設置參考值為10000,超過10000,用戶需要注意。
cs 列表示,如當 cs 比磁盤 I/O 和網絡信息包速率高得多,都應進行進一步調查。 
[sy] 正常
memory
avm 當前激活的虛擬內存數量(k表示)。
free 當前的空閑頁面列表中內存數量(k表示) 
[free] 正常
page
re 列表示回收的頁面數。
at 列表示地址翻譯錯誤計數。
pi 列表示進入頁面數 (k表示)。
po 列表示出頁面數(k表示)。
fr 列表示空余的頁面數(k表示)。
de 列表示提前讀入的頁面中的未命中數。
sr 列表示通過時鍾算法掃描的頁面計數 
[po] 正常
[fr:sr] 正常

 

示例分析:

示例1:

# vmstat 2
kthr     memory             page              faults        cpu
----- ----------- ------------------------ ------------ -----------
  r  b  avm    fre     re  pi  po  fr   sr  cy  in   sy    cs  us sy  id wa
  1  0 22478  1677   0   0   0   0    0   0 188 1380 157 57 32  0 10
  1  0 22506  1609   0   0   0   0    0   0 214 1476 186 48 37  0 16
  0  0 22498  1582   0   0   0   0    0   0 248 1470 226 55 36  0  9

  2  0 22534  1465   0   0   0   0    0   0 238  903 239 77 23  0  0
  2  0 22534  1445   0   0   0   0    0   0 209 1142 205 72 28  0  0
  2  0 22534  1426   0   0   0   0    0   0 189 1220 212 74 26  0  0
  3  0 22534  1410   0   0   0   0    0   0 255 1704 268 70 30  0  0
  2  1 22557  1365   0   0   0   0    0   0 383  977 216 72 28  0  0

  2  0 22541  1356   0   0   0   0    0   0 237 1418 209 63 33  0  4
  1  0 22524  1350   0   0   0   0    0   0 241 1348 179 52 32  0 16
  1  0 22546  1293   0   0   0   0    0   0 217 1473 180 51 35  0 14

此輸出顯示了在一個死循環中將程序引入到一個繁忙的多用戶系統中所帶來的效果。頭三個報告(已刪除摘要)表明系統平衡在 50-55% 的用戶、30-35% 的系統和 10-15% 的 I/O 等待處。當循環程序開始運行,所有可用的 CPU 周期都被耗用。因為循環程序不進行 I/O,所以它可以占有前面因為 I/O 等待而未用過的所有周期。更糟的是,這代表當一個有用進程放棄 CPU 時,始終有一個進程准備接管 CPU。因為循環程序的優先級與所有其他前台進程一樣,所以當另一個進程變得可分派時它也沒必要一定得放棄 CPU。該程序運行大約 10 秒鍾(五個報告),然后由 vmstat 命令報告的活動恢復到較正常的模式。

最佳利用是讓 CPU 在 100% 的時間中工作。這適用於單用戶系統的情況,不需要共享 CPU。總的來說,如果 us + sy 時間低於 90%,則不認為單用戶系統是 CPU 受限制的。但是,如果在一個多用戶系統中 us + sy 時間超過 80%,則進程可能要花時間在運行隊列中等待。響應時間和吞吐量會受損害

要檢查 CPU 是否是瓶頸,考慮 vmstat 報告中的四個 cpu 列和兩個 kthr(內核線程)列。

超過 25% 的 wa 的值可以表示磁盤子系統可能沒有被正確平衡,或者這也可能是磁盤密集工作負載的結果。

 

示例2:FreeBSD vmstat詳解(附例子)

 # vmstat
  procs memory page disk faults cpu
  r b w avm fre flt re pi po fr sr ad0 in sy cs us sy id
  0 2 1 270512 20316 30 0 0 0 26 5 1223 1589 98 593 1 1 99

最好使用vmstat t [n]命令,例如 vmstat 5 10,表示在t(5)秒時間內進行n(10)次采樣。如果只使用vmstat,無法反映真正的系統情況。

procs:
r-->在運行的進程數
  b-->在等待io的進程數(等待i/o,paging等等)
  w-->可以進入運行隊列但被替換的進程
memoy(以kb為單位,包括虛擬內核和真實內存,正在運行或最近20秒在運行的進程所用的虛擬內存將被視為active)
  avm-->活動的虛擬內存
  free-->空閑的內存
pages(統計錯誤頁和活動頁,每5秒平均一下,以秒為單位給出數值)
  flt-->錯誤頁總數
  re-->回收的頁面
  pi-->進入頁面數
  po-->出頁面數
  fr-->空余的頁面數
  sr-->每秒通過時鍾算法掃描的頁面
disk 顯示每秒的磁盤操作(磁盤名字的前兩個字母加數字,默認只顯示兩個磁盤,如果有多的,可以加-n來增加數字或在命令行下把磁盤名都填上。)

fault 顯示每秒的中斷數
  in-->設備中斷
  sy-->系統中斷
  cs-->cpu交換(上下文切換)
cpu 表示cpu的使用狀態
  cs-->用戶進程使用的時間
  sy-->系統進程使用的時間
  id-->cpu空閑的時間

如果 r經常大於 4 ,且id經常少於40,表示cpu的負荷很重。
如果pi,po 長期不等於0,表示內存不足。
如果disk 經常不等於0, 且在 b中的隊列 大於3, 表示 io性能不好。

以下是一個繁忙批量插入MySQL數據(大概每隔20秒可以插入50萬多條數據)的vmstat例子:

復制代碼
 procs      memory      page                    disks     faults         cpu
r b w avm fre flt re pi po fr sr da0 da1 in sy cs us sy id
1 0 63 23302M 803M 845 0 0 0 0 0 0 0 17 124 499 6 0 94
1 0 63 23302M 796M 837 0 0 0 2 0 1 0 18 158 505 6 0 94
1 0 63 23302M 790M 833 0 0 0 6 0 76 0 159 143 910 6 0 94
1 0 63 23302M 784M 868 0 0 0 16 0 8 0 34 156 550 6 0 94
2 0 63 23456M 709M 8317 2 0 0 2383 0 95 0 295 5504 1930 8 1 91
1 0 63 21975M 1281M 18909 3 0 0 94840 0 620 0 1893 64333 7822 10 4 87
1 0 63 21975M 1281M 415 0 0 0 342 0 1 0 29 611 566 6 0 94
1 0 63 22093M 978M 43503 0 0 0 5140 0 2187 0 4225 582 16279 6 2 92
復制代碼

 循環插入到了后面,隨着表越來越大,系統調用和上下文切換越來越頻繁:

復制代碼
 procs      memory      page                    disks     faults         cpu
r b w avm fre flt re pi po fr sr da0 da1 in sy cs us sy id
1 0 63 23233M 536M 28219 0 0 0 352 51252 869 0 1864 14542 11015 2 3 95
1 0 63 23349M 834M 12457 0 0 0 4 51247 2078 0 3945 179 14926 6 2 92
2 0 63 27343M 3130M 9295 0 0 0 2708 0 2 0 73 6988 1377 7 1 92
....中間比較正常,因為插入時間比較久
1 0 63 28788M 2934M 25760 0 0 0 5860 0 620 8 5529 42712 12924 11 2 86
0 0 63 25963M 3081M 4379 0 0 0 24049 0 3445 15 11274 97350 31798 2 7 91
0 0 63 33689M 1801M 388 0 0 0 4492 0 4403 15 8780 135421 35502 2 5 93
復制代碼

不熟悉mysql內部機制,但是很明顯,隨着表越來越大,表插入速度越來越慢,因為系統調用和上下文切換越來越頻繁了,浪費了很多CPU時間。
到了mysql表里有六千萬多條數據時,每插入五十萬條記錄,已經要耗時100s,整個mysql數據庫變得很繁忙,一些幾萬數據的插入也慢慢不能及時處理。

以下是一個拷貝4G文件到遠程NFS的vmstat例子:

復制代碼
 procs      memory      page                    disks     faults         cpu
r b w avm fre flt re pi po fr sr da0 da1 in sy cs us sy id
2 0 63 19731M 2400M 24415 0 0 0 70077 0 14 0 591 3915 1770 12 1 87
0 0 63 16352M 3594M 443 0 0 0 154948 0 2471 0 5067 17602 19448 1 2 96
0 0 63 16352M 3594M 0 0 0 0 0 0 772 0 1590 134 6577 0 0 100
0 0 63 16352M 3594M 0 0 0 0 0 0 856 0 1750 164 7135 0 0 100
0 0 63 16361M 3594M 1112 0 0 0 1030 0 400 0 815 1248 3620 0 0 100
0 0 63 16361M 3594M 0 0 0 0 0 0 0 0 15 116 488 0 0 100
0 0 63 16352M 3594M 329 0 0 0 352 0 2186 0 4275 595 15809 0 2 98
0 0 63 16352M 3594M 0 0 0 0 0 0 270 0 532 134 3186 0 0 100
0 0 63 16352M 3594M 0 0 0 0 0 0 185 0 368 164 2062 0 0 100
復制代碼

 

最后穩定下來,狀態良好的vmstat例子:

 procs      memory      page                    disks     faults         cpu
r b w avm fre flt re pi po fr sr da0 da1 in sy cs us sy id
0 0 63 16292M 3564M 0 0 0 0 0 0 0 0 12 142 472 0 0 100

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM