ImageVerifierCode 换一换
格式:PPT , 页数:70 ,大小:1.96MB ,
文档编号:3573152      下载积分:28 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-3573152.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(三亚风情)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(Memcached内存分析、调优、集群课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

Memcached内存分析、调优、集群课件.ppt

1、Memcached内存分析、调优、集群刘中兵 搜狐TPC v1 2019/12/12lzbboxhotmail2导航 1.Memcached背景 2.Memcached使用:安装、启动、命令、统计 3.深入Memcached内部:slab、page、item 4.Memcached分布式:一致性Hash 5.key-value系统比较:集群、性能对比 6.Memcached客户端1.Memcached背景4Memcached是什么memcached由LiveJournal运营人员开发memcached是高性能的分布式内存缓存服务器,开源协议简单基于libevent时间处理:epoll/kque

2、ue内置内存存储方式:slab/LRU目前用户LiveJournalFacebookmixiDiggWikipediaVox5facebook200 memcached servers16GB 四核 AMD643TB cache data6Memcached支持语言C/C+libmemcachedlibmemcacheapr_memcachememcaheclientlibketamaPHPPECL/memcachedPECL/memcachePHP libmemcachedJavaspymemcachedJava memcached client/dangamemcache-client-f

3、orjava/taobaoPythonRubyPerl.NETMySQLPostgreSQLErlangLuaLisp参考:code.google/p/memcached/wiki/Clients72.使用Memcached安装 启动 命令 统计8安装基于libevent事件处理机制 monkey.org/provos/libevent/./configure-prefix=/usr/localmakesudo make installmemcached:memcached.org/./configure-with-libevent=/usr/localmakemake install9安装成

4、功memcached-h10主要启动参数启动方式:-d 以守护程序(daemon)方式运行-u root 指定用户,如果当前为 root,需要使用此参数指定用户-P/tmp/a.pid保存PID到指定文件内存设置:-m 1024 数据内存数量,不包含memcached本身占用,单位为 MB-M 内存不够时禁止LRU,报错-n 48初始chunk=key+suffix+value+32结构体,默认48字节-f 1.25 增长因子,默认1.25-L启用大内存页,可以降低内存浪费,改进性能连接设置:-l 127.0.0.1 监听的 IP 地址,本机可以不设置此参数-p 11211 TCP端口,默认为

5、11211,可以不设置-U 11211UDP端口,默认为11211,0为关闭并发设置:-c 1024 最大并发连接数,默认1024,最好是200-t 4线程数,默认4。由于memcached采用NIO,所以更多线程没有太多作用-R 20每个event连接最大并发数,默认20-C禁用CAS命令(可以禁止版本计数,减少开销)例如:/usr/local/bin/memcached-d-u nobody-m 1024-p 11210 -l 10.11.12.70-P/opt/memcached/pid/m11210.pid11daemontools启动工具 memcached有可能会死掉(mixi.j

6、p经验)监视memcached进程并自动启动 启动脚本样例:run.sh参考:cr.yp.to/daemontools.html#!/bin/shif f/etc/sysconfig/memcached;then ./etc/sysconfig/memcachedfiexec 2&1exec memcached p$PORT u$USER m$CACHESIZE c$MAXCONN$OPTIONS12memcached调试-v+输出error/warning-vv+输出命令/响应-vvv+输出内部状态10_10_82_80#memcached-d-u root-m 1024-p 11210-v

7、vv10_10_82_80#memcached-d-u root-m 1024-p 11211 vvvslab class 1:chunk size 96 perslab 10922slab class 2:chunk size 120 perslab 8738.slab class 42:chunk size 1048576 perslab 136 server listening(auto-negotiate)37 send buffer was 126976,now 26843545637 server listening(udp)37 server listening(udp)37 s

8、erver listening(udp)37 server listening(udp)38 new auto-negotiating client connection38:Client using the ascii protocol38 stats38 END38 quit38 connection closed.telnet localhost 11210/11211statsget abcquit13memcached命令列表 存储命令set/add/replace/append/prepend/cas 读取命令get=bget?/gets 删除命令delete 计数命令incr/d

9、ecr 统计命令stats/settings/items/sizes/slabs 工具memcached-tool14存储命令格式:rnrnrn15存储命令set/add/replaceset liu 32 0 4javaSTORED/正确get liuVALUE abc 32 4javaENDset liu 32 0 4cplusCLIENT_ERROR bad data chunkERROR/长度错误set liu 32 0 4javaSTOREDadd liu 32 0 5cplusNOT_STORED/已存在不能addget liuVALUE abc 32 4javaENDadd so

10、ng 32 0 5cplusSTORED/不存在可以addset liu 32 0 4javaSTOREDreplace liu 32 0 5cplusSTORED/已存在可以replaceget liuVALUE cplus 32 5liuENDreplace yang 32 0 5cplusNOT_STORED/不存在不能replacedatablock长度必须正确add只能添加不存在的keyreplace只能替换已有的key16读取命令get/getsget liu song yangVALUE liu 32 4javaVALUE song 32 5cplusEND/查询多个键值gets

11、 liuVALUE liu 32 4 12javaEND/取得版本号replace liu 32 0 4javaSTORED/增加版本号get liuVALUE liu 32 4javaENDgets liuVALUE liu 32 4 13javaEND格式:*rnVALUE rnrnVALUE rnrnENDrncommand:get普通查询,gets用于查询带版本的值版本号+117检查存储命令cascas即check and set,只有版本号相匹配时才能存储,否则返回EXISTS设计意图:解决多客户端并发修改同一条记录的问题,防止使用经过改变了的value/key对cas liu 32

12、 0 5 12cplusEXISTSgets liuVALUE liu 32 4 13javaEND/版本号不同不修改cas liu 32 0 5 13cplusSTOREDgets liuVALUE liu 32 5 14cplusEND/版本号相同才修改当前版本号为13,按12不能修改当前版本号为13,按13可以修改18计数命令incr/decr格式:incr/decr 要求:key必须存在,value必须是数字set count 32 0 1 1STOREDincr count 89decr count 27delete count DELETEDincr count 1NOT_FOUN

13、Dincr liu 2CLIENT_ERROR cannot increment or decrement non-numeric value实现计数器key不存在不能计数value不是数字不能计数19删除命令delete格式:delete DELETErntime:秒数或Unixtime,在time时间内不能add或replace,但能set,不能get。过期后才能够重新set有效并能getdelete liuDELETEDget liuEND20统计命令statsstatsSTAT pid 23178STAT uptime 1039318STAT time 1292036037STAT v

14、ersion 1.4.2STAT pointer_size 64STAT rusage_user 1011.574217STAT rusage_system 1677.713948STAT curr_connections 114STAT total_connections 73801STAT connection_structures 149STAT cmd_get 79114939STAT cmd_set 27302514STAT cmd_flush 0STAT get_hits 79114939STAT get_misses 24322507STAT delete_misses 1339

15、28STAT delete_hits 402569STAT incr_misses 0STAT incr_hits 0STAT decr_misses 0STAT decr_hits 0STAT cas_misses 0STAT cas_hits 0STAT cas_badval 0STAT auth_cmds 0STAT auth_errors 0STAT bytes_read 59348603658STAT bytes_written 425549797158STAT limit_maxbytes 4294967296STAT accepting_conns 1STAT listen_di

16、sabled_num 0STAT threads 4STAT conn_yields 0STAT bytes 3832761746STAT curr_items 2854731STAT total_items 27302514STAT evictions 18456987STAT reclaimed 0END格式:stats rnSTAT rnENDrn21stats统计项分析CPU占用是否高分析连接数是否太多分析命中率是否太低分析字节数流量分析对象数LRU频率22stats settings查看设置stats settingsSTAT maxbytes 0STAT maxconns 1024

17、STAT tcpport 11213STAT udpport 11211STAT inter NULLSTAT verbosity 0STAT oldest 0STAT evictions onSTAT domain_socket NULLSTAT umask 700STAT growth_factor 1.25STAT chunk_size 48STAT num_threads 4STAT stat_key_prefix:STAT detail_enabled noSTAT reqs_per_event 20STAT cas_enabled yesSTAT tcp_backlog 1024S

18、TAT binding_protocol auto-negotiateSTAT item_size_max 1048576END23stats items数据项统计stats itemsSTAT items:1:number 10922STAT items:1:age 350988STAT items:1:evicted 3829STAT items:1:evicted_nonzero 0STAT items:1:evicted_time 690209STAT items:1:outofmemory 0STAT items:1:tailrepairs 0STAT items:2:number

19、375734STAT items:2:age 898762STAT items:2:evicted 2661399STAT items:2:evicted_nonzero 0STAT items:2:evicted_time 142500STAT items:2:outofmemory 0STAT items:2:tailrepairs 0.STAT items:40:number 14STAT items:40:age 977359STAT items:40:evicted 25STAT items:40:evicted_nonzero 0STAT items:40:evicted_time

20、 60653STAT items:40:outofmemory 0STAT items:40:tailrepairs 0END24stats sizes对象数量统计stats sizesSTAT 96 10922STAT 128 375734STAT 160 201916STAT 192 816311STAT 224 8685STAT 256 3321STAT 288 3549STAT 320 826STAT 352 427END格式:STAT 注意:会锁定服务,暂停处理请求25stats slabs区块统计stats slabsSTAT 1:chunk_size 96STAT 1:chunk

21、s_per_page 10922.STAT 40:chunk_size 1048576STAT 40:chunks_per_page 1STAT 40:total_pages 15STAT 40:total_chunks 15STAT 40:used_chunks 14STAT 40:free_chunks 1STAT 40:free_chunks_end 0STAT 40:mem_requested 9348752STAT 40:get_hits 9593STAT 40:cmd_set 4828STAT 40:delete_hits 40STAT 40:incr_hits 0STAT 40:

22、decr_hits 0STAT 40:cas_hits 0STAT 40:cas_badval 0STAT active_slabs 40STAT total_malloced 4294496616END区块数量命中率分析占用情况被浪费内存数=(total_chunks*chunk_size)-mem_requested如果太大,需要调整factor26其他命令versionflush_allquitecho/nc快捷方式10_10_82_80#telnet localhost 11211Trying 127.0.0.1.Connected to localhost.localdomain(1

23、27.0.0.1).Escape character is.versionVERSION 1.4.5flush_allOKquitConnection closed by foreign host.You have new mail in/var/spool/mail/root10_10_82_80#echo flush_all|nc localhost 11211OK10_10_82_80#echo get liu|nc localhost 11210VALUE liu 32 4javaEND27memcached-tool方便调优Perl脚本:code.sixapart/svn/memca

