关于Linux性能分析小结

Linux 系统性能瓶颈分析(超详细) Linux 系统性能瓶颈分析(超详细)。 阅读详情

前言

Netflix技术博曾经发表过一篇文章——《Linux performance analysis in 60000 milliseconds》。在这篇文章中,Netflix公司介绍了10个重要的Linux命令,用于在发现问题的前60秒内快速分析定位问题。这10个命令涉及系统错误、资源饱和率、资源占用率等指标查看。

uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top

该文章还提到了分析系统性能问题时常用的一套方法:USE。该方法主要从资源使用率(Utilization)、资源饱和度(Satuation)、错误(Error)这3个角度,对CPU、内存、磁盘等资源进行分析。可以帮助我们缩写问题范围,给下一步定位问题提供更明确的方向。

uptime

这个命令主要用于查看系统运行时间。

[test@localhost ~]$ uptime
 23:38:48 up  4:59,  1 user,  load average: 0.01, 0.02, 0.05

各字段说明如下:

  • 23:38:48 : 代表系统开机时间。
  • 4:59 : 代表当前系统已运行1小时52分。
  • 2 users : 代表当前登录到系统的会话一共2个,注意,这里不是用户,而是会话。
  • load average: 0.01, 0.02, 0.05 : 过去1分钟、5分钟、15分钟内的平均负载。

可以通过负载因子大致判断出当前有多少任务在等待运行。在Linux系统中,这包含了想要或者正在使用CPU的任务,以及在I/O上阻塞的任务。

dmesg | tail

dmesg可以用于查看系统启动后所输出的一系列重要日志。添加tail后,可用于查看最新的几条系统日志。

$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP co

例如,上面输出的oom-killer、SYN flooding均为重要的系统日志。

vmstat 1

[test@localhost ~]$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 15617080    948 329292    0    0     4     1    6    8  0  0 100  0  0
 0  0      0 15617204    948 329292    0    0     0     0   48   66  0  0 100  0  0
 0  0      0 15617204    948 329292    0    0     0     0   32   52  0  0 100  0  0
 0  0      0 15617204    948 329292    0    0     0     0   41   66  0  0 100  0  0
 0  0      0 15617328    948 329292    0    0     0     0   45   65  0  0 100  0  0
 0  0      0 15617328    948 329292    0    0     0     0   47   69  0  0 100  0  0
 0  0      0 15617328    948 329292    0    0     0     0   33   56  0  0 100  0  0
 0  0      0 15617328    948 329292    0    0     0     0   42   64  0  0 100  0  0
 0  0      0 15617328    948 329292    0    0     0     0   30   52  0  0 100  0  0
 0  0      0 15617328    948 329292    0    0     0     0   35   59  0  0 100  0  0
 0  0      0 15617328    948 329292    0    0     0     0   30   54  0  0 100  0  0

vmstat 即virtual memory statistics,主要用于获取系统中进程、内存、磁盘I/O等整体运行状态。如果带参数1,表示每秒输出1次采样结果。各统计项含义如下:

procs标签:

  • r:表示运行队列中进程数量(处于runnable状态的进程数量)。这个值比平均负载能够更好地看出当前CPU是否饱和。如果长期大于CPU(core)个数,则说明当前系统需要增加CPU。
  • b:表示等待I/O的进程数量。

memory标签:

  • swpd:使用虚拟内存大小(即磁盘交换),如果swpd不为0,但是si、so长期为0,则这种情况不会影响系统性能。
  • free:空闲物理内存大小(单位KB)。
  • buff:用于buffer cache的内存大小。一般情况下,对块设备的读写才需要buffer cache。
  • cache:用于page cache的内存大小。一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多。如果此时I/O中bi比较小,则说明文件系统状态良好。

swap标签:(swap in/out)

  • si:每秒由交换区写到内存的大小,由磁盘调入内存。如果非0,说明内存不足。
  • so:每秒写入交换区的内存大小,由内存调入磁盘。如果非0,说明内存不足。

io标签:(block in/out)

  • bi:每秒从块设备读入数据的总量(读磁盘)。
  • bo:每秒向块设备写入数据的总量(写磁盘)。

system标签:

  • in:即interrupt,表示每秒中断次数,包括时钟中断。
  • cs:即context switch,表示每秒上下文切换次数。当上下文切换次数高于磁盘I/O和网络I/O次数时,需要进一步排查。

