首頁 >系統教程 >Linux >解析 CentOS 服務程序效能評估文檔

解析 CentOS 服務程序效能評估文檔

王林
王林轉載
2024-01-13 08:27:131248瀏覽

1概述

1.1影響Linux服務程式效能的因素

#CPU、記憶體、磁碟I/O頻寬、網路I/O頻寬

1.2效能評判

CPU:user% sys%< 70%; 程式在使用者態和核心態的執行時間百分比。

內存:Swap In(si)=0; Swap Out(so)=0; 以不使用交換分區為準,如果頻繁用到交換分區,內存可能不夠了。

硬碟:iowait % < 20%;

網路:只要有足夠頻寬盡情的使用吧,達到網路卡頻寬linux系統表示毫無壓力

其中:  %user:表示CPU處在使用者模式下的時間百分比。

      %sys:表示CPU處在核心模式下的時間百分比。

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

      swap in:即si,表示虛擬記憶體的頁導入,即從SWAP DISK交換到RAM

      swap out:即so,表示虛擬記憶體的頁導出,即從RAM交換到SWAP DISK。

1.3效能分析工具

常用系統指令:top、free、ps、uptime、iotop、vmstat、iostat 、dstat、sar。
使用方法:top指令掌握全局,使用特定指令深入分析

常用組合方式:

(1)CPU瓶頸:top、vmstat、iostat、sar –u、sar -q

(2)記憶體瓶頸:free、vmstat、sar -B、sar –r、sar -W

(3)磁碟I/O瓶頸:iotop、iostat、sar -b、sar –u、sar -d

(4)網路瓶頸: dstat

2 top

2.1功能

提供了即時的對系統處理器、記憶體、任務等狀態監視;此指令可以按CPU使用、記憶體使用對任務進行排序;TOP是一個動態顯示過程,可以透過使用者按鍵來不斷刷新當前狀態,也可以在啟動時指定刷新間隔。

2.2指令輸出示意圖

top - 10:16:29 up 38 days, 15:48,  5 users,  load average: 0.04, 0.10, 0.05

Tasks: 569 total,   2 running, 562 sleeping,   0 stopped,   5 zombie

Cpu(s):  2.6%us,  1.3%sy,  0.4%ni, 95.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

####################################################################################. ###Mem:   3839112k total,  3151560k used,   687552k free,   302944k buffers### ###Swap:  6078456k total,   631852k used,  5446604k free,   348548k cached### ### PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME  COMMAND                             ### ###10603 zhixiang  20   0 1225m 284m  30m S  4.6  7.6 271:48.24 vs_exe                                    #### ###2473 xulun     20   0  118m  43m 6932 S  3.0  1.2 964:14.99 Xvnc                                       ### ###1412 xulun     30  10  232m  12m 5216 S  2.3  0.3   0:04.59 floaters        0:04.59 floaters                                #### ###14823 chujie    20   0 1112m 247m  17m S  2.0  6.6 363:51.38 vs_exe                                   ### ###17772 sihao     20   0 1101m 202m  10m S  1.7  5.4 631:21.17 vs_exe                               ### ###11054 sihao     20   0  906m  65m 9412 S  1.0  1.7 410:06.55 vs_exe                                  ###

20782 yongtao   20   0 1049m 173m 9996 S  1.0  4.6 196:05.10 vs_exe                                 

#14637 chujie    20   0 1274m 132m 2388 S  0.7  3.5  63:20.18 KugooPopMsgServ                         

1439 yanyun    20   0 15428 1600  940 R  0.3  0.0   0:00.01 top                                    

3491 zhixiang  20   0  129m  55m  17m S  0.3  1.5  10:57.25 Xvnc       10:57.25 Xvnc                                    

   1 root      20   0 19344 1200  984 S  0.0  0.0   0:00.89 init    

2.3指令輸出解析