24、ched/trunk/server/scripts/memcached-tool10.10.82.80:/opt/test运行:memcached-tool 192.168.12.195:11210memcached-tool 192.168.12.195:11210 displaymemcached-tool 192.168.12.195:11210 statsmemcached-tool 192.168.12.195:11210 stats itemsmemcached-tool 192.168.12.195:11210 stats slabsmemcached-tool 192.168.

25、12.195:11210 dumpmemcached-tool 192.168.12.195:11210 move/数据迁移28memcached-toolmemcached-tool 192.168.12.195:11213#Item_Size Max_age 1MB_pages Count Full?1 96 B 384295 s 1 10922 yes 2 120 B 964793 s 43 375734 yes 3 152 B 196 s 1 1021 no 4 192 B 962720 s 186 1015746 yes 5 240 B 954705 s 2 8734 yes 6 3

26、04 B 945823 s 2 6898 yes 7 384 B 954218 s 9 24569 yes 8 480 B 980911 s 91 198744 yes 9 600 B 963930 s 104 181688 yes 10 752 B 964602 s 274 381956 yes 11 944 B 963902 s 173 192030 yes 12 1.2 kB 962169 s 79 69914 yes 13 1.4 kB 959572 s 67 47436 yes 14 1.8 kB 957541 s 69 38916 yes 15 2.3 kB 956767 s 75