cpu标签:

  • us:即user time,用户态CPU时间百分比。如果us值比较高,说明进程在用户态消耗时间较多,但如果长期大于50%,需考虑优化用户程序。
  • sy:即system time,内核态CPU时间占比。此处us+sy百分比参考值为80%,如果大于80%说明可能存在CPU不足。
  • wa:即wait time,即I/O等待的时间占比。此处wa的参考值为30%,如果超过30%,说明I/O等待严重,这可能是大量磁盘随机访问造成,也可能是磁盘或磁盘访问控制器的带宽瓶颈造成(块操作)。注意,这个时间也包含在了id(idle time)里面,相当于另一种形式的CPU空闲。
  • id:即idle time,即CPU处于空闲状态的时间占比。

mpstat -P ALL 1

即multi-processor Statistics。其中-P ALL表示监控所有CPU,1表示1秒输出1次统计信息。相对于vmstat,mpstat可以输出指定CPU的统计信息。

[test@localhost ~]$ mpstat 1
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain)     2018年08月18日  _x86_64_        (4 CPU)

08时44分54秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08时44分55秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
08时44分56秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
08时44分57秒  all    0.00    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.75
08时44分58秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
08时44分59秒  all    0.00    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.75
08时45分00秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

各字段说明如下:

  • %usr:指定时间间隔内,用户态时间占比,不包含nice值为负的进程。
  • %nice:指定时间间隔内,nice值为负的进程的运行时间占比。
  • %sys:指定时间间隔内,内核态时间占比。
  • %iowait:指定时间间隔内,磁盘I/O等待时间占比。
  • %irq:指定时间间隔内,硬件中断处理时间占比。
  • %soft:指定时间间隔内,软件中断处理事件占比。
  • %steal:指定时间间隔内,虚拟机管理程序服务另一个虚拟处理器时虚拟CPU或CPU无意中等待的时间占比。
  • %guest:指定时间间隔内,显示CPU或CPU运行虚拟处理器所花费的时间占比。
  • %idle:指定时间间隔内,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间。

pidstat 1

和top不同,pidstat可以用于滚动输出系统中全部或指定进程相关统计信息。

[test@localhost ~]$ pidstat 1
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain)     2018年08月18日  _x86_64_        (4 CPU)

09时21分30秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09时21分31秒  1001     10999    0.00    1.00    0.00    1.00     3  pidstat

其中,重要的命令行参数如下:

-p:统计指定进程的相关信息。

-r:显示缺页错误和内存使用率。重要的标签如下:
1. PID:进程标识。
2. minflt/s:每秒次缺页总数,次缺页错误次数是指虚拟内存地址映射成物理内存地址产生的page fault次数,不需要从磁盘加载内存页。
3. majflt/s:每秒主缺页总数,当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生,需要从磁盘加载内存页。
4. VSZ:虚拟内存大小,以kb为单位进行统计。
5. RSS:物理内存大小,以kb为单位进行统计。

-u:统计CPU使用率。重要的标签如下:
1. PID:进程标识。
2. %usr:用户态任务占用CPU百分比。
3. %system:内核态任务占用CPU百分比。
5. %CPU:任务占用CPU百分比。
6. CPU:任务绑定的处理器编号。

-w:报告指定进程上下文切换情况。重要标签如下:
1. PID:进程标识。
2. cswch/s:任务每秒引发的自愿上下文切换,即因进程所需要的资源未就绪而产生的上下文切换。
3. nvcswch/s:任务每秒引发的非资源上下文切换,即操作系统强制当前进程放弃时间片,并转而执行另一任务。

-t:按照线程粒度进行统计。重要标签如下:
1. TGID:线程组leader标识。
2. TID:被监控的线程标识。

-d:I/O统计报告,重要标签如下:
1. kB_rd/s:每秒从磁盘读入的字节数,单位kb。
2. kB_wr/s:每秒向磁盘写入的字节数,单位kb。
3. kB_ccwr/s:每秒写入磁盘被取消的数量,单位kb。

iostat -xz 1

iostat可以用于提供丰富的磁盘I/O状态统计数据,是理解当前磁盘工作负载和性能的重要工具。其中比较重要的命令行参数、统计项如下:

-x:输出详细的I/O信息。