Top輸出的資訊很多基本囊括了所有的性能指標,前五行是統計資訊區,表示的是系統整體的統計信息,包括:系統負載、任務、CPU、內存等;後面的是每個進程相關資訊。

第一行是任務佇列訊息,同uptime指令的執行結果是一樣的

[yanyun@~/test]$ uptime

10:20:17 up 38 days, 15:52,  5 users,  load average: 0.00, 0.04, 0.03

其內容如下:10:20:17:目前時間

38 days, 15:52:系統運行時間

5 users:目前登入使用者數量

load average: 0.00, 0.04, 0.03:系統負載,即任務佇列的平均長度。三個數值分別為  1分鐘、5分鐘、15分鐘前到現在的平均值。

第二行為程序的資訊

內容如下:569 total:進程總數

2 running,:正在運行的進程數

562 sleeping:睡眠的進程數

0 stopped:停止的進程數

5 zombie:殭屍行程數

第三行為CPU的訊息

內容如下:2.6%us:用戶空間佔用CPU百分比

1.3%sy:核心空間佔用CPU百分比

0.4%ni:使用者進程空間內改變過優先權的行程佔用CPU百分比

95.7%id:空閒CPU百分比

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

第四、五行為記憶體資訊;指令輸出跟free相同

[yanyun@~]$ free

            total       used       free     shared    buffers     cached

Mem:       3839112    3256976     582136          0     143664        0     143664     中

#-/ buffers/cache:    2668320    1170792

Swap:      6078456     574772    5503684

內容如下:Mem :3839112k total:物理記憶體總量

3151560k used:使用的實體記憶體總量

687552k free:空閒記憶體總量

302944k buffers:用作緩衝的記憶體量

Swap: 6078456k total:交換區總量

631852k used:使用的交換區總量

5446604k free:空閒交換區總量

348548k cached:快取總量。

註:buffer:可以認為是寫出磁碟的緩衝區;

Cache:讀出磁碟的快取。

Linux系統使用記憶體的原則是:不用白不用,用了也白用;盡可能的快取東西,所以往往看空閒記憶體很小,但是cache很大;Linux系統會定時啟動核心執行緒kswapd進行緩存回收。

後面的是顯示每個進程相關資訊

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

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

%MEM:進程使用的物理記憶體百分比

VIRT:進程使用的虛擬記憶體總量,單位kb

RES:進程使用的、未被換出的實體記憶體大小,單位kb。 RES=CODE DATA

SHR:共享記憶體大小,單位kb

#S:進程狀態。 (D=不可中斷的睡眠狀態       R=運作  S=睡眠  T=追蹤/停止  Z=殭屍行程)

2.4常用選項

top [-] [d][p][M][P]

參數說明:### ###d:指定每兩次螢幕資訊刷新之間的時間間隔。 (top –d 1:每秒刷新一次)### ###p:指定進程ID來只監控某個進程。 (top –d 1234:只查看pid為1234的進程資訊)###

k:終止一個行程。 Top運行時參數,系統會提示使用者輸入需要終止的進程PID,以及需要傳送給該進程什麼樣的訊號。使用訊號9強制結束該進程。

M:根據駐留記憶體大小進行排序。

P:根據CPU使用百分比大小進行排序。

附註:在命令列執行過程中按下數字鍵‘1’,可以查看到CPU每個核的相關資訊。

Tasks: 564 total,   3 running, 556 sleeping,   0 stopped,   5 zombie

Cpu0  :  2.9%us,  2.9%sy,  0.0%ni, 94.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  :  2.0%us,  2.0%sy,  0.0%ni, 96.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   3839112k total,  3445296k used,   393816k free,    48180k buffers

Swap:  6078456k total,   553876k used,  5524580k free,   976128k cached

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

14823 chujie    20   0 1112m 245m  16m R  3.0  6.5 373:07.82 vs_exe                                  

#5589 sihao     20   0 1019m 267m  29m R  2.0  7.1   2:24.80 vs_exe          2:24.80 vs_exe                               