27、 33825 yes 16 2.8 kB 957198 s 105 37904 yes 17 3.5 kB 957049 s 128 36864 yes 18 4.4 kB 955935 s 129 29669 yes 19 5.5 kB 956721 s 111 20423 yes 20 6.9 kB 954862 s 119 17492 yes 21 8.7 kB 953024 s 157 18526 yes 22 10.8 kB 953361 s 226 21243 yes 23 13.6 kB 953301 s 315 23625 yes 24 16.9 kB 958310 s 356

28、 21360 yes 25 21.2 kB 961544 s 330 15839 yes 26 26.5 kB 961128 s 259 9840 yes 27 33.1 kB 962389 s 181 5430 yes 28 41.4 kB 966056 s 141 3384 yes 29 51.7 kB 966694 s 111 2109 yes 30 64.7 kB 965340 s 87 1305 yes 31 80.9 kB 962627 s 65 779 yes 32 101.1 kB 965821 s 38 379 yes 33 126.3 kB 949182 s 25 200

29、yes 34 157.9 kB 965799 s 18 107 yes 35 197.4 kB 876687 s 11 54 yes 36 246.8 kB 938290 s 9 36 yes 37 308.5 kB 837011 s 8 22 yes 38 385.6 kB 886180 s 14 27 yes 39 482.0 kB 908224 s 6 10 yes 40 1024.0 kB 990279 s 15 14 yes29UDP协议何时使用UDP?TCP连接客户端过多时选用 允许少量的操作失败 如get有少量丢失,可以当做没被cache处理frame header:8byte+