rrqm/s:每秒对磁盘读请求被合并次数,文件系统会对读取同块的请求进行合并。
wrqm/s:每秒对该设备的写请求被合并次数。
r/s:每秒完成的读次数。
w/s:每秒完成的写次数。
rkB/s:每秒读数据量(kB为单位)。
wkB/s:每秒写数据量(kB为单位)。
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)。
avgqu-sz:平均等待处理的I/O请求队列长度。
await:平均每次I/O请求等待时间(包括等待时间和处理时间,毫秒为单位)。
svctm:平均每次I/O请求的处理事件(毫秒为单位)。
%util:采用周期内用于I/O操作的时间比率,即I/O队列非空的时间比率。

在进行问题分析时,我们往往需要关注以下几个问题:

  1. I/O请求队列是否过长?(avgqu-sz)
  2. I/O size是否过大或者过小?(avgrq-sz)
  3. 是否造成I/O等待过长?(await)
  4. 每个I/O处理事件是否过长?(svctm,该值有可能不准确)
  5. 磁盘压力是否过大?(%util,反映磁盘繁忙程度)

一个典型案例如下图所示(下图来源于知乎)。该图为数据库服务器执行iostat命令后的结果,当时大约有100人并发执行,每一个效率都很低。

从数据报告可以看到,avgqu-sz(平均等待处理的I/O请求队列)长度为0,未出现I/O等待。而%user为74.40,说明瓶颈不在I/O,故应该是执行了CPU密集型业务,很可能是因为系统存在大量无索引的SQL查询,而导致CPU飙高。

【Android】性能分析工具:开篇 There are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns – the... 阅读详情

相关推荐

第21章 性能分析与优化实战

先定义测试所需的通用结构(如自定义value结构体、随机数生成),确保优化前后测试环境一致。// 缓存行大小(x86架构默认64字节)64// 测试数据量1000000// 查找请求量1000000// 自定义value结构体(优化前未对齐,优化后按64字节对齐)// 优化前:未对齐的结构体int id;// 4字节// 32字节// 8字节// 8字节// 总大小:4+32+8+8=52字节(未对齐,可能跨缓存行)// 优化后:按缓存行对齐的结构体(补全至64字节)

老韩的Linux云计算架构师进阶之路 1017

Linux系统性能分析

Linux系统性能分析

m0_75233142的博客 2590

PAPI:使用PAPI对程序进行性能分析(1)

PAPI 是非常好的性能测试工具,使用十分方便。对于分析程序的性能提供很好的依据。 下面对使用PAPI 做一个小结。 (1)Build PAPI on Linux 在PAPI主站上下载最新的tar包,解压缩,然后进入到papi文件夹下的src文件夹下: ./configure–prefix=${PAPI_HOME} make make test make install 设

Antonia 4750

Linux性能分析

文章目录1. 性能分析1.1 常用命令uptimempstatpidstat1.2 系统压测stress 1. 性能分析 1.1 常用命令 uptime 查询当前系统登录用户,以及系统平均负载(平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数) uptime 19:11:03 up 147 days, 2:02, 2 users, load average: 0.27, 0.07, 0.02 分别为: 当前时间,系统目前登录用户数,系统 1分钟前,5分

跟派大星学编程 2181

1、驱动性能分析与优化--性能分析基础

驱动性能,就是驱动程序在硬件和软件之间传递数据时,跑得有多快、有多稳、有多省资源。我习惯把驱动比作一个「快递员」。硬件是仓库,应用层是客户。快递员(驱动)要做的就是把货(数据)从仓库搬到客户手里。送货快不快—— 延迟和吞吐量累不累—— CPU占用率会不会丢件—— 稳定性如果一个快递员送货很快,但每次都要把整个仓库的货全搬出来再挑,CPU(也就是他自己)累得半死,那这个驱动设计就是有问题的。驱动性能不是单一维度的快,而是延迟、吞吐量、CPU占用率三者之间的平衡艺术。

woailuojp的博客 16

从BIOS到路由器:深入拆解SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)奥秘

本文深入解析SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)技术,从BIOS到路由器的应用场景出发,详细介绍了其架构精髓、典型连接方案、时序设计及性能优化方法。通过实际案例和参数对比,帮助开发者掌握NOR Flash在嵌入式系统中的关键作用与设计技巧,提升电路设计效率与可靠性。

weixin_30522183的博客 492

(一文了解)linux性能分析之CPU篇

