bin/iperf.exe -s -P 0 -i 1 -p 5001 -f m -X 60bin是什么意思思

引用地址:
注意: 该地址仅在今日23:59:59之前有效MM1002-G--KP-P-CM6-R-产品报价-上海祥树实业发展有限公司
<img id="zhantai_logo" src=/1/743184.jpg alt=上海祥树实业发展有限公司
onload="120<=this.width?this.width=120:this.90
上海祥树实业发展有限公司
HYDAC,KUBLER,REXROTH,KOBOLD,WAYCON
中级榜上有名
&您所在位置:首页 &
MM1002-G--KP-P-CM6-R
请输入产品关键字:
地址:上海市普陀区长寿路587号沙田大厦21楼
邮编:200060
联系人:周峰
电话:86-021-0传真:86-021-手机:留言:个性化:
MM1002-G--KP-P-CM6-R
<img src="/2/977818.jpg" alt="ELCIS
MM1002-G--KP-P-CM6-R" onload="javascript:if (this.width
&&点击浏览大图
公司名称:
产品报价:
发布日期:
所 在 地:
生产地址:
已获点击:
【详细说明】
上海祥树实业发展有限公司 & &品牌负责人:周工地址:中国上海市长寿路587号沙田大厦21楼 & &&邮编:200060电话:021-0 &传真:021- & &&E-mail:手机: & & &QQ: & &&MSN:xs-s-&ELCIS&I/X 115K-N/N-LLELCIS0Q80ESX6--A-6-CV1-R-0ELCIS0Q80EXS6--A6-CV1-R-05ELCIS1/115--BZ-N-CW-03ELCIS1/115--BZN-CWR03ELCIS1/115--BZ-N-CW-R-03ELCIS1/115--BZ-C-CLELCIS1/115R--BZ-C-CL-RELCIS1/155A--BZ-C-CL-RELCIS1/45CC-1000-5-BZ-Y-VN-02ELCIS1/63-180-1828-BZ-CMELCIS1/90A-1024-BZ-C-CL-RELCIS1/92--BZ-N-CV-R-03ELCIS1024imp,15vdc (1&P8001-1,HTL)ELCIS1024imp,15vdc(1&P8001-1,HTL)ELCIS10-2500-5-BZ-N-CVK-R-02ELCIS11*11*30具体参数请与我联系ELCIS11*35mm& 联轴器ELCIS11/00& ELCIS11/00 c8-500-324/5-BELCIS115 /BZ/C/CW/R02ELCIS115//BZ/C/CL/RELCIS115/1024-BZ-N-CL-R 编码器ELCIS115--BZ-C-CELCIS115--B-B-CMELCIS115--C-CM-RELCIS115--B-C-CM-RELCIS115--BZELCIS115--BZ-C-CL-RELCIS115--BZ-B-CM-RELCIS115--BZ-L-CLELCIS115-10-1230-BZ-C-CL-R 编码器ELCIS115--13B-W-CW-R-03ELCIS115--13Z-W-CW-R-03ELCIS115--BGN-CW103ELCIS115--BIN-CMR03ELCIS115--BZ-C-CL-RELCIS115--BZN-CWR03ELCIS115--BZN-CWR03ELCIS115--BZ-C-CL-RELCIS115--BZ-C-CW-R-02ELCIS115-BCN-CW203ELCIS115--BZN-6LRELCIS115--BZ-N-CL-RELCIS115--BZN-CWR03ELCIS115--N-CL-RELCIS115--BZ-B-CM-R SN:5001ELCIS115--B-B-CM-RELCIS115--10-9-B-B-MMRELCIS115--BZ-C-CW-R-02ELCIS115--BZ-C-CL-RELCIS115--BZ-C-CL-RELCIS115-400-1828-B-B-CMELCIS115-500-824-B-B-CM-RELCIS115-512-824-BZ-B-CM-RELCIS115-ELCIS115BT--BZ-N-CV-R-01ELCIS115C--B-B-CM-RELCIS115K/500/500/82/82/5B/B-MN-RELCIS115K-8-2B-B-CKRELCIS115K-/82-9B-B-MMRELCIS115K-500/500-82/82-5B-B-MN-RELCIS115KB-/18-2B-B-CK-RELCIS115R/360/8-24/BZ/B/CL/RELCIS115R/360/8-24/BZ/B/CL/RELCIS115R--BZ-C-CL-RELCIS115R--BZ-B-CL-RELCIS115R--BZ-C-CL-R编码器ELCIS115R--BZ-B-CM-RELCIS115R--BZ-CM-RELCIS115R--BZ-CM-R配套插头ELCIS115R-25000-5-BZ-N-CV-R-01ELCIS115RCLRELCIS115R-360-824-BZ-B-CL-RELCIS115R-360-824-BZ-B-CL-RELCIS115R-360-824-BZ-CL-RELCIS115R-500-5-BZ-N-CVELCIS115T 500-824ELCIS115T--B-B-CM-RELCIS115T--B-C-CM-RELCIS115T-10-1230-BZ-C-CL-RELCIS115T--BZ-C-CL-RELCIS115T--BZ-C-CL-RELCIS115T-360-824-BZ-B-CMR/BPB11/2CELCIS115T-500-824-BZ-B-CM-RELCIS115TB--B-B-CM-RELCIS115TB--BZ-C-CL-RELCIS12*35mm联轴器ELCISA 18-1SF2+MS3057-10AELCIS159B--B-B-CM-RELCIS159C-5000-5-BZ-C-CL-BELCIS15F10-5S-30-1000-C-A-1000ELCIS27-157-5-BE-N-CV-01ELCIS27-157-5-BZ-N-CV-01ELCIS27-800-5-BZ-B-CV-01ELCIS30/1024/5/BZ/N/CVK关电编码器ELCIS 09/03 58S 4000-5-BZ-ELCIS300-D-360-1828-KP-L-CM5-RELCIS306/100/1224/BZ/R/CW/AELCIS310-2ELCIS3410003RELCIS359Z10/G/--/CV/RELCIS359Z10/Z/4096/5/NPN/PARALLED/ELCIS3604 ITSELCIS365-G-360-1828-B-Z-CD-RELCIS38--B-B-CV-R-02ELCIS38--B-B-CV-03ELCIS38--BZ-N-CVELCIS38--BZ-N-CV-01ELCIS38--BZ-N-CV-01ELCIS38C8-500-824/5-BN-CV-R01ELCIS38S6/200/530/BZ/B/CV/RELCIS390--V-CLELCIS390-D-360-1828-KPEG-97045ELCIS390-D-360-1828-KP-L-CM5-RELCIS3PO-D-1828-KP-L-CM5-RELCIS400 /04ELCIS/04ELCIS406//BZ/H/CV/RELCIS406--BZ-R-CVK-KELCIS40-6-360-5-BZ-N-CVK-R5ELCIS40Z9/1024/5/BZ/N/CVK/RELCIS41S/600/1828/M/B/CVELCIS45CC--BZ-C-CBELCIS45CC--BZ-C-CD 4007528ELCIS45CC-200-224-B-B-CDELCIS45CC-200-824-BZ-B-CDELCIS8-BZ-K-CV-R-05ELCIS-BZ-K-CV-R5ELCIS28-B-K-CV-R01ELCIS28-B-K-CV-R-05ELCIS46-10--BZ-N-CVELCIS466-200-824-BZ-B-CV-R-01ELCIS466-250-824-BZ-CV-R-01ELCIS467-20-824-M-B-CV-R-01ELCIS467-40-1828-M-B-CV-R-01ELCIS468-250-824-BZ-B-CV-R-01ELCIS46P6-10-1828-BZ-CV-R-01ELCIS46P6-10-1828-M-CV-R-01ELCIS46P6-10-1828-MV-CV-R-01ELCIS46P6-20-1828-M-CV-R-01ELCIS46P8-10-1828-BZ-B-CV-RELCIS/M/K/CV/RELCIS/M/K/CV/RELCIS478,DC8-24V/10maELCIS56QE-500-B-B-CE-RELCIS57B50ELCIS58--N-CE-RELCIS58-1500-5-BZ-N-CL-04/03-300445ELCIS58-2500-5-BZ-N-CL-RELCIS58--BZ-N-SLELCIS58H//BZ/L/CV/RELCIS58H/1024/5/BZ/N/CV/RELCIS58H-Z-L-CV-RELCIS58H-25-1030-B-B-CE-R 编码器ELCIS58S 800 5 BE N CLRELCIS58S/50/824/BZ/CM/RELCIS58S-2500-24-BZ-TTL-CL-RELCIS58S-2500-24-BZ-X-CL-RELCIS58S-2500-5-BZ-N-VH-01ELCIS58S-4000-5-BZ-Y-CW01 3009024ELCIS58S-50-824-BZ-CMELCIS59C15--BZL-CVELCIS59C15-150-815-D-C-CM-RELCIS59C15-200-815-B-C-CM-RELCIS59C15-200-824-BZ-CV-R-01ELCIS59C15--B-B-CV-R-01ELCIS59C51-150-1828-B-B-VM-R-01ELCIS59UMA10//BZ/L/CV/RELCIS59UMA14//BZ/L/CV/RELCIS59UMA15//BZ/L/CV/RELCIS62CB--BR-B-CH-RELCIS62CB--BZ-B-CV-R-01ELCIS62CB--BZ-B-VH-RELCIS62CD/267/824/B2/B/CV/R01ELCIS63//B/B/CM/RELCIS63--B-B-CM-RELCIS/BZ/N/CL/RELCIS63-10000-5-BZ-C-CL-RELCIS63-1000-5-BZ-C-CL-RELCIS63-1440-5-B-N-CL-RELCIS63--BZ-B-CM-RELCIS63-15-824-B-B-CW-R-01ELCIS63-360-18-28V-B-B-CM-RELCIS63-5000-5-BZ-N-CL-RELCIS63-800-824-BZ-B-CM-RELCIS63-952-1000-5-BZCC2RELCIS63S--BZ-C-CL-RELCIS63S--BZ-L-CH-RELCIS63S-360-1828-BZ-L-CH-R encoderELCIS64 B-2000-5-BI-N-CDELCIS64--BZ-C-CDELCIS64B/2000/5/BZ/N/CD 编码器ELCIS64B--N-7ELCIS64B-1024-5-BZ-N-CDELCIS64B--N-CD无此型号ELCIS/71/115R--ELCIS-BZ-CW-R-01ELCIS-2 B.CWELCIS9/08 1/LY90A-1024-ELCIS80--B-C-CM-RELCIS80--B-B-CH-RELCIS80-150-1828-B-B-CM-RELCIS80EXS//BZ/L/CV1/R2ELCIS90A/400/824/B/CVELCIS90A10//BZ/N/CL/RELCIS90A10/180/824/BZ/N/CL/RELCIS90A10/600/824/BZ/N/CL/RELCIS90A--BZ-C-CL-RELCIS90A--BZ-N-CW-RELCIS90A-128-18285-BZ-N-CW-R03ELCIS90C15--B2-M-CV-RELCIS90CBB15--B2-M-CV-RELCIS90CBB25//BZ/B/CV/RELCIS90CD//BZ/N/CV/RELCIS90D-30000-5-BZ-T-CV-RELCIS90D--M-B-CM-RELCIS90H10/4/BZ/N/CL/RELCIS90H10/4/BZ/N/CL/RELCIS958H 12/00/10/B/PP/0/CVELCIS958H16/-/10/B/P1/0/CVELCIS958H16/00/10/B/P1/0/CVELCIS958HP 12/12/10/B/DP/W/3PGELCIS958HP12-12-10-B-DP-0-3PGELCIS958HP12-12-10-B-DP-W-3PGELCIS958HP-12-12-10-B-DP-W-3PGELCIS958HP12-4096-B-B1-DP-OELCIS958HP13/12/10/B/DP/0/3PGELCIS958HS 12/12/10/B/S2/0/CRW(1M)ELCIS958HS13/12/10/G/S2/0/CRWELCIS958HS8/8/10/G/S1/0/CRWELCIS958S 10/-/06/G/P1/0/CVELCIS958S12/12/06/G/P1/0/CVELCIS958SS 12/12/06/G/SL/O/PRLELCIS959C16-00-15-B-P1-0-CVELCIS959CP13/12/08/B/DP/0/3PGELCIS959CP13-12-15-B-DP-0-3PGELCIS959CS 13/12/14/G/SL/0/PRLELCISA/958HP-12-12-10-13-DP-0-3PGELCISA/958HP12-12-10-B-DP-0-3PGELCISA/MM1001-G--KP-CM6-RELCISA/X390-1024-12-V-CM5ELCISA/XMM1001-B-512-1828-B-LF-SM6ELCISA115R-ELCISA115R-ELCISA3 BCG-024-87-B-CM-B SN:76617ELCISA358H10/G//-/--/CV/RELCISA358HD181824/-/-P/CL/RELCISA358HJ10/G//S/CV/RELCISA358S-6G--L-CM5-AP-24ELCISA358S-6G--L-CM5-AR-ELCISA7-468-500-5-BZ-N-CV-R-01ELCISA7-46B-500-5-BE-N-CV-R-01ELCISA9-466-2000-5-BZ-N-CV-R-01ELCISAF13P 10M-B-100-1030-3PGELCISAF13S10M+958SS13/12/06/G/SLELCISAF500-G-97-1828-S-CL-RELCISBD-1-12X12-D48L64M5ELCISC.115R..B.C.CL.R%ELCISC115R-1000-5-B-C-CL-RELCISC50-H-1024-ZCU48P 编码器ELCISC81-H-1024-ZCU444PTELCISC8C8-12-824-B-B-CV-R-01ELCISC9CS,板上型号:TE22051ELCISCAK915//11NPN//55GT//12B12BRELCISCAK915//11NPN115SGT//12B12BRELCISCMF15-11--BR-A91ELCISCS1592 轴径为8毫米 分两组端子ELCISCV10FG 5*(2*1)+SHELCISCV115R--B-C-CL-RELCISCZ2-5//BZKELCISCZ2-64B-1024-5-BZ-N-CD-SPELCISD610-200-1828-BZ-VM-R-0,5ELCISDGS66-CZZ0-S01ELCISE/X47RC8-500-824-B-CQ1-L-IELCISE411-P12-B12-013ELCISE59-C15--b2L-CV-702ELCISE6-120-1828-BZ-B-CD+VDFELCISE6-120-1828-M-B-CDELCISE6-120-1828-M-B-CD+VDFELCISE6-200-1828-BZ-U-CV-05ELCISE6-300-1828-M-B-CDELCISE6-300-2828-BZ-B-CDELCISE63-500-815-BZ-C-SL-RELCISE6-500-824-M-CV-01编码器ELCISE6-625-5-M-K-CD-RELCISE68/500/12/BZ/H/CV/AELCISE98-500-824-BZ-K-CV-R-01ELCISEF150-5-132-C1001CLRELCISEF150-5-BZ-C-100-1-CL-RELCISEF500+958SS13/12/06/G/S2/WELCISEGS10-12-30 连轴器ELCISEH80C L14X3MR.295+197ELCISEH80C*3MR.259+197ELCISEL115A720S5/28P11S3MR-003ELCISEL58H360E8/24L10*69RELCISELM1 ECS37控制板ELCISEMC-2.1-DIA12/2.1-DIA12ELCISencoder:I/W90--BZ-C-CELCISESG/11/11配合I/115-ELCISESG8/8ELCISESM/11/11  码盘联轴器ELCISESM-6.35-6.35ELCISET10-12 联轴器ELCISET12-12ELCISG3-1000-5-BZ-C-CL-R 1000脉冲ELCISGAK915//11NPN//5SGT//12B12BRELCISGI115--BZ-C-CL-RELCISH115TB10--BZ-C-CL-RELCISH115TB10--BZ-C-CL-RELCISH115TB--BZ-C-CL-RELCISHELI-CAL 与ELCIS-0209配套使用ELCISI/115--BZ-C-CL-RELCISI/115--BZ-L-CL-RELCISI/115--BIZ-C-CL-RELCISI/115--BZ-N-CW-1,50ELCISI/115--BZ-N-CW-R-03ELCISI/115--BZ-N-CW-R-03ELCISI/115--B3-NCW-R-03ELCISI/115--BZ-C-CL-RELCISI/115--BZ-N-CL-RELCISI/115--BZ-C-CL-RELCISI/115A--BZ-C-CL-RELCISI/115K-500/500-82/82-58/BELCISI/115R--BI-C-CL-RELCISI/115R--BZ-C-CL-RELCISI/115R--BZ-C-CL-RELCISI/115R--BZ-C-CL-RELCISI/115R--BI-C-CL-RELCISI/115R--BZ-C-CL-RELCISI/115T--BZ-M-CL-RELCISI/115T-10-1230-BZ-C-CL-RELCISI/115T--BZ-C-CL-RELCISI/115T-3600-5-BZ-N-SL-RBRB11/6ELCISI/115T-5-1230-BZ-C-CL-RELCISI/115T-5-1230-BZ-C-CL-R+BRB11/ELCISI/115TB--B-C-CM-RELCISI/115TB--B-C-CM-RELCISI/115TB--BZ-C-CL-RELCISI/115TB--BZ-C-CM-RELCISI/115TB--BZ-C-CL-RELCISI/1024& IP67ELCISI/159--BZ-N-CL-AELCISI/170//BZ/H/CV/RELCISI/172CD-2500-5-BZ-N-CL-RELCISI/38Z-8--BZ-H-CVC-R01ELCISI/45-6000-5-BZ-N-CV-R01ELCISI/45CB-1021-5-BZ-N-CDELCISI/45CC-1000-5-BZ-Y-VN-02ELCISI/45CC-200-824-BZ-B-CDELCISI/28-BZ-B-VM-R-0,5ELCISI/8-BZ-B-CV-R-05ELCISI/28-B-B-CV-R-05ELCISI/46P6-10-1828-MK-CV-RELCISI/50--D2-H-CVK-02ELCISI/56QE-500-1828-B-B-CE-RELCISI/56-QE-500-1828-B-B-CE-RELCISI/58H-2048-5-BZ-Y-CV-01ELCISI/58HP-10000-5-BZ-C-CV-01ELCISI/59C15-10000-5-BZ-N-CV-R-01ELCISI/63--BZ-B-CM-RELCISI/63-5000-5-BZ-N-CL-RELCISI/63S--BZ-C-CL-RELCISI/63S--B-N-CM-RELCISI/64B/2000/5/BZ/N/CD& 编码器ELCISI/64B-1024-5-BZ-N-CDELCISI/64B-2000-5-BZ-N-CDELCISI/64B-2000-5-BZ-N-CDELCISI/64C-200-815-M-C-CDELCISI/6B-1024-5-BZ-N-CDELCISI/-BZ-B-CW-R-01ELCISI/728-1250-5-BZ-N-CL-RELCISI/80--B-B-CM-RELCISI/80-360-1030-B-B-CP-RELCISI/90--bz-n-clELCISI/90--BZ-U-CM-RELCISI/90-5000-5-BZ-N-CL-RELCISI/90A-1024-BZ-C-CL-RELCISI/92--BZ-N-CV-R-03ELCISI/B59C15-10000-5-BZ-N-CV-R-01ELCISI/E6-300-1828-BZ-B-CD重0006ELCISI/LY90A--BZ-C-CL-RELCISI/V466-2500-5-BZ-N-CV-R-01ELCISI/W90--BZ-C-CL-RELCISI/X 115--BZ-N-CLELCISI/X115--BZ-N-CW-R-03ELCISI/X115--BZ-C-CL-RELCISI/X-115-600-5-B-L-CM-R 5010214ELCISI/X466-2000-5-BZ-N-CV-R-01ELCISI/X46P6-125-1828-BZ-B-CV-R-07ELCISI/X46P8-256-1828-B-B-CV-R-01ELCISI/X47RC8-500-824-B-B-CO1-RELCISI/X47RC8-500-824-B-B-CQ1-RELCISI/X-47RC8-500-824-B-B-CQI-RELCISI/X47RC8-500-824-B-CQ1-RELCISI/X47RC8-500-824-B-CQ1-RELCISI/X47RC8-500-824-M-CQ1-RELCISI/X47RC8-520-824-B-B-CQ1-RELCISI/X58H-60-5-B-C-CD-RELCISI/X58H-60-B-C-CD-RELCISI/X59ZC10-300/60-824-BZ-B-CV-RELCISI/X63-360-1828-M-P-CMELCISI/X65C15--B-L-VH6-R-0ELCISI/X68-600-1828-M-B-CV-R-01ELCISI/XA59C12-60-824-B-B-CV-R-05ELCISI/XB80--B-CMELCISI/XGV465-1000-5-BZ-N-CN-R-01ELCISI/XH-B-T-CV-R-01ELCISI/XJV46-5-1000-5-BE-N-CVRELCISI/XJV465-1000-5-BZ-N-CV-R-01ELCISI/XLA59ZMA15-360-824-BZ-L-CV-RELCISI/XM5--B-C-CL/RELCISI/XW90K--45/45-9N/N-ELCISI/XYM63-500-1828-BZ-B-CMELCISI/XZH638-5-824-BZ-B-CM-RELCISI/Y115--BZ-L-CW-R-02ELCISI/Y90A-360-1230-B-C-CW-03ELCISI/Z115--B-N-CM-RELCISI/Z59C15--BZ-C-VL-R-ELCISI/Z59C15--BZ-C-VL-R-0ELCISI/Z59C15--BZL-CV-R02ELCISI/ZG59C15--M-CV-R-03ELCISI/ZV38LP-2540-5-BZ-N-VG2-R-015ELCISI16H45-P5-22-1024-B-R-LH150ELCISI16H-45P--BR-LH150ELCISI190--BZ-U-CM-RELCISI59C15--BZ-C-VL-R-01ELCISITD21A4Y291024NID2SR12S12IP65ELCISIX115--BZ-N-CW-R-03ELCISJBJK10-1213-E-DP-2ELCISJOINT HELI-CAL WAC30-11-11ELCISL/F300SP-12-4096-Y-G-P-O-SL-O-ELCISL/F600P-12-12-06-B-DP-W3PGELCISL/RPF/2000/10ELCISL/RV-BZ-N-5ELCISL115--BZ NC W-R-03ELCISL115--BZ-C-CL-RELCISL115--BZ-C-CL-R+插头ELCISL115--BZ-C-CL-R编号错ELCISL115--BZ-C-CL-R带插头ELCISL115--BZ-C-CL-R的插头ELCISL115--BZ-C-CL-R的插头ELCISL115--BZ-N-CL-RELCISLA90A--BE-C-CV-R-03ELCISLA90A--BZ-C-CV-R-03ELCISLE592MAISBNCNR01ELCISLK12-40-1111KELCISLY90A--BZ-C-CL-RELCISLY90A--BZ-C-CL-R-01ELCISLZ59C15--BZ-C-CH-RELCISLZ59C15--BZ-C-VL-R-01ELCISLZ59C15--BZ-C-VL-R-01ELCISLZ59ZMABNCNR01ELCISLZ5PC15--BZ-C-VC-R-01ELCISLZ5PC15--BZ-C-VC-R-01ELCISM5--B-B-CMELCISM5--BZ-N-CL-RELCISMEFK300/1828/BZ/Q/100/1/SM/RELCISMM100-1-G-4096ELCISMM100-1-G--KP-CM6-RELCISMM1002-G--KP-P-CM6-RELCISMM100-2-G-2048ELCISMM100-2-G-4096ELCISMM1002-G-512-1828 KP-CM-RELCISMM1002-G-512-1828-KP-CM6-RELCISMM1002-G-512-1828-KP-CM6-RELCISMM100-2-G-64ELCISMM1102-G-512-1828-KP-CM6-RELCISMM1151-G--S-CL-RELCISMM115-1-G--S-CL-RELCISMM1152-G-4-1828-S-CV-02-RELCISMOD 115--BZ-B-CM-RELCISMOD.63--BZ-B-CNELCISMS/400/5/BZ/KCM V0002ELCISMS106A18-1S& 代码:VLFELCISMSSELCISOQ80EXS6--A-6-CV1-RELCISP64C-2000-5-BZ-N-CDELCISPAGUAG& PAGUFLEX&& PLUSELCISPRFL121 插头ELCISRC2&& 650 rpmELCISRDC-20-DIA10-20-DIA952ELCISRL-12*12DL52D42ELCISROTEX-GS14 80SHA-GS 2.1-15ELCISRV16-120-5-BZ-N-10&& 5VDCELCISRV16-120-5-BZ-N-20-SELCISRV16-220-5-B2-N-10ELCISS4-DT-00192,DC75MV,DC4-20MAELCISS585-2000-BZ-N-SL-RELCISS92--BZ-C-CV-03ELCISSIEM-NK-15-20ELCISSK300-1828-BZ-Q-100-1-SRELCISSW90K--45/45-9N-N-LLELCIST/64B/2000/5/BZ/N/CDELCISTLXZ1328ELCISTORINO HX A/400/824/BELCISV.115R.2000.5.B.C.CL.R%ELCISV115R-2000-5-B-C-CL-RELCISV38-1024-5-BZ-N-CV编码器ELCISV58H-2048-5-BZ-Y-CV-01ELCISVX90A-2304-5-BE-C-VD-R-0.50ELCISW 90
BZ C CK RELCISW/115//BZ/C/CL/RELCISW/115R//BZ/C/CL/RELCISW/90//BZ/C/CL/RELCISW-115--BZ-N-CL-RELCISW115R//BZ/N/CL/RELCISW90
BZ C CL RELCISW90--BZ-N-CL-RELCISW90--BZ-C-CL-RELCISW90K--45/45-9N-N-LL-ELCISWAC 25-10-10 带连轴器ELCISWAC 30-11-11ELCISX/45CC/1000/-5/BZ/Y/VN/02ELCISX305-BZ-N-CW-R-03ELCISX115-/18-2B-B-CK-RELCISX115-1000-5-BZ-L-CM-RELCISX115-250-5-B-L-CM-RELCISX115-250-5-BZ-L-CM-RELCISX115-600-5-B-L-CM-RELCISX115K-/18-2B-B-CK-RELCISX115T--BZ-C-MS-RELCISX2115TB--B-N-CV-R06ELCISX2115TB--B-N-CW-R06ELCISX25PC15--BZ-LVL-R01ELCISX365-G-360-1828-B-F-CD4RELCISX365-G-360-1828-BZCDRELCISX465-500-5-BC-N-CB-V-R-01ELCISX466-500-5-BZ-N-CV-R-01ELCISX46P6-125-1828ELCISX47RC8-250-1828-B-R-C01-RELCISX486-100-1828-BZ-B-CV-R-02ELCISX588-900-5-HZ-N-CW-R-01ELCISX59DU8-360ELCISX63-360-1828-M-P-CMELCISX68-600-1828-M-B-CV-R-01ELCISX28-B-B-CD-RELCISXA115R--B-C-CM-RELCISXA115R-型号不完整ELCISXA59C12-60-5-B-C-CV-R-05ELCISXA59C12-60-824-B-B-CV-R-05ELCISXA5PC12-60-824-B-B-CV-R-05ELCISXAKH58H6-94-1030-B-B-CV-R-04ELCISXH-B-T-CV-R-01ELCISXJV465-1000-5-BZ-N-CV-R-01ELCISXLA59ZMA15--BZ-L-CV-R-ELCISXLA59ZMA15-360-824-BZ-L-CV-R-ELCISXLA90A--BZ-C-CV-R-03ELCISXM50--BZ-C-CL-RELCISXM5--BZ-C-CLELCISXM63-4000-5-BZ-C-CL-RELCISX-MM100-1-B-512-1828-B-PELCISXMM100-1-G-2048ELCISXMM100-1-G--KPELCISXMM100-2-G-1024ELCISXMM1002-G--KP-CM6-RELCISXMM1002-G--KP-CM6-RELCISXMVP51-100-5-B-N-VM5-03S& 完整ELCISXP46P6-125-1828-BZ-B-CV-R-07ELCISXV28-B-B-CD-RELCISXV90A-2304-5-BE-C-VD-R-0.50ELCISXVT26--B-B-CD-RELCISXW90K--45/45-9N-N-2LELCISXW90K-/45-9N-NLLRELCISXY90A--B-C-CV-03ELCISXYM63--BZ-B-CM-RELCISXYM63-100-5-BZ-C-CL-RELCISXYM63-250-5-BZ-C-CLELCISXYM63-500-1828-BZ-B-CMELCISXYM63-500-1828-BZ-B-CM-RELCISXZ115PB--BZW-CWR-03ELCISXZ115TB--BZN-CWR-03ELCISXZ115TB--BZN-CWR-03ELCISXZ115TB-B-N-CV-R06ELCISXZ115TB-B-N-CV-R06ELCISXZ115TB-B-N-CV-R06ELCISXZ115TB--B-N-CV-R806ELCISXZ115TB--B-N-CW-R06ELCISXZ59C15--BI-L-VL-R-01ELCISXZ59C15--BZ-L-VL-R-01ELCISXZ59C15-1--BZ-L-VL-R-0ELCISXZG172CB-2500-5-BZ-N-CV-R-02ELCISY90A--BZ-C-CL-RELCISY90A--BZ-C-CW-R-01ELCISY90A-360-12-30-B-C-CELCISY90A-360-1230-B-C-CVELCISY90A-360-1230-B-C-CV-03ELCISYM90A-20-824-BZ-B-CMELCISZ/Y115--BZ-L-CW-R-02ELCISZ115-720-824-B-B-CM-RELCISZ164B-2000-5-BZ-N-CDELCISZ358H/D/8/824/-/-P/CL/RELCISZ58S-1024-5-BZ-N-CW-R IP66ELCISZ59C15--BZ-C-CL-RELCISZ59C15--BZ-C-VL-R-01ELCISZ59C15--BZ-C-VL-R-01ELCISZ59C15-ELCISZ59C15--BZ-L-CV-R-02ELCISZ-80EXS5--BZ-N-CV5-RELCISZOB80EXS5--BZ-N-CV1-ELCISZSP15--BZ-C-CL-RELCIS编码器 1/115--BZNCELCIS编码器 172CR -BZ-B-CMELCIS编码器 958C-20-3060-CW-S-G-21-ELCIS编码器 IS632ELCIS编码器115--BZ-C-CL-RELCIS编码器E6-300-1828-BZ-B-CDELCIS编码器I/115--BZ-C-CLELCIS编码器XA30-BZ-C-CV
感兴趣的产品:
您的姓名:
您的单位:
联系电话:
详细地址:
常用邮箱:
您的任何要求、意见或建议:
*&=&&&请输入计算结果(填写阿拉伯数字),如:三加四=7
中国仪表网 设计制作,未经允许翻录必究.Copyright(C) 2014 , All rights reserved.
以上信息由企业自行提供,信息内容的真实性、准确性和合法性由相关企业负责,中国仪表网对此不承担任何保证责任。Linux系统瓶颈分析(经典!) | Linux |
_数据库_运维_开发_IT学习_无忧IT学习网
一起学习!一起进步!
Linux系统瓶颈分析(经典!)
浏览: 40 views
1.0 性能监控介绍&
& & 性能优化就是找到系统处理中的瓶颈以及去除这些的过程,多数管理员相信看一些相关的&cook book&就可以实现性能优化,通常通过对内核的一些配置是可以简单的解决问题,但并不...
1.0 性能介绍&
& & 性能优化就是找到系统处理中的瓶颈以及去除这些的过程,多数管理员相信看一些相关的&cook book&就可以实现性能优化,通常通过对内核的一些配置是可以简单的解决问题,但并不适合每个环境,性能优化其实是对 OS各子系统达到一种平衡的定义,这些子系统包括了:&
这些子系统之间关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题.比如:
大量的页调入请求导致内存队列的拥塞网卡的大吞吐量可能导致更多的 CPU开销&
大量的 CPU开销又会尝试更多的内存使用请求&
大量来自内存的磁盘写请求可能导致更多的 CPU以及 IO问题&
所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的.&
1.1 确定应用类型&
基于需要理解该从什么地方来入手优化瓶颈,首先重要的一点,就是理解并分析当前系统的特点,多数系统所跑的应用类型,主要为 2种:&
IO Bound(IO范畴):在这个范畴中的应用,一般都是高负荷的内存使用以及系统,这实际上表示 IO范畴的应用,就是一个大量数据处理的过程.IO范畴的应用不对 CPU以及发起更多请求(除非类似 NAS这样的硬件).IO范畴的应用通常使用 CPU资源都是为了产生 IO请求以及进入到内核调度的sleep 状态.通常软件(例如 ,等)被认为是 IO范畴的应用类型.&
CPU Bound(CPU范畴):在这个范畴中的应用,一般都是高负荷的 CPU占用. CPU范畴的应用,就是一个批量处理 CPU请求以及数学计算的过程.通常 web server, server,以及其他类型服务被认为是 CPU范畴的应用类型.&
1.2 确定基准线统计&
系统利用率情况,一般随管理员经验以及系统本身用途来决定.唯一要清楚的就是,系统优化希望达成什么效果,以及哪些方面是需要优化,还有参考值是什么?因此就建立一个基准线,这个统计数据必须是系统可用性能状态值,用来比较不可用性能状态值.&
在以下例子中,1个系统性能的基准线快照,用来比较当高负荷时的系统性能快照.&
# vmstat 1&
procs memory swap io system cpu&
r b swpd free buff cache si so bi bo in cs us sy wa id&
1 0 32 244 0 0 1 18 109 19 2 1 1 96&
0 0 32 244 0 0 0 0 105 46 0 1 0 99&
0 0 32 244 0 0 0 0 198 62 40 14 0 45&
0 0 32 244 0 0 0 0 117 49 0 0 0 100&
0 0 24 244 0 0 0 176 220 938 3 4 13 80&
0 0 24 244 0 0 0 0 358
1 0 24 244 0 0 0 0 368
0 0 24 244 0 0 0 0 352
# vmstat 1&
procs memory swap io system cpu&
r b swpd free buff cache si so bi bo in cs us sy wa id&
2 0 52 592 0 1 1 18 109 19 2 1 1 96&
2 0 56 652 0 0 0 468 789 108 86 14 0 0&
3 0 84 640 0 360 0 360 498 71 91 9 0 0&
2 0 64 788 0 340 0 340 672 41 87 13 0 0&
2 0 88 452 0 740 0
2 0 48 580 0 720 0 720 690 41 96 4 0 0&
2 0 44 592 0 720 0 720 605 44 95 5 0 0&
2 0 00 260 0 372 0 372 639 45 81 19 0 0&
2 0 92 412 0 372 0 372 457 47 90 10 0 0&
从上面第一个结果可看到,最后一列(id) 表示的是空闲时间,我们可以看到,在基准线统计时,CPU的空闲时间在 79% 100%.在第二个结果可看到,系统处于 100%的占用率以及没有空闲时间.从这个比较中,我们就可以确定是否是 CPU使用率应该被优化.&
2.0 安装工具&
多数 *nix系统都有一堆标准的监控命令.这些命令从一开始就是*nix 的一部分.Linux则通过基本安装包以及额外包提供了其他监控工具,这些安装包多数都存在各个 Linux 发布版本中.尽管还有其他更多的开源以及第三方监控软件,但本文档只讨论基于 Linux 发布版本的监控工具.&
本章将讨论哪些工具怎样来监控系统性能.&
3.0 CPU介绍&
CPU利用率主要依赖于是什么资源在试图存取.内核调度器将负责调度 2种资源种类:线程(单一或者多路)和中断.调度器去定义不同资源的不同优先权.以下列表从优先级高到低排列:&
Interrupts(中断)&
设备通知内核,他们完成一次数据处理的过程.例子,当一块网卡设备递送数据包或者一块硬件提供了一次&
Kernel(System) Processes(内核处理过程)&
所有内核处理过程就是控制优先级别.&
User Processes(用户进程)&
这块涉及&userland&.所有软件程序都运行在这个 user space.这块在内核调度
机制中处于低优先级.&
从上面,我们可以看出内核是怎样管理不同资源的.还有几个关键内容需要介绍,以下部分就将介绍&context(上下文切换),run queues(运行队列)以及 utilization(利用率).&
3.1 上下文切换
多数现代处理器都能够运行一个进程(单一线程)或者线程.多路超线程处理器有能力运行多个线程.然而,Linux 内核还是把每个处理器核心的双核心芯片作为独立的处理器.比如,以 Linux内核的系统在一个双核心处理器上,是报告显示为两个独立的处理器.&
一个标准的 Linux 内核可以运行 50 至&50,000 的处理线程.在只有一个 CPU时,内核将调度并均衡每个进程线程.每个线程都分配一个在处理器中被开销的时间额度.一个线程要么就是获得时间额度或已抢先获得一些具有较高优先级(比如硬件中断),其中较高优先级的线程将从区域重新放置回处理器的队列中.这种线程的转换关系就是我们提到的上下文切换.&
每次内核的上下文切换,资源被用于关闭在 CPU寄存器中的线程和放置在队列中.系统中越多的上下文切换,在处理器的调度管理下,内核将得到更多的工作.&
3.2 运行队列&
每个 CPU都维护一个线程的运行队列.理论上,调度器应该不断的运行和执行线程.进程线程不是在 sleep状态中(阻塞中和等待&
IO中)或就是在可运行状态中.如果 CPU子系统处于高负荷下,那就意味着内核调度将无法及时响应系统请求.导致结果,可运行状态进程拥塞在运行队列里.当运行队列越来越巨大,进程线程将花费更多的时间获取被执行.&
比较流行的术语就是&load&,它提供当前运行队列的详细状态.系统 load 就是指在 CPU队列中有多少数目的线程,以及其中当前有多少进程线程数目被执行的组合.如果一个双核系统执行了 2个线程,还有 4个在运行队列中,则load应该为 6. top 这个程序里显示的 load averages是指&1,5,15 分钟以内的 load情况.&
3.3 CPU利用率&
CPU利用率就是定义 CPU使用的百分比.评估系统最重要的一个度量方式就是 CPU的利用率.多数性能监控工具关于 CPU利用率的分类有以下几种:&
User Time(用户进程时间)&
关于在 user space中被执行进程在 CPU开销时间百分比.&
System Time(内核线程以及中断时间)&
关于在 kernel space中线程和中断在 CPU开销时间百分比.&
Wait IO(IO请求等待时间)&
所有进程线程被阻塞等待完成一次&
IO请求所占 CPU开销 idle的时间百分比.&
Idle(空闲)&
一个完整空闲状态的进程在 CPU处理器中开销的时间百分比.&
4.0 CPU性能监控&
理解运行队列,利用率,上下文切换对怎样 CPU性能最优化之间的关系.早期提及到,性能是相对于基准线数据的.在一些系统中,通常预期所达到的性能包括:&
Run Queues 每个处理器应该运行队列不超过 13&个线程.例子,一个双核处理器应该运行队列不要超过6个线程.&
CPU Utiliation 如
果一个 CPU被充分使用,利用率分类之间均衡的比例应该是&
User Time&
System Time&
Idle Time&
Context Switches 上
下文切换的数目直接关系到 CPU的使用率,如果 CPU利用率保持在上述均衡状态时,大量的上下文切换是正常的.&
很多 Linux 上的工具可以得到这些状态值,首先就是 vmstat和&
top 这 2个工具.&
4.1 vmstat工具的使用&
vmstat工具提供了一种低开销的系统性能观察方式.因为 vmstat本身就是低开销工具,在非常高负荷的上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用 vmstat输出结果.这个工具运行在 2种模式下:average和&sample模式.sample模式通过指定间隔时间测量状态值.这个模式对于理解在持续负荷下的性能表现,很有帮助.下面就是&
vmstat运行 1秒间隔的示例:&
# vmstat 1&
procs memoryswapiosystemcpur&
b swpd free buff cache si so bi bo in cs us sy id wa&
0 0 5 26 7 14 4 1 95 0&
The vmstat CPU statistics&
Field Description&
r The amount of threads in the run queue. These are threads that are runnable, but the CPU is not&
available to execute them.&
当前运行队列中线程的数目.代表线程处于可运行状态,但 CPU还未能执行.&
b This is the number of processes blocked and waiting on IO requests to finish.&
当前进程阻塞并等待&
IO请求完成的数目&
in This is the number of interrupts being processed.&
当前中断被处理的数目&
cs This is the number of context switches currently happening on the system.
当前 kernel system中,发生上下文切换的数目&
us This is the percentage of user CPU utilization.&
CPU利用率的百分比&
sys This is the percentage of kernel and interrupts utilization.
内核和中断利用率的百分比&
wa This is the percentage of idle processor time due to the fact that ALL runnable threads are&blocked waiting on IO.&
所有可运行状态线程被阻塞在等待&
IO请求的百分比&
id This is the percentage of time that the CPU is completely idle.&
CPU空闲时间的百分比&
4.2 案例学习:持续的 CPU利用率&
在这个例子中,这个系统被充分利用&
# vmstat 1&
procs memory swap io system cpu&
r b swpd free buff cache si so bi bo in cs us sy wa id&
0 0 0 0 718 26 81 19 0 0&
0 0 0 0 758 23 96 4 0 0&
0 0 0 0 820 20 96 4 0 0&
0 412 0 412 763 70 84 16 0 0&
0 0 0 0 874 25 89 11 0 0&
0 0 0 0 940 24 86 14 0 0&
0 0 0 0 929 27 95 3 0 2&
0 0 0 0 874 36 93 6 0 1&
0 0 0 0 850 26 77 23 0 0&
0 0 0 0 736 23 83 17 0 0&
0 0 0 0 861 21 91 8 0 1&
根据观察值,我们可以得到以下结论:&
1,有大量的中断(in)和较少的上下文切换(cs).这意味着一个单一的进程在产生对硬件设备的请求.&
2,进一步显示某单个应用,user time(us)经常在 85%或者更多.考虑到较少的上下文切换,这个应用应该还在处理器中被处理.&
3,运行队列还在可接受的性能范围内,其中有 2个地方,是超出了允许限制.&
4.3 案例学习:超负荷调度&
在这个例子中,内核调度中的上下文切换处于饱和&
# vmstat 1&
procs memory swap io system cpu&
r b swpd free buff cache si so bi bo in cs us sy wa id&
0 0 880 520 443 907 22 10 67 0&
0 0 892 0 438
根据观察值,我们可以得到以下结论:&
1,上下文切换数目高于中断数目,说明&
kernel中相当数量的时间都开销在上下文切换线程.&
2,大量的上下文切换将导致 CPU利用率分类不均衡.很明显实际上等待&io请求的百分比(wa)非常高,以及&
user time百分比非常低(us).&
3,因为 CPU都阻塞在 IO请求上,所以运行队列里也有相当数目的可运行状态线程在等待执行.&
4.4 mpstat工具的使用&如果你的系统运行在多处理器芯片上,你可以使用 mpstat命令来监控每个独立的芯片.Linux 内核视双核
处理器为 2 CPU&#39;s,因此一个双核处理器的双内核就报告有 4 CPU&#39;s可用.&mpstat命令给出的 CPU利用率统计值大致和&vmstat一致,但是 mpstat可以给出基于单个处理器的统计值.&
# mpstat &P ALL 1&
Linux 2.4.2120.
ELsmp (localhost.localdomain) 05/23/2006&
05:17:31 PM CPU %user %nice %system %idle intr/s&
05:17:32 PM all 0.00 0.00 3.19 96.53 13.27&
05:17:32 PM 0 0.00 0.00 0.00 100.00 0.00&
05:17:32 PM 1 1.12 0.00 12.73 86.15 13.27&
05:17:32 PM 2 0.00 0.00 0.00 100.00 0.00&
05:17:32 PM 3 0.00 0.00 0.00 100.00 0.00&
4.5 案例学习:未充分使用的处理量&
在这个例子中,为 4 CPU核心可用.其中 2个 CPU主要处理进程运行(CPU 0 和&
1).第 3个核心处理所有
内核和其他系统功能(CPU 3).第 4个核心处于 idle(CPU 2).&
使用 top 命令可以看到有 3个进程差不多完全占用了整个 CPU核心.&
08:53 up 8:34, 3 users, load average: 0.91, 0.37, 0.13&
Tasks: 190 total, 4 running, 186 sleeping, 0 stopped, 0 zombie&
Cpu(s): 75.2% us, 0.2% sy, 0.0% ni, 24.5% id, 0.0% wa, 0.0% hi, 0.0%&
Mem: 2074736k total, 448684k used, 1626052k free, 73756k buffers&
Swap: 4192956k total, 0k used, 4192956k free, 259044k cached&
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND&
15957 nobody 25 0
R 100 20.5 0:25.48 &
R 100 38.2 0:17.78 d&
R 100 15.7 0:11.20 httpd&
15901 root 16 0 0 R 1 0.1 0:01.59 top&
1 root 16 0
S 0 0.0 0:00.64 init&
# mpstat &P ALL 1&
Linux 2.4.2120.
ELsmp (localhost.localdomain) 05/23/2006&
05:17:31 PM CPU %user %nice %system %idle intr/s&
05:17:32 PM all 81.52 0.00 18.48 21.17 130.58&
05:17:32 PM 0 83.67 0.00 17.35 0.00 115.31&
05:17:32 PM 1 80.61 0.00 19.39 0.00 13.27&
05:17:32 PM 2 0.00 0.00 16.33 84.66 2.01&
05:17:32 PM 3 79.59 0.00 21.43 0.00 0.00&
05:17:32 PM CPU %user %nice %system %idle intr/s&
05:17:33 PM all 85.86 0.00 14.14 25.00 116.49&
05:17:33 PM 0 88.66 0.00 12.37 0.00 116.49&
05:17:33 PM 1 80.41 0.00 19.59 0.00 0.00&
05:17:33 PM 2 0.00 0.00 0.00 100.00 0.00&
05:17:33 PM 3 83.51 0.00 16.49 0.00 0.00&
05:17:33 PM CPU %user %nice %system %idle intr/s&
05:17:34 PM all 82.74 0.00 17.26 25.00 115.31&
05:17:34 PM 0 85.71 0.00 13.27 0.00 115.31&
05:17:34 PM 1 78.57 0.00 21.43 0.00 0.00&
05:17:34 PM 2 0.00 0.00 0.00 100.00 0.00&
05:17:34 PM 3 92.86 0.00 9.18 0.00 0.00&
05:17:34 PM CPU %user %nice %system %idle intr/s&
05:17:35 PM all 87.50 0.00 12.50 25.00 115.31&
05:17:35 PM 0 91.84 0.00 8.16 0.00 114.29&
05:17:35 PM 1 90.82 0.00 10.20 0.00 1.02&
05:17:35 PM 2 0.00 0.00 0.00 100.00 0.00&
05:17:35 PM 3 81.63 0.00 15.31 0.00 0.00&
你也可以使用 ps命令通过查看 PSR 这列,检查哪个进程在占用了哪个 CPU.&
# while :; do ps eo&
pid,ni,pri,pcpu,psr,comm | grep &#39;d&#39;; sleep 1;&
PID NI PRI %CPU PSR COMMAND&
PID NI PRI %CPU PSR COMMAND&
PID NI PRI %CPU PSR COMMAND&
PID NI PRI %CPU PSR COMMAND&
PID NI PRI %CPU PSR COMMAND&
PID NI PRI %CPU PSR COMMAND&
监控 CPU性能由以下几个部分组成:&
1,检查 system的运行队列,以及确定不要超出每个处理器&
3个可运行状态线程的限制.&
2,确定 CPU利用率中 user/system比例维持在 70/30&
3,当 CPU开销更多的时间在 system mode,那就说明已经超负荷并且应该尝试重新调度优先级&
4,当 I/O处理得到增长,CPU范畴的应用处理将受到影响&
5.0 Virtual Memory介绍&
虚拟内存就是采用硬盘对物理内存进行扩展,所以对可用内存的增加是要相对在一个有效范围内的.内核会
写当前未使用内存块的内容到硬盘上,此时这部分内存被用于其它用途.当再一次需要原始内容时,此时再读
回到内存中.这对于用户来说,是完全透明的;在 Linux下运行的程序能够看到,也仅仅是大量的可用内存,同
时也不会留意到,偶尔还有部分是驻留在磁盘上的.当然,在硬盘上进行读和写,都是很慢的(大约会慢上千
倍),相对于使用真实内存的话,因此程序无法运行的更快.用硬盘的一部分作为 Virtual Memory,这就被称
为&swap space&(交换空间).&
5.1 Virtual Memory Pages
虚拟内存被分为很多 pages(页),在 X86架构中,每个虚拟内存页为 4KB.当内核写内存到磁盘或者读磁盘
到内存,这就是一次写内存到页的过程.内核通常是在 swap 分区和文件系统之间进行这样的操作.&
5.2 Kernel Memory Paging&
内存分页在正常情况下总是活跃的,与&
memory swapping(内存交换)之间不要搞错了.内存分页是指内核
会定期将内存中的数据同步到硬盘,这个过程就是 Memory Paging.日复一日,应用最终将会消耗掉所有的
内存空间.考虑到这点,内核就必须经常扫描内存空间并且收回其中未被使用的内存页,然后再重新分配内存
空间给其他应用使用.&
5.3 The Page Frame Reclaim Algorithm(PFRA)(页框回收算法)&
PFRA就是 OS内核用来回收并释放内存空间的算法.PFRA选择哪个内存页被释放是基于内存页类型的.&
页类型有以下几种:&
Unreclaimable &锁定的,内核保留的页面&
Swappable &匿名的内存页&
Syncable &通过硬盘文件备份的内存页&
Discardable &静态页和被丢弃的页&
除了第一种(Unreclaimable)之外其余的都可以被 PFRA进行回收.&
PFRA相关的,还包括 kswapd 内核线程以及 Low On Memory Reclaiming(LMR算法) 这 2种进程
5.4 kswapd&
kswapd 进程负责确保内存空间总是在被释放中.它监控内核中的 pages_high和&
pages_low阀值.如果空
闲内存的数值低于 pages_low,则每次&
kswapd 进程启动扫描并尝试释放&
32个 free pages.并一直重复这
个过程,直到空闲内存的数值高于 pages_high.&
kswapd 进程完成以下几个操作:&
1,如果该页处于未修改状态,则将该页放置回空闲列表中.&
2,如果该页处于已修改状态并可备份回文件系统,则将页内容写入到磁盘.&
3,如果该页处于已修改状态但没有任何磁盘备份,则将页内容写入到 swap device.&
| grep kswapd&
root 30 1 0 23:01 ? 00:00:00 [kswapd0]&
5.5 Kernel Paging with pdflush&
pdflush 进程负责将内存中的内容和文件系统进行同步操作.也就是说,当一个文件在内存中进行修改后,&
pdflush 将负责写回到磁盘上.&
| grep pdflush&
root 28 3 0 23:01 ? 00:00:00 [pdflush]&
root 29 3 0 23:01 ? 00:00:00 [pdflush]&
当内存中存在 10% 的脏页,pdflush将被启动同步脏页回文件系统里.这个参数值可以通过&
vm.dirty_background_ratio来进行调整.&
(Q:什么是脏页?&
A:由于内存中页缓存的缓存作用,写操作实际上都是延迟的.当页缓存中的数据比磁盘的数据还要更新
时,那么该数据就被称做脏页.)&
# sysctl n&
vm.dirty_background_ratio&
在多数环境下,Pdflush与&
PFRA是独立运行的,当内核调用 LMR时,LMR 就触发 pdflush将脏页写入到
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
在 2.4 内核下,一个高负荷的内存环境中,系统将遇到交换过程中不断的崩溃.这是因为 PFRA从一个运行
进程中,偷取其中一个内存页并尝试使用.导致结果就是,这个进程如果要回收那个页时,要是没有就会尝试
再去偷取这个页,这样一来,就越来越糟糕了.在 2.6 内核下,使用&Swap token&修复了这个 BUG,用来防止&
PFRA不断从一个进程获取同一个页.&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&
5.6 案例学习:大量的入口&
vmstat工具报告里除了 CPU使用情况,还包括了虚拟内存.以下就是 vmstat输出中关于虚拟内存的部分:&
Table 2: The vmstat Memory Statistics&
Field Description&
Swapd The amount of virtual memory in KB currently in use. As free memory reaches low&
thresholds, more data is paged to the swap device.
当前虚拟内存使用的总额(单位:KB).空闲内存达到最低的阀值时,更多的数据被转换成页到交换设备中.&
Free The amount of physical RAM in kilobytes currently available to running applications.&
当前内存中可用空间字节数.&
Buff The amount of physical memory in kilobytes in the buffer cache as a result of read() and&
write() operations.
当前内存中用于 read()和&
write()操作的缓冲区中缓存字节数&
Cache The amount of physical memory in kilobytes mapped into process address space.
当前内存中映射到进程地址空间字节数&
So The amount of data in kilobytes written to the swap disk.&
写入交换空间的字节数总额&
Si The amount of data in kilobytes written from the swap disk back into RAM.&
从交换空间写回内存的字节数总额&
Bo The amount of disk blocks paged out from the RAM to the filesystem or swap device.&
磁盘块页面从内存到文件或交换设备的总额&
Bi The amount of disk blocks paged into RAM from the filesystem or swap device.
磁盘块页面从文件或交换设备到内存的总额
以下 vmstat的输出结果,就是演示一个在 I/O应用中,虚拟内存在高负荷情况下的环境&
# vmstat 3&
procs memory swap io system cpu&
r b swpd free buff cache si so bi bo in cs us sy id wa&
863 17 3 6 75&
1 3 56 4 260 28 42
1 2 08 0 100
2 1 88 0 1
0 8 88 2 31
4 2 96 2 213
33 7 3 57&
1 2 00 0 204
982 40 12 2 46&
5 2 80 4 24
0 48 12 13 26&
1 1 20 8 15 804 919 978 49 9 17 25&
4 1 44 4 37
1 47 14 20 20&
1 1 76 2 1
1 52 11 23 14&
5 0 12 0 12
4 50 10 21 19&
0 5 36 0 8
8 49 13 24 15
根据观察值,我们可以得到以下结论:&
1,大量的磁盘块页面来自文件系统(bi),很明显在进程地址空间里,数据缓存在不断的增长.&
2,在这个时间点上,空闲内存(free)始终保持在 17MB,即使数据是从磁盘到分页而在消耗空闲 RAM.&
3,为了维护空闲列表, kswapd 从读/写缓存区(buff)中获取内存并分配到空闲列表里.很明显可以看到&
buffer cache(buff) 在逐渐的减少中.&
4, kswapd 进程当写脏页到交换设备(so)时,很明显虚拟内存的利用率是逐渐的增加中(swpd).&
监控虚拟内存性能由以下几个部分组成:&
1,当系统中出现较重大的页错误,要获得最好的响应时间,就要使得&
memory caches(内存高速缓存)超过&
disk caches(磁盘高速缓存).&
2,较少的空闲内存,是件好事情,那意味着缓存的使用更有效率.除非在不断的写入 swap device(交换设备)
disk(硬盘).&
3,如果系统不断报告,swap device总是繁忙中,那就意味着内存已经不足,需要升级了.&
6.0 I/O监控介绍&
磁盘 I/O子系统是 Linux 系统中最慢的部分.这个主要是归于 CPU到物理操作磁盘之间距离(盘片旋转以
及寻道).如果拿读取磁盘和内存的时间作比较就是分钟级到秒级,这就像&
7分钟的区别.因此本质
上,Linux 内核就是要最低程度的降低&
I/O数.本章将诉述内核在磁盘和内存之间处理数据的这个过程中,哪
些地方会产生 I/O.&
6.1 读和写数据&
Linux 内核将硬盘 I/O进行分页,多数 的默认页大小为 4K.读和写磁盘块进出到内存都为 4K
页大小.你可以使用 time这个命令加v&
参数,来检查你系统中设置的页大小:&
# /usr/bin/time v&
13日星期四&
23:07:59 CST&
Command being timed: &date&&
User time (seconds): 0.00&
System time (seconds): 0.00&
Percent of CPU this job got: 200%&
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00&
Average shared text size (kbytes): 0&
Average unshared data size (kbytes): 0&
Average stack size (kbytes): 0&
Average total size (kbytes): 0&
Maximum resident set size (kbytes): 0&
Average resident set size (kbytes): 0&
Major (requiring I/O) page faults: 0&
Minor (reclaiming a frame) page faults: 264&
Voluntary context switches: 1&
Involuntary context switches: 1&
File system inputs: 0&
File system outputs: 0&
Socket messages sent: 0&
Socket messages received: 0&
Signals delivered: 0&
Page size (bytes): 4096&
Exit status: 0&
Page size (bytes): 4096&
6.2 Major and Minor Page Faults(主要页错误和次要页错误)&
Linux,类似多数的 UNIX系统,使用一个虚拟内存层来映射硬件地址空间.当一个进程被启动,内核先扫描&
CPU caches和物理内存.如果进程需要的数据在这 2个地方都没找到,就需要从磁盘上读取,此时内核过程
就是 major page fault(MPF).MPF要求磁盘子系统检索页并缓存进 RAM.&
一旦内存页被映射进内存的 buffer cache(buff)中,内核将尝试从内存中读取或写入,此时内核过程就是&
minor page fault(MnPF).与在磁盘上操作相比,MnPF通过反复使用内存中的内存页就大大的缩短了内核
以下的例子,使用 time命令验证了,当进程启动后,MPF和&
MnPF的变化情况.第一次运行进程,MPF会更
# /usr/bin/time v&
evolution&
Major (requiring I/O) page faults: 163&
Minor (reclaiming a frame) page faults: 5918&
第二次再运行时,内核已经不需要进行 MPF了,因为进程所需的数据已经在内存中:&
# /usr/bin/time v&
evolution&
Major (requiring I/O) page faults: 0&
Minor (reclaiming a frame) page faults: 5581&
6.3 The File Buffer Cache(文件缓存区)&
文件缓存区就是指,内核将&
MPF过程最小化,MnPF过程最大化.随着系统不断的产生 I/O,buffer cache也
将不断的增加.直到内存不够,以及系统需要释放老的内存页去给其他用户进程使用时,系统就会丢弃这些内
存页.结果是,很多 SA(系统管理员)对系统中过少的 free memory(空闲内存)表示担心,实际上这是系统更
高效的在使用 caches.&
以下例子,是查看/proc/meminfo 文件:&
# cat /proc/meminfo&
MemTotal: 2075672 kB&
MemFree: 52528 kB&
Buffers: 24596 kB&
Cached: 1766844 kB&
可以看出,这个系统总计有 2GB (Memtotal)的可用内存.当前的空闲内存为 52MB (MemFree),有 24 MB
内存被分配磁盘写操作(Buffers),还有 1.7 GB页用于读磁盘(Cached).&
内核这样是通过 MnPF机制,而不代表所有的页都是来自磁盘.通过以上部分,我们不可能确认系统是否处
于瓶颈中.&
6.4 Type of Memory Pages
在 Linux 内核中,memory pages有 3种,分别是:&
1,Read Pages 这
些页通过 MPF从磁盘中读入,而且是只读.这些页存在于 Buffer Cache中以及包括不能
够修改的静态文件,二进制文件,还有库文件.当内核需要它们时,将读取到内存中.如果内存不足,内核将释放
它们回空闲列表中.程序再次请求时,则通过 MPF再次读回内存.&
2,Dirty Pages 这
些页是内核在内存中已经被修改过的数据页.当这些页需要同步回磁盘上,由&
pdflush 负
责写回磁盘.如果内存不足,kswapd (与&
pdflush 一起)将这些页写回到磁盘上并释放更多的内存.&
3,Anonymous Pages 这
些页属于某个进程,但是没有任何磁盘文件和它们有关.他们不能和同步回磁盘.
如果内存不足,kswapd 将他们写入 swap 分区上并释放更多的内存(&swapping& pages).&
6.5 Writing Data Pages Back to Disk&
应用程序有很多选择可以写脏页回磁盘上,可通过 I/O调度器使用 fsync() 或&
sync() 这样的系统函数来实
现立即写回.如果应用程序没有调用以上函数,pdflush 进程会定期与磁盘进行同步.&
| grep pdflush&
root 186 6 0 18:04 ? 00:00:00 [pdflush]&
7.0 监控 I/O
当觉得系统中出现了 I/O瓶颈时,可以使用标准的监控软件来查找原因.这些工具包括了&
top,vmstat,iostat,sar.它们的输出结果一小部分是很相似,不过每个也都提供了各自对于性能不同方面的解
释.以下章节就将讨论哪些情况会导致 I/O瓶颈的出现.&
7.1 Calculating IO&#39;s Per Second(IOPS的计算)&
每个 I/O请求到磁盘都需要若干时间.主要是因为磁盘的盘边必须旋转,机头必须寻道.磁盘的旋转常常被称
为&rotational delay&(RD),机头的移动称为&disk seek&(DS).一个 I/O请求所需的时间计算就是 DS加上&
RD.磁盘的 RD基于设备自身 RPM单位值(RPM是 Revolutions Perminute的缩写,是转/每分钟,代表了
硬盘的转速).一个 RD就是一个盘片旋转的半圆.如何计算一个 10K RPM设备的 RD值呢:&
1, 10000 RPM / 60 seconds (10000/60 = 166 RPS)&
2, 转换为 166分之 1 的值(1/166 = 0.006 seconds/Rotation)&
3, 单位转换为毫秒(6 MS/Rotation)&
4, 旋转半圆的时间(6/2 = 3MS) 也就是 RD&
5, 加上平均&
3 MS的寻道时间 (3MS + 3MS = 6MS)&
6, 加上 2MS的延迟(6MS + 2MS = 8MS)&
7, 1000 MS / 8 MS (1000/8 = 125 IOPS)&
每次应用程序产生一个 I/O,在 10K RPM磁盘上都要花费平均&
8MS.在这个固定时间里,磁盘将尽可能且
有效率在进行读写磁盘.IOPS可以计算出大致的 I/O请求数,10K RPM磁盘有能力提供&
IOPS.评估&
IOPS的效能,可用每秒读写 I/O字节数除以每秒读写 IOPS数得出.&
7.2 Random vs Sequential I/O(随机/顺序&
per I/O产生的 KB 字节数是与系统本身 workload相关的,有 2种不同&
workload的类型,它们是&
sequential和&
7.2.1 Sequential I/O(顺序&
iostat命令提供信息包括 IOPS和每个 I/O数据处理的总额.可使用 iostat x&
查看.顺序的 workload是同
时读顺序请求大量的数据.这包括的应用,比如有商业(database)在执行大量的查询和流媒体服务.在
这个 workload 中,KB per I/O的比率应该是很高的.Sequential workload是可以同时很快的移动大量数
据.如果每个 I/O都节省了时间,那就意味了能带来更多的数据处理.&
# iostat x&
%user %nice %sys %idle&
0.00 0.00 57.1 4 42.86&
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz&
await svctm %util&
/dev/sda 0.00 .00 105.71 0.00 1 .00 3.46 2.43 26.49&
/dev/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00&
/dev/sda2 0.00 .00 5.71 0.00
0.00 12.00 559.14 780.00 490.00&
/dev/sda3 0.00 34.29 0.00 100.00 0.00 297.14 0.00 148.57 2.97 540.29 594.57 24.00 240.00&
%user %nice %sys %idle&
0.00 0.00 23.53 76.47&
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz&
await svctm %util&
/dev/sda 0.00 .00 102.94 0.00
0.00 2.40 .29 28.57&
/dev/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00&
/dev/sda2 0.00 .00 102.94 0.00
0.00 4.00 .29 28.57&
/dev/sda3 0.00 476.47 0.00 0.00 0.00 952.94 0.00 .00 165.59 0.00 0.00 276.47&
IOPS的效能,可用每秒读写 I/O字节数除以每秒读写 IOPS数得出,比如&
rkB/s除以 r/s&
wkB/s除以 w/s&
= 505KB per I/O&
= 697KB per I/O
在上面例子可看出,每次循环下,/dev/sda的 per I/O都在增加.&
7.2.2 Random I/O(随机&
Random的 worklaod环境下,不依赖于数据大小的多少,更多依赖的是磁盘的 IOPS数.Web和&
就是典型的 Random workload.I/O请求内容都很小.Random workload是同时每秒会有更多的请求数产
生.所以,磁盘的 IOPS数是关键.&
# iostat x&
%user %nice %sys %idle&
2.04 0.00 97.96 0.00&
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz&
await svctm %util&
/dev/sda 0.00 633.67 3.06 102.31 24.49 .24 .89 73.67 113.89 27.22 50.00&
/dev/sda1 0.00 5.10 0.00 2.04 0.00 57.14 0.00 28.57 28.00 1.12 55.00 55.00 11.22&
/dev/sda2 0.00 628.57 3.06 100.27 24.49 .24 .50 72.55 121.25 30.63 50.00&
/dev/sda3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00&
%user %nice %sys %idle&
2.15 0.00 97.85 0.00&
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz&
await svctm %util&
/dev/sda 0.00 41.94 6.45 130.98 51.61 352.69 25.81 .79 2.90 286.32 7.37 15.05&
/dev/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00&
/dev/sda2 0.00 41.94 4.30 130.98 34.41 352.69 17.20 .18 2.90 320.00 8.24 15.05&
/dev/sda3 0.00 0.00 2.15 0.00 17.20 0.00 8.60 0.00 8.00 0.00 0.00 0.00 0.00&
计算方式和之前的公式一致:&
= 23KB per I/O&
= 24KB per I/O&
(对于顺序&
I/O来说,主要是考虑读取大量数据的能力即&
KB per request.对于随机&
I/O系统,更需要考虑的
是 IOPS值)&
7.3 When Virtual Memory Kills I/O
如果系统没有足够的 RAM响应所有的请求,就会使用到 SWAP device.就像使用文件系统 I/O,使用&
SWAP device代价也很大.如果系统已经没有物理内存可用,那就都在 SWAP disk上创建很多很多的内存
分页,如果同一文件系统的数据都在尝试访问 SWAP device,那系统将遇到 I/O瓶颈.最终导致系统性能的
全面崩溃.如果内存页不能够及时读或写磁盘,它们就一直保留在 RAM中.如果保留时间太久,内核又必须
释放内存空间.问题来了,I/O操作都被阻塞住了,什么都没做就被结束了,不可避免地就出现 kernel panic
system crash.&
下面的 vmstat示范了一个内存不足情况下的系统:&
procs memoryswapiosystemcpur&
b swpd free buff cache si so bi bo in cs us sy id wa&
这个结果可看出,大量的读请求回内存(bi),导致了空闲内存在不断的减少(free).这就使得系统写入 swap&
device的块数目(so)和&
swap 空间(swpd)在不断增加.同时看到 CPU WIO time(wa)百分比很大.这表明&
O请求已经导致 CPU开始效率低下.&
要看 swaping对磁盘的影响,可使用 iostat检查 swap 分区&
# iostat x&
%user %nice %sys %idle&
0.00 0.00 100.00 0.00&
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz&
await svctm %util&
/dev/sda 0.00 6.67 33.33 66.67 .68 6526.67&
100.56 5.08 3333.33&
/dev/sda1 0.00 933.33 0.00 0.00 0.00 .00 .00 20.00 .37 200.00&
/dev/sda2 0.00 0.00 .00 .33 .67 8.11 373.33 8.07 6.90 87.00&
/dev/sda3 0.00 833.33 33.33 .67 .33 .38 .46 11.35&
在这个例子中,swap device(/dev/sda1) 和&
file system device(/dev/sda3)在互相作用于 I/O. 其中任一个
会有很高写请求(w/s),也会有很高 wait time(await),或者较低的服务时间比率(svctm).这表明&
间互有联系,互有影响.&
I/O性能监控包含了以下几点:&
1,当 CPU有等待&
I/O情况时,那说明磁盘处于超负荷状态.&
2,计算你的磁盘能够承受多大的 IOPS数.&
3,确定你的应用是属于随机或者顺序读取磁盘.&
4,监控磁盘慢需要比较 wait time(await) 和&
service time(svctm).&
5,监控 swap 和系统分区,要确保&
virtual memory不是文件系统 I/O的瓶颈.&
8.0 Network 监控介绍&
在所有的子系统监控中,是最困难的.这主要是由于概念很抽象.当监控系统上的性能,这有太
多因素.这些因素包括了延迟,冲突,拥挤和数据包丢失.&
这个章节讨论怎么样检查 Ethernet(网卡),IP,TCP的性能.&
8.1 Ethernet Configuration Settings(网卡配置的设置)&
除非很明确的指定,几乎所有的网卡都是自适应速度.当一个中有很多不同的设备时,会各自采
用不同的速率和工作模式.&
多数商业都运行在 100 或&
1000BaseTX.使用 ethtool可以确定这个系统是处于那种速率.&
以下的例子中,是一个有 100BaseTX网卡的系统,自动协商适应至&
10BaseTX的情况.&
# ethtool eth0&
Settings for eth0:&
Supported ports: [ TP MII ]&
Supported link modes: 10baseT/Half 10baseT/Full&
100baseT/Half 100baseT/Full&
Supports autonegotiation:&
Advertised link modes: 10baseT/Half 10baseT/Full&
100baseT/Half 100baseT/Full&
Advertised autonegotiation:&
Speed: 10Mb/s&
Duplex: Half&
Port: MII&
PHYAD: 32&
Transceiver: internal&
Autonegotiation:&
Supports Wakeon:&
Current message level: 0&#215;)&
Link detected: yes
以下示范例子中,如何强制网卡速率调整至&
100BaseTX:&
# ethtool s&
eth0 speed 100 duplex full autoneg off&
# ethtool eth0&
Settings for eth0:&
Supported ports: [ TP MII ]&
Supported link modes: 10baseT/Half 10baseT/Full&
100baseT/Half 100baseT/Full&
Supports autonegotiation:&
Advertised link modes: 10baseT/Half 10baseT/Full&
100baseT/Half 100baseT/Full&
Advertised autonegotiation:&
Speed: 100Mb/s&
Duplex: Full&
Port: MII&
PHYAD: 32&
Transceiver: internal&
Autonegotiation:&
Supports Wakeon:&
Current message level: 0&#215;)&
Link detected: yes&
8.2 Monitoring Network Throughput(吞吐量监控)&
接口之间的同步并不意味着仅仅有带宽问题.重要的是,如何管理并优化,这 2台主机之间的交换机,网线,或
者路由器.测试吞吐量最好的方式就是,在这 2个系统之间互相发送数据传输并统计下来,比如延迟和速
8.2.0 使用 iptraf 查看本地吞吐量&
iptraf 工具(http://iptraf.seul.org),提供了每个网卡吞吐量的仪表盘.&
#iptraf d&
从输出中可看到,该系统发送传输率(Outgoing rates)为 61 mbps,这对于 100 mbps来说,有点慢.&
8.2.1 使用 netperf查看终端吞吐量&
不同于 iptraf 被动的在本地监控流量,netperf 工具可以让管理员,执行更加可控的吞吐量监控.对于确定从
客户端工作站到一个高负荷的端(比如 file或&
web server),它们之间有多少吞吐量是非常有帮助
的.netperf工具运行的是 client/server 模式.&
完成一个基本可控吞吐量测试,首先 netperf server 必须运行在端系统上:&
server# netserver&
Starting netserver at port 12865&
Starting netserver at hostname 0.0.0.0 port 12865 and family AF_UNSPEC&
netperf工具可能需要进行多重采样.多数基本测试就是一次标准的吞吐量测试.以下例子就是,一个&
LAN(局域网) 环境下,从 client上执行一次&
30秒的 TCP吞吐量采样:
从输出可看出,该的吞吐量大致在 89 mbps左右.server(192.168.1.215) 与&
client在同一 LAN中.这
对于 100 mbps来说,性能非常好.&
client# netperf H&
192.168.1.215 l&
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to&
192.168.1.230 (192.168.1.230) port 0 AF_INET&
Recv Send Send&
Socket Socket Message Elapsed&
Size Size Size Time Throughput&
bytes bytes bytes secs. 10^6bits/sec&
从 LAN切换到具备&
54G(WirelessG
是未来 54Mbps无线网联网标准)无线路由器中,并在 10英尺
范围内测试时.该吞吐量就急剧的下降.在最大就为 54 MBits的可能下,笔记本电脑可实现总吞吐量就为 14&
client# netperf H&
192.168.1.215 l&
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to&
192.168.1.215 (192.168.1.215) port 0 AF_INET&
Recv Send Send&
Socket Socket Message Elapsed&
Size Size Size Time Throughput&
bytes bytes bytes secs. 10^6bits/sec&
如果在 50英尺范围内呢,则进一步会下降至&
# netperf H&
192.168.1.215 l&
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to&
192.168.1.215 (192.168.1.215) port 0 AF_INET&
Recv Send Send&
Socket Socket Message Elapsed&
Size Size Size Time Throughput&
bytes bytes bytes secs. 10^6bits/sec&
如果从 LAN切换到互联网上,则吞吐量跌至&
1 Mbits下了.&
# netperf H&
lite.org p&
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to&
lite.org (72.249.104.148) port 0 AF_INET&
Recv Send Send&
Socket Socket Message Elapsed&
Size Size Size Time Throughput&
bytes bytes bytes secs. 10^6bits/sec&
最后是一个 VPN连接环境,这是所有环境中最槽糕的吞吐量了.&
# netperf H&
10.0.1.129 l&
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to&
10.0.1.129 (10.0.1.129) port 0 AF_INET&
Recv Send Send&
Socket Socket Message Elapsed&
Size Size Size Time Throughput&
bytes bytes bytes secs. 10^6bits/sec&
另外,netperf可以帮助测试每秒总计有多少的 TCP请求和响应数.通过建立单一 TCP连接并顺序地发送
多个请求/响应(ack 包来回在 1个 byte大小).有点类似于 RDBMS程序在执行多个交易或者邮件
在同一个连接管道中发送邮件.&
以下例子在 30 秒的持续时间内,模拟&
TCP请求/响应:&
client# netperf t&
192.168.1.230 l&
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET&
to 192.168.1.230 (192.168.1.230) port 0 AF_INET&
Local /Remote&
Socket Size Request Resp. Elapsed Trans.&
Send Recv Size Size Time Rate&
bytes Bytes bytes bytes secs. per sec&
1 1 30.00 4453.80&
在输出中看出,这个支持的处理速率为每秒&
4453 psh/ack(包大小为 1 byte).这其实是理想状态下,因为
实际情况时,多数 requests(请求),特别是 responses(响应),都大于 1 byte.&
现实情况下,netperf一般 requests默认使用 2K大小,responses默认使用 32K大小:&
client# netperf t&
192.168.1.230 l&
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to&
192.168.1.230 (192.168.1.230) port 0 AF_INET&
Local /Remote&
Socket Size Request Resp. Elapsed Trans.&
Send Recv Size Size Time Rate&
bytes Bytes bytes bytes secs. per sec&
30.00 222.37&
这个处理速率减少到了每秒&
8.2.2 使用 iperf评估效率&
基于都是需要在 2端检查连接情况下,iperf和&
netperf很相似.不同的是,iperf更深入的通过 windows size
QOS设备来检查 TCP/UDP的效率情况.这个工具,是给需要优化 TCP/IP stacks以及测试这些 stacks
效率的管理员们量身定做的.&
iperf作为一个二进制程序,可运行在 server 或者&
client任一模式下.默认使用 50001 端口.&
server 端(192.168.1.215):&
server# iperf s&
Running Iperf Server as a daemon&
The Iperf daemon process ID : 3655&
Server listening on TCP port 5001&
TCP window size: 85.3 KByte (default)&
在以下例子里,一个无线环境下,其中 client端重复运行 iperf,用于测试的吞吐量情况.这个环境假
定处于被充分利用状态,很多主机都在下载 ISO images文件.&
首先 client端连接到 server 端(192.168.1.215),并在总计 60秒时间内,每 5秒进行一次带宽测试的采样.&
client# iperf c&
192.168.1.215 t&
Client connecting to 192.168.1.215, TCP port 5001&
TCP window size: 25.6 KByte (default)&
[ 3] local 192.168.224.150 port 51978 connected with&
192.168.1.215 port 5001&
[ ID] Interval Transfer Bandwidth&
[ 3] 0.05.0&
sec 6.22 MBytes 10.4 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 5.010.0&
sec 6.05 MBytes 10.1 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 10.015.0&
sec 5.55 MBytes 9.32 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 15.020.0&
sec 5.19 MBytes 8.70 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 20.025.0&
sec 4.95 MBytes 8.30 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 25.030.0&
sec 5.21 MBytes 8.74 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 30.035.0&
sec 2.55 MBytes 4.29 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 35.040.0&
sec 5.87 MBytes 9.84 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 40.045.0&
sec 5.69 MBytes 9.54 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 45.050.0&
sec 5.64 MBytes 9.46 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 50.055.0&
sec 4.55 MBytes 7.64 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 55.060.0&
sec 4.47 MBytes 7.50 Mbits/sec&
[ ID] Interval Transfer Bandwidth&
[ 3] 0.060.0&
sec 61.9 MBytes 8.66 Mbits/sec
这台主机的其他传输,也会影响到这部分的带宽采样.所以可以看到总计 60秒时间内,都在 4 10&
MBits上下起伏.&
除了 TCP测试之外,iperf的 UDP测试主要是评估包丢失和抖动.&
接下来的 iperf测试,是在同样的 54Mbit G标准无线中.在早期的示范例子中,目前的吞吐量只有 9&
# iperf c&
192.168.1.215 b&
WARNING: option b&
implies udp testing&
Client connecting to 192.168.1.215, UDP port 5001&
Sending 1470 byte datagrams&
UDP buffer size: 107 KByte (default)&
[ 3] local 192.168.224.150 port 33589 connected with 192.168.1.215 port 5001&
[ ID] Interval Transfer Bandwidth&
[ 3] 0.010.0&
sec 11.8 MBytes 9.90 Mbits/sec&
[ 3] Sent 8420 datagrams&
[ 3] Server Report:&
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams&
[ 3] 0.010.0&
sec 6.50 MBytes 5.45 Mbits/sec 0.480 ms
[ 3] 0.010.0&
sec 1 datagrams received outoforder&
从输出中可看出,在尝试传输&
10M的数据时,实际上只产生了 5.45M.却有 45% 的包丢失.&
8.3 Individual Connections with tcptrace&
tcptrace工具提供了对于某一具体连接里,详细的 TCP相关信息.该工具使用 libcap来分析某一具体&
sessions.该工具汇报的信息,有时很难在某一 TCP stream被发现.这些信息
包括了有:&
1,TCP Retransmissions(IP转播)&
所有数据大小被发送所需的包总额&
2,TCP Windows Sizes 连
接速度慢与小的 windows sizes有关&
3,Total throughput of the connection 连
接的吞吐量&
4,Connection duration 连
接的持续时间&
8.3.1 案例学习&
使用 tcptrace&
tcptrace工具可能已经在部分 Linux 发布版中有安装包了,该文作者通过网站,下载的是源码安装包:http://&
/rpm/packages /tcptrace.tcptrace需要 libcap基于文件输入方式使用.在 tcptrace没有选
项的情况下,默认每个唯一的连接过程都将被捕获.&
以下例子是,使用 libcap基于输入文件为 bigstuff:&
# tcptrace bigstuff&
1 arg remaining, starting with &#39;bigstuff&#39;&
Ostermann&#39;s tcptrace version&
6.6.7 Thu&
Nov 4, 2004&
146108 packets seen, 145992 TCP packets traced&
elapsed wallclock time: 0:00:01.413 pkts/sec analyzed&
trace file elapsed time: 0:09:20.358860&
TCP connection info:&
1: 192.168.1.60:pcanywherestat 192.168.1.102:
2571 (a2b) 404& 450&&
2: 192.168.1.60:3356 ftp.
strong.net:21 (c2d) 35& 21&&
3: 192.168.1.60:3825 ftp.
strong.net:65023 (e2f) 5& 4&&
(complete)&
4: 192.168.1.102:.8.194:
5190 (g2h) 6& 6&&
5: 192.168.1.102:1490 cs127.
msg.:5050 (i2j) 5& 5&&
6: pyinf111.
:993 192.168.1.102:
3785 (k2l) 13& 14&
上面的输出中,每个连接都有对应的源主机和目的主机.tcptrace使用l
选项可查看某一连接更详细的
以下的结果,就是在 bigstuff 文件中,#16 连接的相关统计数据:&
# tcptrace l&
1 arg remaining, starting with &#39;bigstuff&#39;&
Ostermann&#39;s tcptrace version&
6.6.7 Thu&
Nov 4, 2004&
146108 packets seen, 145992 TCP packets traced&
elapsed wallclock time: 0:00:00.6008 pkts/sec analyzed&
trace file elapsed time: 0:09:20.358860&
TCP connection info:&
32 TCP connections traced:&
TCP connection 1:&
host a: 192.168.1.60:pcanywherestat&
host b: 192.168.1.102:2571&
complete conn: no (SYNs: 0) (FINs: 0)&
first packet: Sun Jul 20 15:58:05.8&
last packet: Sun Jul 20 16:00:04.8&
elapsed time: 0:01:59.091733&
total packets: 854&
filename: bigstuff&
total packets: 404 total packets: 450&
ack pkts sent: 404 ack pkts sent: 450&
pure acks sent: 13 pure acks sent: 320&
sack pkts sent: 0 sack pkts sent: 0&
dsack pkts sent: 0 dsack pkts sent: 0&
max sack blks/ack: 0 max sack blks/ack: 0&
unique bytes sent: 52608 unique bytes sent: 10624&
actual data pkts: 391 actual data pkts: 130&
actual data bytes: 52608 actual data bytes: 10624&
rexmt data pkts: 0 rexmt data pkts: 0&
rexmt data bytes: 0 rexmt data bytes: 0&
zwnd probe pkts: 0 zwnd probe pkts: 0&
zwnd probe bytes: 0 zwnd probe bytes: 0&
outoforder pkts: 0 outoforder pkts: 0&
pushed data pkts: 391 pushed data pkts: 130&
SYN/FIN pkts sent: 0/0 SYN/FIN pkts sent: 0/0&
urgent data pkts: 0 pkts urgent data pkts: 0 pkts&
urgent data bytes: 0 bytes urgent data bytes: 0 bytes&
mss requested: 0 bytes mss requested: 0 bytes&
max segm size: 560 bytes max segm size: 176 bytes&
min segm size: 48 bytes min segm size: 80 bytes&
avg segm size: 134 bytes avg segm size: 81 bytes&
max win adv: 19584 bytes max win adv: 65535 bytes&
min win adv: 19584 bytes min win adv: 64287 bytes&
zero win adv: 0 times zero win adv: 0 times&
avg win adv: 19584 bytes avg win adv: 64949 bytes&
initial window: 160 bytes initial window: 0 bytes&
initial window: 2 pkts initial window: 0 pkts&
ttl stream length: NA ttl stream length: NA&
missed data: NA missed data: NA&
truncated data: 36186 bytes truncated data: 5164 bytes&
truncated packets: 391 pkts truncated packets: 130 pkts&
data xmit time: 119.092 secs data xmit time: 116.954 secs&
idletime max:
ms idletime max:
throughput: 442 Bps throughput: 89 Bps&
8.3.2 案例学习&
计算转播率&
几乎不可能确定说哪个连接会有严重不足的转播问题,只是需要分析,使用 tcptrace工具可以通过过滤机制
和布尔表达式来找出出问题的连接.一个很繁忙的中,会有很多的连接,几乎所有的连接都会有转播.找
出其中最多的一个,这就是问题的关键.&
下面的例子里,tcptrace将找出那些转播大于 100 segments(分段数)的连接:&
# tcptrace f&#39;rexmit_
segs&100&#39; bigstuff&
Output filter: ((c_rexmit_segs&100)OR(s_rexmit_segs&100))&
1 arg remaining, starting with &#39;bigstuff&#39;&
Ostermann&#39;s tcptrace version&
6.6.7 Thu&
Nov 4, 2004&
146108 packets seen, 145992 TCP packets traced&
elapsed wallclock time: 0:00:00.2431 pkts/sec analyzed&
trace file elapsed time: 0:09:20.358860&
TCP connection info:&
16: ftp.strong.net:8.1.60:
2158 (ae2af) 1&
在这个输出中,是#16 这个连接里,超过了 100 转播.现在,使用以下命令查看关于这个连接的其他信息:&
# tcptrace l&
arg remaining, starting with &#39;bigstuff&#39;&
Ostermann&#39;s tcptrace version&
6.6.7 Thu&
Nov 4, 2004&
146108 packets seen, 145992 TCP packets traced&
elapsed wallclock time: 0:00:01.7752 pkts/sec analyzed&
trace file elapsed time: 0:09:20.358860&
TCP connection info:&
32 TCP connections traced:&
================================&
TCP connection 16:&
host ae: ftp.strong.net:65014&
host af: 192.168.1.60:2158&
complete conn: no (SYNs: 0) (FINs: 1)&
first packet: Sun Jul 20 16:04:33.8&
last packet: Sun Jul 20 16:07:22.8&
elapsed time: 0:02:49.060381&
total packets: 28512&
filename: bigstuff&
unique bytes sent:
unique bytes sent: 0&
actual data pkts: 18695 actual data pkts: 0&
actual data bytes:
actual data bytes: 0&
rexmt data pkts: 1605 rexmt data pkts: 0&
rexmt data bytes: 2188780 rexmt data bytes: 0&
计算转播率:&
rexmt/actual * 100 = Retransmission rate&
* 100 = 8.5%&
这个慢连接的原因,就是因为它有 8.5% 的转播率.&
8.3.3 案例学习&
计算转播时间&
tcptrace工具有一系列的模块展示不同的数据,按照属性,其中就有 protocol(协议),port(端口),time等
等.Slice module使得你可观察在一段时间内的 TCP性能.你可以在一系列的转发过程中,查看其他性能数
据,以确定找出瓶颈.&
以下例子示范了,tcptrace是怎样使用 slice模式的:&
# tcptrace &xslice bigfile
以上命令会创建一个 slice.dat文件在现在的工作目录中.这个文件内容,包含是每 15秒间隔内转播的相关
slice.dat&
root root 3430 Jul 10 22:50 slice.dat&
# more slice.dat&
date segs bytes rexsegs rexbytes new active&
22:20:11. 0 0 0 0 0&
22:20:26.5
22:20:41.49
22:20:56.77
22:21:11.57
22:21:26.75
22:21:41.34
22:21:56.90
22:22:11.95
22:22:26.8
监控性能由以下几个部分组成:&
1,检查并确定所有网卡都工作在正确的速率.&
2,检查每块网卡的吞吐量,并确认其处于服务时的速度.&
3,监控流量的类型,并确定适当的流量优先级策略.&
结束语:这是该译文的最后一篇,在这篇中,作者提供了一个案例环境,用之前几篇所阐述的理论以及涉及到
的工具,对其进行一个整体的系统性能检查.对大家更好理解系统性能监控,进行一次实战演习.&
BTW:在中文技术网站上,类似内容的文章,大体是来自该作者&
年所著论文,此译文是建立在作者为&
OSCON 2009重写基础上的.所以部分内容可能会存在重复雷同,特此说明下.&
A:案例学习&
性能监控之循序渐进&
某一天,一个客户打电话来需要技术帮助,并抱怨平常 15秒就可以打开的网页现在需要 20分钟才可以打开.
具体系统配置如下:&
RedHat Enterprise Linux 3 update 7&
Dell 1850 Dual Core Xenon Processors, 2 GB RAM, 75GB 15K Drives&
Custom LAMP software stack(L+++ 环境)&
性能分析之步骤&
1. 首先使用 vmstat查看大致的系统性能情况:&
# vmstat 1 10&
procs memory swap io system cpu&
r b swpd free buff cache si so bi bo in cs us sy id wa&
1 0 44 2 0 0 7 3 22 17 25 8 17 18&
0 1 28 6 0 0 4
0 1 04 6 0 0
534 3 4 56 37&
2 0 40 0 0 0 5
1 0 88 8 0 0 4
0 1 28 8 0 0 9 559 5 3 54 38&
0 1 52 6 0 0 9
1 1 56 0 0 0
941 33 12 49 7&
1 0 48 8 0 0 6
1 0 12 2 0 0 7
1,不会是内存不足导致,因为 swapping 始终没变化(si和&
so).尽管空闲内存不多(free),但 swpd 也没有变
2,CPU方面也没有太大问题,尽管有一些运行队列(procs r),但处理器还始终有 50% 多的 idle(CPU id).&
3,有太多的上下文切换(cs)以及 disk block从 RAM中被读入(bo).&
4,CPU还有平均&
20% 的 I/O等待情况.&
从以上总结出,这是一个 I/O瓶颈.&
2. 然后使用 iostat检查是谁在发出 IO请求:&
# iostat x&
Linux 2.4.2140.
ELsmp (.) 03/26/2007&
%user %nice %sys %idle&
30.00 0.00 9.33 60.67&
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz&
await svctm %util&
/dev/sda .34 .23 .84 .92 6.93 0.39 0.03 0.06 6.69&
/dev/sda1 2.67 5.46 0.40 1.76 24.62 57.77 12.31 28.88 38.11 0.06 2.78 1.77 0.38&
/dev/sda2 0.00 0.30 0.07 0.02 0.57 2.57 0.29 1.28 32.86 0.00 3.81 2.64 0.03&
/dev/sda3 .58 .45 .50 .75 6.90 0.32 0.03 0.06 6.68&
%user %nice %sys %idle&
9.50 0.00 10.68 79.82&
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz&
await svctm %util&
/dev/sda 0.00 0.00 .00 0.00 0.00 0.00 0.00 0.00 43.69 3.60 0.99 117.86&
/dev/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00&
/dev/sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00&
/dev/sda3 0.00 0.00 .00 0.00 0.00 0.00 0.00 0.00 43.69 3.60 0.99 117.86&
%user %nice %sys %idle&
9.23 0.00 10.55 79.22&
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz&
await svctm %util&
/dev/sda 0.00 0.00 .00 0.00 0.00 0.00 0.00 0.00 41.65 2.12 0.99 112.51&
/dev/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00&
/dev/sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00&
/dev/sda3 0.00 0.00 .00 0.00 0.00 0.00 0.00 0.00 41.65 2.12 0.99 112.51&
1,看上去只有/dev/sda3 分区很活跃,其他分区都很空闲.&
2,差不多有 1200 读&
IOPS,磁盘本身是支持&
200 IOPS左右(参考之前的 IOPS计算公式).&
3,有超过 2秒,实际上没有一个读磁盘(rkb/s).这和在 vmstat看到有大量 I/O wait是有关系的.&
4,大量的 read IOPS(r/s)和在 vmstat中大量的上下文是匹配的.这说明很多读操作都是失败的.&
从以上总结出,部分应用程序带来的读请求,已经超出了 I/O子系统可处理的范围.&
3. 使用 top 来查找系统最活跃的应用程序&
11:46:11 up 3 days, 19:13, 1 user, load average: 1.72, 1.87, 1.80&
176 processes: 174 sleeping, 2 running, 0 zombie, 0 stopped&
CPU states: cpu user nice system irq softirq iowait idle&
total 12.8% 0.0% 4.6% 0.2% 0.2% 18.7% 63.2%&
cpu00 23.3% 0.0% 7.7% 0.0% 0.0% 36.8% 32.0%&
cpu01 28.4% 0.0% 10.7% 0.0% 0.0% 38.2% 22.5%&
cpu02 0.0% 0.0% 0.0% 0.9% 0.9% 0.0% 98.0%&
cpu03 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 100.0%&
Mem: 2055244k av, 2032692k used, 22552k free, 0k shrd, 18256k buff&
1216212k actv, 513216k in_d, 25520k in_c&
Swap: 4192956k av, 249844k used, 3943112k free 1218304k cached&
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND&
1 379M 224M 1117 R 38.2 25.7% 15:17.78 d&
4023 root 15 0
R 2.0 0.3 0:00.06 top&
1 root 15 0
S 0.0 0.2 0:01.30 init&
2 root 34 19 0 0 0 S 0.0 0.0 0:22.59 ksoftirqd/0&
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0&
4 root 10 5&
0 0 0 S 0.0 0.0 0:00.05 events/0&
1,占用资源最多的好像就是 进程,其他都处于完全&
idle状态.&
2,在 top(wa) 看到的数值,和在 vmstat看到的 wio 数值是有关联的.&
从以上总结出,似乎就只有 进程在请求资源,因此可以推论它就是导致问题的关键.&
4. 现在已经确定是 在发出读请求,使用 strace来检查它在读请求什么.&
# strace p&
Process 14939 attached interrupt&
read(29, &\3\1\237\1\366\337\1\222%\4\2\0\0\0\0\0012P/d&, 20) = 20&
read(29, &ata1/strong/log/strongd&&#8230;,&
399) = 399&
_llseek(29, , [], SEEK_SET) = 0&
read(29, &\1\1\241\366\337\1\223%\4\2\0\0\0\0\0012P/da&, 20) = 20&
read(29, &ta1/strong/log/strongde&&#8230;,&
400) = 400&
_llseek(29, , [], SEEK_SET) = 0&
read(29, &\1\1\235\366\337\1\224%\4\2\0\0\0\0\0012P/da&, 20) = 20&
read(29, &ta1/strong/log/strongde&&#8230;,&
396) = 396&
_llseek(29, , [], SEEK_SET) = 0&
read(29, &\1\1\245\366\337\1\225%\4\2\0\0\0\0\0012P/da&, 20) = 20&
read(29, &ta1/strong/log/strongde&&#8230;,&
404) = 404&
_llseek(29, , [], SEEK_SET) = 0&
read(29, &\3\1\236\2\366\337\1\226%\4\2\0\0\0\0\0012P/d&, 20) = 20&
1,大量的读操作都在不断寻道中,说明&
进程产生的是随机&
2,看上去似乎是,某一 sql查询导致读操作.&
从以上总结出,所有的读&
IOPS都是 进程在执行某些读查询时产生的.&
5. 使用 admin 命令,来查找是哪个慢查询导致的.&
# ./admin pstrong&
processlist&
Id | User | Host | db | Command | Time | State | Info&
1 | root | localhost | strong | Sleep | 10 | |&
| 2 | root | localhost | strong | Sleep | 8 | |&
| 3 | root | localhost | root | Query | 94 | Updating | update `failures` set&
`update_datasource`=&#39;Y&#39; where database_id=&#39;32&#39; and update_datasource=&#39;N&#39; and |&
| 14 | root | localhost | | Query | 0 | | show processlist
1,里,似乎在不断的运行 table update查询.&
2,基于这个 update查询,是对所有的 table进行索引.&
从以上总结出,里这些 update查询问题,都是在尝试对所有 table进行索引.这些产生的读请求正
是导致系统性能下降的原因.&
把以上这些性能信息移交给了相关开发人员,用于分析他们的 代码.一个开发人员对代码进行了临时
性优化.某个查询如果出错了,也最多到 100K记录.本身考虑最多存在 4百万记录.最后,这个查询不
会再给带来负担了.&
标签: , , , , , , , , ,
才能评论!
电子邮箱:
小提示: 您的密码会通过填写的"电子邮箱"发送给您.
& | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | &
最热门文章
7537 views
1050 views
友情链接 |
本站进行125次查询

我要回帖

更多关于 p.s是什么意思 的文章

 

随机推荐