30、tcppacket 0-1 Request ID 2-3 Sequence number 4-5 Total number of datagrams in this message 6-7 Reserved for future use;must be 030总结:memcached使用 安装 libevent memcached 启动参数 自启动daemontools 命令 存储命令set/add/replace/append/prepend/cas 读取命令get=bget?/gets 删除命令delete 计数命令incr/decr 统计命令stats/settings/items/si

31、zes/slabs 工具memcached-tool313.深入Memcached内部32memcached机制守护进程机制 UNIX daemonSocket事件处理机制 non-blocked:非阻塞 libevent:异步事件处理 epoll/kqueue内存管理机制 slab:内存分配机制 LRU:对象清除机制 Hash机制:快速检索item多线程处理机制:pthread(POSIX)线程模式 编译时开启:./configure enable-threads 目前还比较粗糙,锁机制locking不够完善 负载过重时,可以开启(-t线程数为CPU核数)33memcached内存管理机制

32、SLAB内存处理机制 提前分配大内存slab 1MB,再进行小对象填充chunk 避免大量重复的初始化和清理减轻内存管理器负担 避免频繁malloc/free系统碎片 懒惰检测机制 不检测item对象是否超时 get时检查item对象是否应该删除 懒惰删除机制 删除item对象时,不释放内存,作删除标记,指针放入slot回收插槽,下次分配的时候直接使用34名词解释 slab class:内存区类别(48byte-1MB)slab=page:动态创建的实际内存区 slab classid:slab class的ID chunk:数据区块,固定大小 item:实际存储在chunk中的数据项35sl