目录 前言 一、CPU 性能指标 1、CPU使用率 2、负载均衡 3、上下文切换 4、CPU缓存命中率 二、常用工具 1、uptime 2、vmstat 3、mpstat 4、top 5、sar 6、pidstat 7、cat /proc/sotfirqs 三、分析CPU性能瓶颈方法 分析举例 四、性能调优 1,编译器选项 2、进程绑定 3,独占CPU组 前言 本文介绍linux性能优化CPU相关的知识点,首先介绍了CPU相...

1万+

机器人强化学习入门学习笔记

如果你追求高精度动力学仿真、用于强化学习或机器人研究,MuJoCo 是一个非常优秀的选择。如果需要快速实验、使用真实机器人模型,PyBullet 或 Gazebo可能更合适;如果你追求大规模并行训练,Isaac Gym 或 BraX会更高效。legged gym底层是​编辑isaacgym,基于gpu训练可以多环境并行训练,收敛到一个稳定行走的策略快。本视频MuJoCo基于cpu训练很慢。

xiaomu_347的博客 1462

linux 文件系统及磁盘性能分析命令小结

文件系统分析: iostat strace free top vmstat sar slabtop /proc/meminfo df mount ###ps: 待续… 磁盘性能: iostat # iostat Linux 3.10.0-123.el7.x86_64 (mirror) 07/07/2019 _x86_64_ (1 CPU) avg-cpu:...

comprel的博客 545

win11本地部署openclaw实操第5集-X11图形化界面搭建,让WSL2“看见”世界

本文介绍了在WSL2中实现图形界面(GUI)的方法。由于WSL2默认没有图形界面,需要使用X11服务器作为"翻译显示器",将Linux程序的图形指令渲染到Windows窗口中。推荐使用VcXsrv作为X11服务器,详细说明了其安装和配置步骤,包括选择"One large window"显示模式、禁用访问控制等关键设置。随后在Ubuntu中安装轻量级xfce4桌面环境,并通过设置DISPLAY环境变量将图形输出指向VcXsrv。最终通过startxfce4命令成功在Vc

weixin_44626085的博客 811

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

zhulewen的博客 7883

MySQL性能分析方法小结

MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,利用一些Linux常用的命令来查看Mysql对服务器的CUP和I/O使用情况,通过慢查询日志找出有待优化的sql,通过show processlist查看正在执行的sql的情况以及及时kill死锁的sql,通过EXPLAIN分析需要优化的sql语句,除此之外,MySQL内部配置参数也做相应的调整和优化。下面具体来看看: 预计阅读时间:8 分...

东晨雨的博客 1719

RP Fiber Power 版本

RP Fiber Power的版本历史 该软件一直受到多年来广泛的发展计划,这大大扩展了其功能,以及用户界面的质量。 V1 这是第1个版本。 它仅限于光纤激光器和放大器的连续波计算,并且只能通过脚本进行控制。 V2 版本2引入了交互式表单。 至少对于更简单的模拟,现在可以简单地通过填写表单来工作,而V1必须通过脚本来控制。 例如,屏幕截图显示了输入某些信号参数的表单: 当您基于这些表单执行计算时,程序将根据您的表单输入自动编写脚本文件,然后执行该脚本。如果您需要编写脚本以获得更大的灵活性,可以稍后查看该脚

Asdmath的博客 2431

Linux服务器性能优化小结

服务器平均负载指的是,某段时间里面,那些处于可运行态或者不可中断状态的进程的平均数。可运行态:见下图,操作系统线程状态中,处于RUNNING或者READY状态的进程就是可运行态。不可中断状态:下图中因为I/O而导致处于WAITING状态的进程。那么他们为什么称为不可中断态呢?原因其实也很简单,IO操作时常将一些数据写回本地,若此时将这个IO操作打断,这就很可能磁盘数据和进程数据不一致的情况。top:查看CPU使用率、平均负载、僵尸进程等。vmstate。

禅与计算机程序设计的艺术 4109

mfcc总结,这个mel三角滤波器分组到底是如何起作用的呢?

先看fft频谱图(这是4096字节取样fft计算,横轴频率是从0到512,后边意义不大,未取,纵轴是振幅),那些我随便画的蓝色线,你有什么联想?: 再看,这绿色线,是否有一种上升后,便逐渐式微的感觉,都是三角形的,这或许也是mel当初和绝大多数人看到的: 如果在振幅上加上一条限制的黑线(振幅门槛限制),黑色线以下很多频率就没有意义了,你看,有用的频率连一半(512/2=256)都占不到...

