Linux云计算架构-系统调优【CPU、IO、网络、内核参数调优】 客官°小女子只卖身不卖艺 2022-12-20 01:58 214阅读 0赞 ### 文章目录 ### * Linux云计算架构-系统调优【CPU、IO、网络、内核参数调优】 * * 1. CPU调优 * 2. IO调优 * 3. 网络调优 * * 3.1 网络冗余(主备模式) * 3.2 负载均衡模式 * 4. 内核参数调优 # Linux云计算架构-系统调优【CPU、IO、网络、内核参数调优】 # ## 1. CPU调优 ## **①进程优先级调整**:使用top命令查看优先级,NI列表示优先级。优先级范围从高到低为`[-20,19]`,默认是0。NI即nice,可以看作老好人,值越大,说明比较好人,占用cpu的时间就越少,优先级就越低。 **提高优先级,降低数值大小;降低优先级,提高数值大小;** ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center] **②设置进程的cpu亲和力**:在多核cpu的情况下,某一进程的运行会在多个cpu核心上切换,cpu上下文切换会带来额外的开销。设置进程的cpu亲和力,即将进程绑定到某个指定的cpu核心上,不进行cpu上下文切换。 **cpu上下文切换**:每个进程在使用某个cpu核心时,会把所需的数据先写入到cpu的缓存(寄存器)中,然后cpu再根据缓存中的数据进行运算。**cpu上下文切换即是指cpu寄存器中数据的写入和读出。** # 使用xshell打开两个终端做测试 # 一个终端打开文件a.txt,生成一个进程 [root@monitor ~]# vim a.txt # 另一个终端查看进程占用资源情况 [root@monitor ~]# ps aux | grep a.txt root 10672 0.1 0.2 151808 5388 pts/1 S+ 19:18 0:00 vim a.txt root 10720 0.0 0.0 112724 996 pts/2 S+ 19:18 0:00 grep --color=auto a.txt # 可以看到进程10672在8个cpu核心上都可以运行 [root@monitor ~]# rpm -qf `which taskset` util-linux-2.23.2-59.el7.x86_64 [root@monitor ~]# taskset -cp 10672 pid 10672's current affinity list: 0-7 # 指定cpu核心运行进程 [root@monitor ~]# taskset -c 1,3 vim b.txt [root@monitor ~]# ps aux | grep b.txt root 10799 0.0 0.2 151808 5388 pts/2 S+ 19:25 0:00 vim b.txt root 10801 0.0 0.0 112724 1000 pts/1 S+ 19:25 0:00 grep --color=auto b.txt [root@monitor ~]# taskset -cp 10799 pid 10799's current affinity list: 1,3 **③使用vmstat查看系统瓶颈**: # 查看系统整体情况,在机器运行较慢时不建议使用top查看,建议使用vmstat查看 [root@monitor ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 8456 384712 36 744960 0 0 37 18 29 32 0 0 99 0 0 ==进程==================== r 运行状态的进程个数。展示了正在执行和等待cpu资源的任务个数。当这个值长期大于cpu核心数的3倍,就会出现cpu瓶颈。 b 不可中断睡眠、正在进行IO等待、阻塞状态的进程个数 ==内存==================== swpd 使用交换(虚拟)内存的大小,值越大,说明物理内存遇到瓶颈,比较紧张。值大于0,只能说使用了虚拟内存,不代表物理内存使用紧张。 free 空闲的物理内存大小,单位kb buff 内存从磁盘读出的内容【磁盘到内存】 cache 内存要写入磁盘的内容【内存到磁盘】值越大,说明在cache的文件越多,当频繁访问cache中的文件时,磁盘的读写IO会很小,即基本没有对磁盘进行读写,只在内存中进行读写。 ==交换内存================ si swapin换入内存【磁盘到虚拟内存】值大于0,表示物理内存不够用或内存泄漏了。 so swapout换出内存【虚拟内存到磁盘】值大于0,表示物理内存不够用或内存泄漏了。 # si和so在内存足够时值为0,当free值很小时,要看si和so的值是否是0,若是0,则系统性能不会因为free小而受影响。 ==IO===================== bi blockin 从硬盘往内存读的大小 bo blockout 从内存往硬盘写的大小 ==system系统============== in 每秒中断次数,包括时钟中断 cs 每秒上下文切换次数,cpu调度次数越多,cs越大。该值越小越好。 us 系统用户进程使用百分比 sy 内核中的进程占用百分比,当sy值较高时,要检查原因,是不良表现。 id 空闲的cpu百分比 wa cpu等待I/O完成的时间,值越大,说明IO等待比较严重,机器IO性能就越差。 st 虚拟机占用cpu的时间,也称作虚拟机偷取物理内存的时间。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 1] 数据解读: 1、r列进程数为0或1,说明当前系统运行的进程较少。8核心cpu,r的值大于24才认为cpu繁忙。 2、free值为381880KB,大约372MB,内存较少但还是够用的。 3、swap交换内存数据si和so都是0,说明没有使用到交换内存。即物理内存还是够用的。若物理内存不够了,要加内存。 4、IO数据,若bi大,则说明从硬盘读出到内存的数据比较大。若bo大,则说明从内存写入到硬盘的数据比较大。 5、us值越小,id值越大说明系统性能较好,毫无压力。 6、wa值越大,说明cpu等待IO完成的时间比较长,即机器IO性能较差。 其他说明: 1、当系统处于高并发访问时,会消耗cpu,即正在运行的进程数一般会大于3倍cpu核心数。若此时wa值为0,即不存在因IO性能问题占用cpu的时候,故可以认为此时一直都在消耗cpu。可以通过ps或top命令查看进程使用cpu的情况。 ## 2. IO调优 ## **①限制用户运行的最大进程数和单个进程能打开的最大文件数:** # 查看最多可以打开的文件数 [root@master ~]# ulimit -n 1024 # 临时生效 [root@master ~]# ulimit -n 102400 [root@master ~]# ulimit -n 102400 # 修改用户运行的最大进程数和单个进程打开的最大文件数,重新开启新的终端即可生效。 # *为通配符,指所有用户。 [root@master ~]# vim /etc/security/limits.conf * soft noproc 102400 * hard noproc 102400 * soft nofile 102400 * hard nofile 102400 # 限制用户运行的最大进程数,功能同上。 [root@monitor ~]# cat /etc/security/limits.d/20-nproc.conf # Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 4096 root soft nproc unlimited **②查看所有的资源限制信息**: [root@monitor ~]# ulimit -a core file size (blocks, -c) 0 # kdump转储功能打开后产生的core file大小限制 data seg size (kbytes, -d) unlimited # 数据段大小限制 scheduling priority (-e) 0 file size (blocks, -f) unlimited # 文件大小限制 pending signals (-i) 7144 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 102400 # 单个进程可打开的文件个数限制 pipe size (512 bytes, -p) 8 # 管道大小的限制 POSIX message queues (bytes, -q) 819200 # 消息队列大小 real-time priority (-r) 0 stack size (kbytes, -s) 8192 # 栈大小 cpu time (seconds, -t) unlimited # cpu时间使用限制 max user processes (-u) 7144 # 最大的用户进程数限制 virtual memory (kbytes, -v) unlimited # 虚拟内存限制 file locks (-x) unlimited ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 2] **③测试硬盘的读写速度**: =============================读速度测试=============================================== # 硬盘读速度测试工具 [root@monitor ~]# rpm -qf `which hdparm` hdparm-9.43-5.el7.x86_64 # 3s从硬盘中读取数据3118MB,平均读取速度为1039.24MB [root@monitor ~]# hdparm -t --direct /dev/sda /dev/sda: Timing O_DIRECT disk reads: 3118 MB in 3.00 seconds = 1039.24 MB/sec ============================写速度测试================================================= # 使用dd命令创建一个文件,测试写速度。 [root@monitor ~]# dd if=/dev/zero of=test.dbf bs=1M count=1000 oflag=direct,nonblock 记录了1000+0 的读入 记录了1000+0 的写出 1048576000字节(1.0 GB)已复制,1.28078 秒,819 MB/秒 oflag=direct 读写数据直接采用IO方式,即直接从内存写入硬盘中,不走缓存。 nonblock 读写数据采用非阻塞IP方式,绕开缓存,测试写更准确。 # 在生产环境,建议使用hdparm命令测试硬盘读速度,使用dd命令测试写速度。 ============================计算命令运行时间============================================= [root@monitor ~]# time dd if=/dev/zero of=test.dbf bs=1M count=1000 oflag=direct,nonblock 记录了1000+0 的读入 记录了1000+0 的写出 1048576000字节(1.0 GB)已复制,1.79318 秒,585 MB/秒 real 0m1.797s # 实际时间>cpu时间=用户cpu时间+系统cpu时间 user 0m0.001s # 用户cpu时间 sys 0m1.466s # 系统cpu时间 ## 3. 网络调优 ## **网卡绑定(bonding)技术**:网卡绑定,也称为网卡捆绑。是将多块物理网卡虚拟成一块网卡,以提供**负载均衡**和**网络冗余**。 ### 3.1 网络冗余(主备模式) ### **①配置两张网卡,都为桥接模式。IP地址分别为:`192.168.8.134`和`192.168.8.133`。** ![在这里插入图片描述][20201109205320614.png_pic_center] **②配置`bond0`虚拟网卡设备,首先应该移除原来的网卡配置文件。** ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 3] **③修改bond0网卡配置文件:** ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 4] **④绑定网卡`ens32`和网卡`ens34`到`bond0`:** [root@master ~]# nmcli connection add type bond-slave ifname ens32 master bond0 连接“bond-slave-ens32-1”(68baaf69-7088-4491-9c4a-d275b3e67eda) 已成功添加。 [root@master ~]# nmcli connection add type bond-slave ifname ens34 master bond0 连接“bond-slave-ens34-1”(6babfeba-6eeb-4795-8da9-2357efc3b775) 已成功添加。 [root@master ~]# ll /etc/sysconfig/network-scripts/ifcfg-* -rw-r--r--. 1 root root 418 11月 9 21:13 /etc/sysconfig/network-scripts/ifcfg-bond0 -rw-r--r--. 1 root root 127 11月 9 21:13 /etc/sysconfig/network-scripts/ifcfg-bond-slave-ens32-1 -rw-r--r--. 1 root root 127 11月 9 21:13 /etc/sysconfig/network-scripts/ifcfg-bond-slave-ens34-1 -rw-r--r--. 1 root root 254 8月 24 2018 /etc/sysconfig/network-scripts/ifcfg-lo **⑤重启网络,查看bond0的状态:** [root@master ~]# systemctl restart network # 查看当前已激活的网络接口 [root@master ~]# nmcli connection show --active NAME UUID TYPE DEVICE bond0 6f518bf7-4fcc-44ab-8cf6-77cd1a1cd3c9 bond bond0 bond-slave-ens32-1 68baaf69-7088-4491-9c4a-d275b3e67eda ethernet ens32 bond-slave-ens34-1 6babfeba-6eeb-4795-8da9-2357efc3b775 ethernet ens34 virbr0 a6da33ae-d4f3-4c30-81a0-cf12820e46a9 bridge virbr0 # 查看bond0的运行状态 [root@master ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) # bonding模式,这里是主备模式 Primary Slave: ens32 (primary_reselect always) Currently Active Slave: ens32 # 当前使用的网卡是ens32 MII Status: up # 连接状态 MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: ens32 # 绑定在bond0的网卡ens32 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:d2:f7:ec Slave queue ID: 0 Slave Interface: ens34 # 绑定在bond0的网卡ens34 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:d2:f7:f6 Slave queue ID: 0 **⑥测试bond0主备模式的高可用:** 模拟故障,断开ens32的网络连接: ![在这里插入图片描述][202011092125237.png_pic_center] [root@master ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: ens32 (primary_reselect always) Currently Active Slave: ens34 # 可以看到当前使用的网卡为ens34 MII Status: up # 连接状态正常 MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: ens32 MII Status: down Speed: Unknown Duplex: Unknown Link Failure Count: 1 # 连接失败数:1 Permanent HW addr: 00:0c:29:d2:f7:ec Slave queue ID: 0 Slave Interface: ens34 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:d2:f7:f6 Slave queue ID: 0 重新连接ens32网卡,然后重启网络服务: ![在这里插入图片描述][20201109213008918.png_pic_center] [root@monitor ~]# systemctl restart network # 在虚拟机上重启网络服务,否则在ens32重连之后,是无法使用xshell连接上的。 [root@master ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: ens32 (primary_reselect always) Currently Active Slave: ens32 # 可以看到,正在使用的又变成了ens32 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: ens32 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:d2:f7:ec Slave queue ID: 0 Slave Interface: ens34 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:d2:f7:f6 Slave queue ID: 0 **总结下**:bondind绑定技术实现网卡的主备模式高可用,当一块网卡损坏时,会由另一块备用网卡顶替,保证服务不中断。但存在一个不人性化的问题,若修复了损坏的网卡设备,要让该网卡重新绑定到bond0上,**需要在虚拟机上重启网络服务,否则使用xshell是无法连接上的。** ### 3.2 负载均衡模式 ### **①配置负载均衡模式的bond0:** # 在删除所有的网卡配置文件后,创建bond0网卡设备 [root@master ~]# nmcli connection add type bond ifname bond0 con-name bond0 miimon 100 mode balance-rr ip4 192.168.8.133/24 [root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0 [root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0 BONDING_OPTS="miimon=100 mode=balance-rr" TYPE=Bond BONDING_MASTER=yes PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none IPADDR=192.168.8.133 PREFIX=24 GATEWAY=192.168.8.1 # 加进去 DNS1=8.8.8.8 # 加进去 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=bond0 UUID=828d6d72-523b-4b51-b738-8116ab14261b DEVICE=bond0 ONBOOT=yes **②绑定网卡`ens32`和网卡`ens34`到`bond0`:** [root@master ~]# nmcli connection add type bond-slave ifname ens32 master bond0 连接“bond-slave-ens32”(59da2797-6c13-4e19-b00c-c2add67a526c) 已成功添加。 [root@master ~]# nmcli connection add type bond-slave ifname ens34 master bond0 连接“bond-slave-ens34”(5495ea02-e9fb-40f1-969f-a7be6e77fffb) 已成功添加。 [root@master ~]# ll /etc/sysconfig/network-scripts/ifcfg-bond* -rw-r--r--. 1 root root 401 11月 9 21:54 /etc/sysconfig/network-scripts/ifcfg-bond0 -rw-r--r--. 1 root root 125 11月 9 21:58 /etc/sysconfig/network-scripts/ifcfg-bond-slave-ens32 -rw-r--r--. 1 root root 125 11月 9 21:59 /etc/sysconfig/network-scripts/ifcfg-bond-slave-ens34 [root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond-slave-ens32 TYPE=Ethernet NAME=bond-slave-ens32 UUID=59da2797-6c13-4e19-b00c-c2add67a526c DEVICE=ens32 ONBOOT=yes MASTER=bond0 SLAVE=yes [root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond-slave-ens34 TYPE=Ethernet NAME=bond-slave-ens34 UUID=5495ea02-e9fb-40f1-969f-a7be6e77fffb DEVICE=ens34 ONBOOT=yes MASTER=bond0 SLAVE=yes **③重启网络,查看bond0的状态:** [root@master ~]# systemctl restart network [root@master ~]# nmcli connection show --active NAME UUID TYPE DEVICE bond0 828d6d72-523b-4b51-b738-8116ab14261b bond bond0 bond-slave-ens32 59da2797-6c13-4e19-b00c-c2add67a526c ethernet ens32 bond-slave-ens34 5495ea02-e9fb-40f1-969f-a7be6e77fffb ethernet ens34 virbr0 a6da33ae-d4f3-4c30-81a0-cf12820e46a9 bridge virbr0 [root@master ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: load balancing (round-robin) # 负载均衡,轮询 MII Status: up # 连接状态 MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: ens32 # 绑定在bond0的网卡ens32 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:d2:f7:ec Slave queue ID: 0 Slave Interface: ens34 # 绑定在bond0的网卡ens34 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:d2:f7:f6 Slave queue ID: 0 **④测试bonding负载均衡:** [root@master ~]# watch cat /proc/net/dev 可以看到ens32和ens34都在使用。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 5] ## 4. 内核参数调优 ## ①**预防以及解决DDOS洪水攻击**: # 修改/etc/sysctl.conf配置文件为以下参数,可有效预防DDOS洪水攻击。在服务器上线之前,都应该配置如下内核参数。 [root@monitor ~]# vim /etc/sysctl.conf net.ipv4.tcp_synack_retries = 0 # 当发送SYN+ACK握手包给客户端时,若收不到客户端发送的ACK确认,服务端则不重发SYN+ACK握手包,加快半连接的回收,不耗光资源。默认为重发5次,每次等待30-40s,即半连接状态会保持180s左右才会断开连接。 net.ipv4.tcp_syn_retries = 1 # 客户端重发SYN握手包的次数 net.ipv4.tcp_max_syn_backlog = 20480 # 半连接队列长度 net.ipv4.tcp_syncookies = 0 # 关闭当出现半连接溢出时,向对方发送syncookies的功能 ,1为打开,在外网环境不要打开。 net.ipv4.tcp_tw_reuse = 0 # 关闭TIME_WAIT状态的连接重用功能,1为打开,在外网环境不要打开。 net.ipv4.tcp_tw_recycle = 0 # 关闭TIME_WAIT状态的连接回收功能,1为打开,在外网环境不要打开。 net.ipv4.tcp_fin_timeout = 10 # TCP保持在FIN_WAIT_2状态的时间 fs.file-max = 819200 # 系统允许的文件句柄的最大数目,因为连接需要占用文件句柄 net.core.somaxconn = 65535 # 用来应对突发的大并发connect 请求 net.core.rmem_max = 1024123000 # 最大的TCP 数据接收缓冲(字节) net.core.wmem_max = 16777216 # 最大的 TCP 数据发送缓冲(字节) net.core.netdev_max_backlog = 165536 # 网络设备接收数据包的速率比内核处理数据包的速率快时,允许送到队列的数据包的最大数目 net.ipv4.ip_local_port_range = 10000 65535 # 本机主动连接其他主机时的端口分配范围 ================================================================================================ # 具体内核参数文件: [root@master ~]# cd /proc/sys/ [root@master sys]# ll 总用量 0 dr-xr-xr-x. 1 root root 0 11月 9 22:51 abi dr-xr-xr-x. 1 root root 0 11月 9 20:26 crypto dr-xr-xr-x. 1 root root 0 11月 9 22:51 debug dr-xr-xr-x. 1 root root 0 11月 9 22:51 dev dr-xr-xr-x. 1 root root 0 11月 9 20:26 fs dr-xr-xr-x. 1 root root 0 11月 9 20:26 kernel dr-xr-xr-x. 1 root root 0 11月 9 20:26 net dr-xr-xr-x. 1 root root 0 11月 9 22:51 sunrpc dr-xr-xr-x. 1 root root 0 11月 9 22:51 user dr-xr-xr-x. 1 root root 0 11月 9 20:26 vm # 查看net.ipv4.ip_local_port_range的值: [root@master sys]# cat ./net/ipv4/ip_local_port_range 32768 60999 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center]: /images/20221120/2b011c77339942ed8c2cb88d1ea17a52.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 1]: /images/20221120/325429b156eb4101b3f53f8973d83b9f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 2]: /images/20221120/b52280756a54469eb10ce15206e56747.png [20201109205320614.png_pic_center]: https://img-blog.csdnimg.cn/20201109205320614.png#pic_center [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 3]: https://img-blog.csdnimg.cn/20201109210213663.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ==,size_16,color_FFFFFF,t_70#pic_center [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 4]: https://img-blog.csdnimg.cn/20201109210509226.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ==,size_16,color_FFFFFF,t_70#pic_center [202011092125237.png_pic_center]: https://img-blog.csdnimg.cn/202011092125237.png#pic_center [20201109213008918.png_pic_center]: https://img-blog.csdnimg.cn/20201109213008918.png#pic_center [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ_size_16_color_FFFFFF_t_70_pic_center 5]: https://img-blog.csdnimg.cn/20201109221122876.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjUyMjA5OQ==,size_16,color_FFFFFF,t_70#pic_center
还没有评论,来说两句吧...