33、ab内存分配36slab内存结构图:二维数组链表 slab是一次申请内存的最小单位每个slab都是1MBchunk填充item后会有空间浪费双向链表key索引表剩余空间指针slab指针列表回收空间指针37slab内存分配实例38实例数据-195:11213 4GB39计算slab占用内存40slab参数 进程内存区 slabclass元信息:1.1中是21byte,1.2中是200byte Hashtable:1.1中位41MB,1.2中位65MB 数据内存区 slab默认大小为1048576byte(1MB),大于1MB数据忽略 chunk初始大小,1.1中是1byte,1.2中是48byt

34、e 增长因子factor 1.1中,chunk大小为初始大小*2n,n为classid,即:id为0的slab大小1byte,id为1的slab大小2byte,id为2的slab大小4byte.id为20的slab,每chunk大小为1MB,只有一个chunk 1.2中有一个factor值,默认为1.25 96,120,152.41Item内存分配42Item数据格式 Item是保存在chunk中的实际数据43新建Item分配内存过程快速定位slab classid 计算key+value+suffix+32结构体,如90byte 如果1MB,无法存储丢弃 取最小冗余的slab class 如

35、:有48,96,120,存90会选择96按顺序寻找可用chunk slot:检查slab回收空间slot里是否有剩余chunk delete:delete时标记到slot exptime:get时检查的过期对象标记到slot end_page_ptr:检查page中是否有剩余chunk memory:内存还有剩余则开辟新的slab LRU:Slab内部扫描Item双向链表50次44内存有浪费了!slab尾部剩余空间如classid=40中,两个chunk占用了1009384byte,就有1048576-1009384=39192byte被浪费解决办法:规划slab=chunk*n整数倍 sla

36、b中chunk利用率低:申请的slab只存放了一个Item解决办法:规划slab=chunkchunk存储Item浪费如I tem是100,存到128字节chunk,就有28字节浪费解决办法:规划chunk=Item45使用合适的factor,减少浪费-f参数:默认为1.25,曾经为2值越小,slab中chunk size差距越小,内存浪费越小1.25适合缓存几百字节的对象slab class 1:chunk size 128 perslab 8192slab class 2:chunk size 256 perslab 4096slab class 3:chunk size 512 pers

37、lab 2048slab class 4:chunk size 1024 perslab 1024slab class 5:chunk size 2048 perslab 512slab class 6:chunk size 4096 perslab 256slab class 7:chunk size 8192 perslab 128slab class 8:chunk size 16384 perslab 64slab class 9:chunk size 32768 perslab 32slab class 10:chunk size 65536 perslab 16slab class

38、 11:chunk size 131072 perslab 8slab class 12:chunk size 262144 perslab 4slab class 13:chunk size 524288 perslab 2slab class 1:chunk size 88 perslab 11915slab class 2:chunk size 112 perslab 9362slab class 3:chunk size 144 perslab 7281slab class 4:chunk size 184 perslab 5698slab class 5:chunk size 232

39、 perslab 4519slab class 6:chunk size 296 perslab 3542slab class 7:chunk size 376 perslab 2788slab class 8:chunk size 472 perslab 2221slab class 9:chunk size 592 perslab 1771slab class 10:chunk size 744 perslab 1409factor=2factor=1.25建议:计算一下数据的预期平均长度,调整factor,以获得最恰当的设置46根据数据分布调整factor非均匀分布,即数据长度集中在几个

40、区域内如保存用户Session更极端的状态是等长数据如定长键值,定长数据多见于访问、在线统计或执行锁计算Item长度key键长suffix+value值长结构大小(32字节)47调优的最高指示精神提高内存利用率,减少内存浪费提高命中率(80%,95%?)调优方法:f参数:factor增长因子 n参数:chunk初始值 48一切都是为了更快低CPU消耗(瓶颈在于网络IO)libevent事件机制 slab内存预分配机制适合使用大量低CPU的机器搭建集群 32位机器最大2GB,64GB无限制-m分配内存为数据区,memcached本身也需要占用内存,因此不可将物理内存全部分配 使用连接池维持连接4