5674 zhixiang  20   0 1103m 253m  37m S  2.0  6.8   4:17.89 vs_exe

3 iotop:

#3.1功能

是一個用來監視每個執行緒的磁碟 I/O 使用狀況的類別top 工具,

附註:此指令需要自行安裝(yum install iotop)

3.2指令輸出示意圖

Total DISK READ: 50.23 M/s | Total DISK WRITE: 34.25 K/s

 TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                            

61524 be/4 root       47.65 M/s    0.00 B/s  0.00 % 37.83 % ./relay_server

61539 be/4 root      121.77 K/s    0.00 B/s  0.00 % 26.73 % ./relay_server

61544 be/4 root      700.15 K/s    0.00 B/s  0.00 % 24.89 % ./relay_server

61543 be/4 root      528.92 K/s    0.00 B/s  0.00 % 21.29 % ./relay_server

61541 be/4 root      494.67 K/s    0.00 B/s  0.00 % 21.22 % ./relay_server

61540 be/4 root      323.44 K/s    0.00 B/s  0.00 %  8.62 % ./relay_server

61542 be/4 root      468.04 K/s    0.00 B/s  0.00 %  8.13 % ./relay_server

 480 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.02 % [jbd2/sda2-8]

   1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init

   2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]

3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]

3.3指令輸出解析

第一行:

Total DISK READ: 50.23 M/s :磁碟每秒讀出資料量

Total DISK WRITE: 34.25 K/s :磁碟每秒寫入資料量

下面的是每個執行緒的IO情況:

比較簡​​單;只解釋IO:跟top的wa意義相同,只是此處表示的一個線程的wa。

3.4常用選項

iotop [-] [d] [p]

參數說明:

d:指定每兩次螢幕資訊刷新之間的時間間隔。 (iotop –d 1:每秒刷新一次)

p:指定執行緒ID來只監控某個執行緒。 (iotop –d 1234:只查看pid為1234的進程資訊)

註:在命令列執行過程中按下字母‘o’,可以只查看有IO的線程。

pstree -p:查看進程樹,可以輸出進程之間的關係。

ps –eLf:查看線程。 ps –ef的高級版

4 vmstat:

#4.1功能

查看虛擬記憶體(Virtual Memory)使用狀況的工具

4.2指令輸出示意圖

[yanyun@~/test]$ vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- --- --cpu-----

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

#1s)

0  0 631376 834896  15108 452024    0    0     4     4    1

4.3指令輸出解析

Memory:同top的第四、五行資訊。

swap:記憶體到swap分割區換入換出速率。

io:讀寫磁碟速率

system in:每秒的中斷數,包含時鐘中斷 system cs:每秒的環境(上下文)切換數;頻繁切換對系統效能有影響,linux提供了執行緒對cpu的親和,可以將某個執行緒綁定到一個核運行。

cpu:同top輸出的第三行

註:swap項不為零,都用到交換分割區了,記憶體可能已經用完已經成為系統瓶頸的一項。

4.4常用選項

vmstat 1 10:每秒刷新一次,總共刷新十次退出。

註:下面的選項都是專業的查看某一特定項的信息,有幾個輸出一大堆信息,用到時google吧!

-a:顯示活躍和非活躍記憶體

-f:顯示從系統啟動至今的fork數量

-m:顯示slabinfo#-s:顯示記憶體相關統計資料及多種系統活動數量。 -d:顯示磁碟相關統計資料。

-p:顯示指定磁碟分割區統計資訊

5 iostat

5.1功能

用於輸出CPU和磁碟I/O相關的統計資訊

5.2輸出結果示意圖

[root@ShanWei_119_134_255_208 ~]# iostat -x

Linux 2.6.32-279.el6.x86_64 (ShanWei_119_134_255_208)   07/30/2013      _x86_64_     p##(

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

          2.63    0.00    2.25    5.98    0.00   89.14

#Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   rsec/s   wsec/s avgrq-sz avgqu-sz   await 7 sda             195.42   163.72  194.33  126.28 28464.35  2319.94    96.02 4.35  2319.94    96.02 1 0

sdb               0.33    48.97  122.71    2.70 29603.37   .52

5.3指令輸出解釋

avg-cpu段:

%user: 在使用者層級執行所使用的CPU的百分比.

%nice: nice操作所使用的CPU的百分比.

%sys: 在系統層級(kernel)運作所使用CPU的百分比.

%iowait: CPU等待硬體I/O時,所佔用CPU百分比.

%idle: CPU空閒時間的百分比.

Device段落:

tps: 每秒鐘發送到的I/O請求數

Blk_read /s: 每秒讀取的block數

Blk_wrtn/s: 每秒寫入的block數

Blk_read:   讀入的總block數

Blk_wrtn:  寫入的block總數

-x選項可以查看到以下更多資訊

rrqm/s:每秒鐘這個裝置相關的讀取請求有多少被Merge了

wrqm/s:每秒鐘這個裝置相關的寫入請求有多少被Merge了

rsec/s:每秒讀取的磁區數

wsec/:每秒寫入的磁區數

avgrq-sz: 平均每次裝置I/O操作的資料大小 (磁區)

avgqu-sz: 平均I/O佇列長度

await:平均每次設備I/O操作的等待時間(單位是毫秒) svctm: 平均每次設備I/O操作的服務時間 (單位是毫秒)

%util:在統計時間內所有處理IO時間,所以該參數暗示了設備的繁忙程度

5.4常用選項

iostat -d 2 6:每隔2秒,顯示一次設備統計資訊.總共輸出6次. -x:查看裝置的使用率、回應時間

6 dstat

###### ######6.1功能### ###

是一個全能係統資訊統計工具,只能對整個系統進行監控而不能對某一個進程或某一個程式進行深入分析;監控項目包括:cpu、磁碟、記憶體、網卡、進程、系統(彩色介面linux下面不多見!)

附註:此指令需要自行安裝(yum install dstat)

6.2指令輸出示意圖

[root@ShanWei_119_134_255_208 ~]# dstat -cdlmnpy

----total-cpu-usage---- -dsk/total- ---load-avg--- ------memory-usage----- -net/total- - --procs--- ---system--

usr sys idl wai hiq siq| read  writ| 1m   5m  15m | used  buff  cach  free| recv  send|run blk new| int   cswsw

## 3   2  89   6   0   0|  28M 1367k|5.41 5.07 4.87|4019M  172M 58.5G  267M| 019M  172M 58.5G  267M| 0. 5k

 2   1  85  12   0   0|  21M  828k|5.41 5.07 4.87|4020M  172M 58.6G  243M| 191  191 18k

 1   1  80  18   0   0|5828k 4804k|5.41 5.07 4.87|4018M  172M 58.6G  260M| 190M  172M 58.6G  260M| 190M  

6.3指令輸出解釋

前面基本上都解釋過了......

6.4常用選項

dstat –cdlmnpsy:cdlmnpsy這幾個選項基本上囊括了常用的,當然還有很多dstat –-help一下吧。

7 sar

7.1功能

System Activity Reporter系統活動狀況報告,是目前Linux 上最為全面的系統效能分析工具之一,可以從多方面對系統的活動進行報告,包括:檔案的讀寫情況、系統呼叫的使用情況、磁碟I/O、CPU效率、記憶體使用狀況、進程活動及IPC有關的活動等。

7.2指令輸出示意圖

[root@localhost ~]# sar -r 1 100

Linux 2.6.32-220.el6.x86_64 (localhost.localdomain)     07/30/2013      _x86_64_        (8 CPU)

03:17:59 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit

##03:18:00 PM   4988488   3062224     38.04    639136   2115404     72404

03:18:01 PM   4984464   3066248     38.09    639136   2115404     98060     2115404     98060    #.