ganggangwawa的博客 9908

学习海康VisionMaster之圆查找

(1):ROI选中位置修正,并且修正信息需要选择刚刚创建的位置修正组件输出信息,这里的话后续的检测窗口一般都需要做这一步,因为大部分的应用场景都是需要用到实时跟踪的。圆查找模块是用于查找指定区域的圆,并且会输出该圆的相关参数信息,比如圆中心点,圆半径,圆是否存在等信息。7):剔除点数:和高级参数里面的剔除距离搭配使用的,就是过滤较远的边缘点,让拟合圆心出来的轮廓更加接近。中的圆查找,相当于就是拟合圆心,这个在视觉软件中的应用也是非常广泛的,通常用于定位,测量项目。

yuhouxiyang的专栏 2104

Linux系统性能分析与开发经验小结

在Linux中,有各种工具可以用来分析系统性能、网络性能、磁盘I/O、内存使用、CPU性能等。每个工具都擅长不同的分析场景。如果想要监控整体系统性能,可以使用tophtopvmstatdstat。想分析网络性能,可以使用iftopnloadnetstatss。想要进行深度性能分析或调试,则可以使用perfstraceltracebpftrace。通过合理运用这些工具,能够有效发现系统瓶颈,优化系统性能。三款Profiler工具工具GNU gprofValgrindCpuload测试程序。

weixin_42804968的博客 957

【嵌入式DIY实例ESP32篇】-步数计数器

在本项目中,我们将使用 ESP32 微控制器和博世的 BMI160 加速度计陀螺仪模块构建一款便携式计步器

视觉与物联智能 803

Linux程序性能分析和火焰图

Linux程序性能分析和火焰图Linux程序的性能分析工具数量比较多,涉及到整个操作系统的方方面面,可能是开源的原因吧,相对于Windows来说丰富太多。其中应用分析性能方面Dtrace, SystemTap, Perf_events应该算是这方面的集大成者。Dtrace目前只在较高的内核版本有支持,记得是4.8以后, SystemTap则是需要在Red...

weixin_34290000的博客 113

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Linux top小结

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 top参数详解 在这里插入图片描述 第一行,任务队列信息,同 uptime 命令的执行结果 系统时间:07:27:05 运行时间:up 1:57 min, 当前登录用户: 3 user 负载均衡(uptime) load average: 0.00, 0.00, 0.00 average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。 load average数据是每隔5秒

qq_33240556的博客 728

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux CPU占用率监控工具小结

Linux CPU占用率监控工具小结

u010971180的博客 187

linux java火焰图_Linux程序性能分析和火焰图

Linux程序性能分析和火焰图Linux程序的性能分析工具数量比较多,涉及到整个操作系统的方方面面,可能是开源的原因吧,相对于Windows来说丰富太多。其中应用分析性能方面Dtrace, SystemTap, Perf_events应该算是这方面的集大成者。Dtrace目前只在较高的内核版本有支持,记得是4.8以后, SystemTap则是需要在Red Hat的官方网站下载OS版本对应的调试符号...

weixin_30043767的博客 207

Linux基础 -- 内核性能分析之 kprobe 与 kretprobe

kprobe/kretprobe 是内核级的动态探针:不用改内核源码,运行时就能 hook 指定函数。kprobe = 入口拦截;kretprobe = 入口 + 返回成对,可以算耗时,是我们要的。只需开,不用开整套 ftrace 大缓冲。用 kretprobe 钩你的关键函数入口记 start_ns返回记 duration写入我们自己的 per-CPU 小 ring buffer(几十 KB 总占用)用 debugfs 导出来再加 enable 开关来做“按需抓一段窗口”

sz66cm 学习随笔 929

救火必备linux命令小结

原文:http://blog.youkuaiyun.com/cutesource/article/details/6055256 线上查问题的时候有些命令是必备,有必要把一些常用命令总结一下(这类命令和相关参数相当多,只总结自己常用得到的),查找问题一般可以分为系统参数、性能参数、进程、内存、网络、存储、内存和jvm这么几类: 系统参数  cat /proc/cpuinfo  cpu相关参数

仰望星空 脚踏实地 539
上一篇: libco源代码分析(01) -- Closure源代码分析
下一篇: LLVM Language Reference Manual 阅读笔记
MakeZero
博客等级 码龄8年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值