41、9因为优秀,所以不足Cant dump无法备份,重启无法恢复Cant iterate over keys无法查询Not persistent没有持久化,重启全部丢失Not redundant单点故障failoverNo Sessions崩溃没法查找原因No security任何机器都可以telnet,需要放在防火墙后内存问题LRU是slab局部,没有全局有空间浪费日志问题没有合理的日志集群问题集群增加机器成本高50改进计划扩展二进制协议 不需要文本解析,速度更快 减少文本协议的漏洞外部引擎加载功能 MySQL plugin514.Memcached分布式52Memcached使用方式 -客户端

42、实现Hash53Memcached架构层次 -减少DB访问,提高Web速度54添加对象时55获取对象时56最常用的Hash算法根据余数计算Hash 如Perl函数库:Cache:Memcached 优点:简单、分散性优秀 缺点:添加/移除服务器时,缓存重组代价巨大,影响命中率 26个字母由3个节点增加一个节点,命中率下降了23%三个节点:node1 node2 nod3node1:a,c,d,e,h,j,n,u,w,xnode2:g,i,k,l,p,r,s,ynode3:b,f,m,o,q,t,v,z四个节点:node1 node2 node3 node4node1:d,f,m,o,t,vno

43、de2:b,i,k,p,r,ynode3:e,g,l,n,u,wnode4:a,c,h,j,q,s,x,z增加节点57Consistent Hash参考原文:alpha.mixi.co.jp/?p=158http:/hyuki/yukiwiki/wiki.cgi?ConsistentHashing58添加服务器时Consistent Hashing最大限度地抑制了键的重新分布有的Consistent Hashing的实现方法还采用了虚拟节点的思想59支持Consistent Hash的函数库libketama的PHP库 libketama(网站Last.fm)Perl客户端 Cache:Mem

44、cached:Fast(search.cpan.org)Cache:Memcached:libmemcached(search.cpan.org)605.key-value系统比较61兼容memcached软件repcached 为memcached提供复制(replication)功能的patch 单master单slave,互为主辅Flared 存储到QDBM。实现了异步复制和fail over等功能memagent 连接多个memd,实现一致性Hash,请求转发memcachedb 存储到BerkleyDBTokyo Tyrant 存储到Tokyo Cabinet。与memcached协

45、议兼容,能通过HTTP访问62持久化key-value系统Memcachedb持久化BerkelyDB-Sina 主服务器可读写、辅服务器只读 同步日志文件非常大,需人工定期清理Tokyo TyrantTokyo Cabinet持久化-mixi.jp 优点 读写4-5w/s,写100万0.643秒,读100万0.773秒,是BerkeleyDB 的几倍 双机互为主辅模式,主辅库均可读写 具有故障转移、日志文件体积小、大数据量下表现出色等优势 缺点 TC在32位下数据库单个文件2GB,64位无限制 没有scale的能力,只能主从复制 TC性能会随数据量的增加而下降,上亿条下降较明显Nuclear

46、-renren 一致性Hash,动态增加/删除节点63持久化Redis定期异步把数据库flush到硬盘,比Memcached多一个永久存储功能,优点 读写10w/s,是性能最快的Key-Value DB 最大魅力:支持List链表和Set集合,对List/Set各种操作 单个value的最大限制是1GB,memcached只能保存1MB主要缺点 容量受物理内存限制,不能用作海量数据的高性能读写 不具有scaleRedis适合的场景 较小数据量的高性能操作和运算上 使用Redis的网站有github,Engine Yard64分布式数据库 CouchDB持久化 Cassandra分布式/NoSQL/scale 适合于实时数据处理 MongoDB分布式/NoSQL BigTable/Hbase 适合于数据仓库、大型数据的处理与分析65memcached测试66memd&memdb67memdb/TT/redis测试500w+100byte read/write68memdb/TT/redis测试50w+20k read/write696.Memcached客户端70Java客户端 spymemcached danga taobao client dal

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|