03:18:02 PM   4985152   3065560     38.08    639136   2115420     97972     2115420     97972    #0.

03:18:03 PM   4985400   3065312     38.08    639136   2115420     97972     2115420     97972    #0.

[root@localhost ~]# sar -B 1 100

Linux 2.6.32-220.el6.x86_64 (localhost.localdomain)     07/30/2013      _x86_64_        (8 CPU)

03:19:09 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff

03:19:10 PM      0.00    157.14  45415.48      0.00  15541.67  

03:19:11 PM      0.00      0.00     40.40      0.00     75.76    .00

03:19:12 PM      0.00      0.00   5542.34      0.00   1584.68      0.00   1584.68    0.00 0. 0

[root@localhost ~]# sar -b 1 100

Linux 2.6.32-220.el6.x86_64 (localhost.localdomain)     07/30/2013      _x86_64_        (8 CPU)

03:19:38 PM       tps   ​​   rtps   ​​   wtps   ​​bread/s   bwrtn/s

03:19:39 PM     12.50      0.00     12.50      0.00    181.82

03:19:40 PM      0.00      0.00      0.00      0.00      0.00

03:19:41 PM      7.14      0.00      7.14      0.00    128.57

[root@localhost ~]# sar -W 1 100

Linux 2.6.32-220.el6.x86_64 (localhost.localdomain)     07/30/2013      _x86_64_        (8 CPU)

03:20:10 PM  pswpin/s pswpout/s

03:20:11 PM      0.00      0.00

03:20:12 PM      0.00      0.00

03:20:13 PM      0.00      0.00

[root@localhost ~]# sar -d 1 100

Linux 2.6.32-220.el6.x86_64 (localhost.localdomain)     07/30/2013      _x86_64_        (8 CPU)

03:20:48 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await # 

03:20:49 PM    dev8-0      7.69      0.00     79.12     10.29      0.00 1

03:20:49 PM   dev8-16      0.00      0.00      0.00      0.00    0.00      0.00  0

03:20:49 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await # 

03:20:50 PM    dev8-0     10.47      0.00    148.84     14.22     0.08.84     14.22    1.

##03:20:50 PM   dev8-16      0.00      0.00      0.00      0.00      0.00      0.00  0

7.3指令輸出解釋

kbmemfree:這個值和free指令中的free值基本上一致,所以它不包括buffer和cache的空間.

kbmemused:這個值和free指令中的used值基本上一致,所以它包含buffer和cache的空間.

%memused:這個值是kbmemused和記憶體總量(不包括swap)的一個百分比.

kbbuffers和kbcached:這兩個值就是free指令中的buffer和cache.

kbcommit:保證目前系統所需的記憶體,即為了確保不溢出而需要的記憶體(RAM swap).

%commit:這個值是kbcommit與記憶體總量(包括swap)的一個百分比.

pgpgin/s:表示每秒從磁碟或SWAP置換到記憶體的位元組數(KB)

pgpgout/s:表示每秒從記憶體置換到磁碟或SWAP的位元組數(KB)

fault/s:每秒鐘系統產生的缺頁數,即主缺頁與次缺頁之和(major minor)

majflt/s:每秒鐘產生的主缺頁數.

pgfree/s:每秒被放入空閒佇列中的頁數

pgscank/s:每秒被kswapd掃描的頁數

pgscand/s:每秒直接被掃描的頁數

pgsteal/s:每秒鐘從cache中清除來滿足記憶體所需的頁個數

%vmeff:每秒清除的頁(pgsteal)佔總掃描頁(pgscank pgscand)的百分比

tps:每秒鐘實體裝置的 I/O傳輸總量

rtps:每秒鐘從實體設備讀入的資料總量

wtps:每秒鐘寫入實體裝置的總資料

bread/s:每秒鐘從實體裝置讀入的資料量,單位為區塊/s

bwrtn/s:每秒鐘寫入實體裝置的資料量,單位為區塊/s

pswpin/s:每秒系統換入的交換頁面(swap page)數量

pswpout/s:每秒系統換出的交換頁面(swap page)數量

7.4常用選項

sar –[u][r][B][b][q][W][d]

參數說明:

-u:CPU資源監控

-r:記憶體與交換空間監控

-B:記憶體分頁監控

-b:IO和傳輸速率監控

-q:進程佇列系統負載監控

-W:系統交換分割區活動監控

-d:設備使用狀況監控

8 tmpfs

#8.1定義

tmpfs檔案系統是一種基於記憶體的檔案系統,掛載在/dev/shm下面。

8.2特點

#動態改變大小;存取快、完全駐留在RAM中;當然系統重啟就沒了。

8.3使用方法

1、linux下面POSIX標準的共享記憶體是基於此檔案系統實現的(還有一套System V標準的共享記憶體實作方式);

2、 將檔案建立在/dev/shm下面都將直接使用tmpfs;所以如果不需要考慮機器重啟後資料的遺失,把資料放在這下面吧,釋放你的磁碟壓力!

3、 tmpfs的預設大小是實體記憶體的一半。將最大容量調到40G,並且檔案節點數量調到1000000,可以透過下面的指令:

mount -o size=40G -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm

4、如果需要永久修改tmpfs檔案系統的大小,則需要修改/etc/fstab

9 crontab:

#9.1功能

定時調度一些指令的執行,相當於系統層級的計時器。在/var/spool/cron/有一些以使用者名稱命名的文件,表示的是這個使用者的定時執行任務。

9.2設定方法

格式說明:

  * * * * * /command path

前五個欄位可以取整數值,指定何時開始工作(分鐘 小時 日期 月份 星期),第六個域是字串,到期執行的腳本、程式等

43 21 * * *                 每天21:43 執行

0 17 * * 1                  每週一的 17:00 執行上

0,10 17 * * 0,2,3           每週日,週二,週三的 17:00和 17:10 執行

#0-10 17 1 * *               毎月1日從 17:00到7:10 斃隔1分鐘 執行

#0 0 1,15 * 1                毎月1日及 15日及 一日的 0:00 執行

42 4 1 * *                 毎月1日的 4:42分 執行

0 21 * * 1-6               週一至週六 21:00 執行

0,10,20,30,40,50 * * * *   每隔10分 執行

*/10 * * * *            每隔10分 執行

* 1 * * *             從1:0到1:59 每隔1分鐘 執行

0 1 * * *             1:00 執行

0 */1 * * *            毎時0分 每隔1小時 執行

0 * * * *             毎時0分 每隔1小時 執行

2 8-20/3 * * *          8:02,11:02,14:02,17:02,20:02 執行

30 5 1,15 * *           1日 和 15日的 5:30 執行

如下組態表示:每天3:00執行這個腳本/opt/ clear_old_file.sh;

這個腳本功能是:刪除/data1 /data2這兩個目錄下的五天內沒有訪問過的檔案

0 3 * * * (cd /opt/ && ./clear_old_file.sh > /dev/null &)

[root@ShanWei_119_134_255_208 ~]# cat /opt/clear_old_file.sh

#!/bin/sh

find /data1/* -type f -atime 5 -exec rm {} \;

#find /data2/* -type f -atime 5 -exec rm {} \;

#exit 0

10 proc:待續…

/proc 檔案系統是 GNU/Linux 特有的。它是一個虛擬的檔案系統,此檔案系統完全駐留在RAM中,因此在該目錄中的所有檔案都不會消耗磁碟空間。透過它能夠非常簡單地了解系統中的核心資訊、硬體資訊等;還可以透過它進行系統核心的參數的配置。許多命令實際上只是從 /proc 的文件中收集信息,然後按照它們自己的格式組織後顯示出來;像前面介紹的命令基本上就是這麼幹的。

以上是解析 CentOS 服務程序效能評估文檔的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除