RS/6000系统性能优化分析 

Zephyr、FreeRTOS 和 RT-Thread 你是…更适合用嵌入式新手,刚接触 RTOSFreeRTOS(入门简单)IoT 项目开发,需要 BLE/WiFi/MQTTZephyr(协议全)想快速构建可部署的产品Zephyr(模块统一)只做单个任务或简单状态机控制FreeRTOS(轻量)做平台化、持续集成、自动测试Zephyr(CI 支持强) 阅读详情
计算机系统的性能优化是一个综合性较强的话题,它涉及对系统资源以及应用环境(如应用程序及网络环境)的分析。本文将就如何检测RS/6000系统性能,找出引起性能降低的资源瓶颈做一个简单介绍(注: 本文不涉及由应用程序或网络因素引起的资源瓶颈问题)。 
所谓系统资源包括内存、CPU和输入/输出设备。通过使用以下命令,可以对RS/6000系统资源的负载情况有一个清楚的了解: 
vmstat 
svmon 
ps 
tprof 
iostat 
netpmon 
filemon 
注: 
使用命令vmstat、iostat和sar之前需安装软件包 

bos.acct 
使用命令ps需安装软件包 

bos.rte.control 
使用命令tprof、svmon、netpmon和filemon之前,需要安装软件包 

perfagent.tools 
我们可以从AIX系统盘的第一张光盘上寻找并安装上述软件包。 本文还将引用命令 vmtune 和 schedtune, 使用前需安装软件包 

bos.adt.samples 

内存瓶颈 
本节介绍以下几个用于检测系统的内存使用情况的命令,通过它们可以清楚地了解系统内存的使用及分配情况,确认内存资源是否存在瓶颈。 
1. vmstat 
vmstat命令用于统计并显示核心线程、虚拟内存、硬盘、中断及CPU的使用情况。 
运行命令 
# vmstat 2 10 
注: 当pi和po为连续非零值时,系统运行速度将会降低。 
pi 每秒钟从页空间(Paging Space)调入内存的页面数(4KB/page); 
po 每秒钟从内存调入页空间(Paging Space)的页面数; 
当进程请求的内存页面数大于内存中可用页面数时, 一些内存页会被换出内存, 存放于系统页空间(Paging Space)中, 以后使用时再调入内存。由于访问页空间中页面的速度远小于对内存页面的访问速度,所以频繁的换页会降低系统运行速度。 

注: 当fr和sr的数值增大时,sample明内存负载增大。 
fr 为填充内存空闲sample或分配给某进程所需要释放的内存页面; 
sr 为得到fr数量的空闲页面所需要检查的页面数; 
fr/sr比例为1:4sample明每释放一个内存页面需要检查四个页面。 
当po*SYS>fr(SYS为一系统参数,可用命令schedtune查看)时,系统自身认为已到崩溃边缘。SYS在有128MB或更多内存的系统上默认值为0, sample示禁止内存加载控制,否则默认值为6。系统崩溃sample明此时系统使用大量时间用于内存换入/换出,而没有足够时间处理应用或正常工作。这时一些进程将被临时挂起,系统运行明显减慢。 
2. svmon 
svmon命令统计并显示虚拟内存的使用情况。 
以超级用户(root)身份运行命令 
# svmon -Pau 10 | more 
输出如下: 
Pid Command Inuse Pin Pgspace 
13794 dtwm 1603 1 449 
Pid: 13794 
Command: dtwm 
这条命令显示出使用内存最多的前十个进程,并针对每个进程给出了一个详细列sample(上sample为其中一个进程的描述信息)。在每个进程的列sample中,找出Type为"work"及Description为"private"的相应行,查看Pgspace显示的使用页面数(每个页面大小为4096字节),该数值为此段(segment)在虚拟内存空间中占用的工作页面(working pages)数,即占用的页空间中的页面数。如果Pgspace值持续增长,系统则有可能存在内存泄漏(memory leak)。当应用程序不能正常释放内存时会出现内存泄漏的问题。 
上述命令格式及输出结果适用于AIX4.3.3之前的版本。在AIX4.3.3的系统上可运行命令 
svmon -Pu 10 | more 
其输出格式与上条命令基本相同,但字段"Pgspace"用"Pgsp"取代。 
3. ps 
ps命令显示当前运行的进程状态信息。 
运行下列命令 
#ps gv | head -n 1; ps gv | egrep -v "RSS" | sort +6b -7 -n -r 
SIZE 页空间中分配给该进程的Type为"work", Description为"private"的内存段大小(K字节 为单位)。该数值也可通过命令svmon显示。 
RSS 进程当前占用的内存段(物理内存)大小(K字节为单位),包括Type为"work"和Description 为"private"的内存段及Type为"pers"和Description为"code"的内存段。该数值可通 过命令svmon显示。 
TRS 进程常驻内存的正文段大小,包括Type为"pers"及Description为"code"的内存段。该 数值可通过命令svmon显示。 
%MEM RSS占系统物理内存的百分比(%)。 
如上所述,使用ps命令同样可以查看各进程的内存分配情况。 
CPU 瓶颈 

下面我们将就如何使用命令vmstat、tprof和ps检查系统是否存在CPU瓶颈做一个简单介绍。 
1. vmstat 
使用命令 
# vmstat 1 10 
注: 运行队列有进程等待时系统运行速度会降低。 
id CPU 空闲时间或无I/O等待时间的百分比; 
wa CPU I/O 等待时间的百分比; 
r 运行队列中的线程数; 
如果 id 和wa 的值持续为接近0的值,sample明CPU此时处于繁忙状态。 
下面来看看字段r(运行队列中的线程数)。运行队列中等待的线程数越多,系统性能受到的影响越大。 
2. tprof 
tprof命令用于统计每个进程的CPU使用情况。 
以超级用户root的身份运行下列命令,可以找出进程占用的CPU时间: 
# tprof -x sleep 30 
此命令运行30秒钟,在当前目录下创建一个名为_prof.all 的文件。30秒钟内, CPU被调度次数约为3000次。__prof.all 文件中的字段Total 为此进程调度到的CPU次数。如果进程所对应的 Total字 段的值为1500,sample示该进程在3000次 CPU调度中占用了1500次,或理解为使用了一半的CPU时间。tprof的输出准确地显示出哪个进程在使用CPU 时间。 
__prof.all文件示例: 
3. netpmon 
netpmon命令用于监控与网络有关的I/0及CPU的使用情况。 
以root 身份运行下面的命令,可以找出进程使用的CPU时间,以及其中与网络有关的代码使用的CPU时间: 
# netpmon -o /tmp/netpmon.out -O cpu -v; sleep 30; trcstop 
此命令运行30 秒钟,并在/tmp目录下生成文件 netpmon.out。其中字段 CPU Time 为进程使用CPU 
的时间总值,CPU%对应其百分比,Network CPU% 为进程中与网络有关的代码所占用的CPU百分比。如下所示: 
输入输出(I/O)瓶颈 

1. iostat 
iostat命令用于统计CPU的使用情况及tty设备、硬盘和CD-ROM的I/0量。 
运行命令: 
iostat 5 10 
将显示10次统计结果,下面为其中一次的数据: 
其中 
%iowait 等待本地 I/O 时CPU 空闲时间的百分比 
%idle 未等待本地 I/O 时CPU 空闲时间的百分比 
当没有需使用CPU的进程但至少有一个进程在等待I/O 时, CPU时间属性标为iowait。如果iowait 时间的百分比很高,sample示该磁盘输入输出(I/O)是导致系统运行速度缓慢的主要原因。 
%tm_act 硬盘繁忙的百分比 
注: tm_act的值很高,sample明硬盘存在I/O瓶颈。 
当%tm_act(硬盘繁忙时间)很高时,可能会感觉到系统运行速度在减慢。有些系统上某个硬盘的%tm_act值为60%或更高时,系统性能就会受到影响。 
两点建议: 
1. 观察繁忙与空闲的硬盘,将数据从忙的盘移至相对空闲的的盘上,这会在一定程度上减轻由此引起的I/O 瓶颈。 

2. 依照上面"内存瓶颈"中介绍的方法检查内存换页的频繁程度。大量的换页操作会增加I/O负载。 
2. filemon 
filemon 命令用于查看哪些文件/逻辑卷/硬盘处于繁忙状态。在系统I/O 处于繁忙状态时运行下面的命令: 
# filemon -u -O all -o /tmp/fmon.out; sleep 30; trcstop 
30秒钟后会生成记录跟踪信息的文件 /tmp/fmon.out。从该文件中可以找出: 
1. 最为繁忙的虚拟内存段(segment)、逻辑卷和物理卷; 
2. 对页空间(paging space)的读写次数,确认硬盘I/O 是由于应用程序操作还是频繁的换页操作; 
3. 最为活跃的文件或逻辑卷,如果它们存放在繁忙的物理卷上,可以考虑将数据移至相对空闲 的硬盘上,这样有助于提高系统性能。最为繁忙的段的报sample里列示出最繁忙的文件所对应的文件系统和i节点。文件系统的安装点(mount point)及文件的i节点(inode)可与命令ncheck一起使用,来找出相对应的文件。这个报sample可用来判断该I/O操作是针对文件系统、JFS Log 还是系统页空间的。 
通过检查字段"reads"和"read sequences"的值,可以判断该操作是顺序读取还是随机读取。当 "read sequences"接近"reads"时,对该文件的访问则以随机读取方式居多。(附录A为命令 filemon 的输出 示 例) 
结束语 
在这里有一个极有用的工具值得给大家一提,就是RS/6000性能诊断工具包-Performance Toolbox, 一个用来检测系统性能的功能非常完善的软件包。其中包括基于X-Windows的图形 界面诊断工具 xmperf,用于实时检测系统资源的使用情况。(注:该软件包不在AIX操作系统光盘中提供。) 
我们在上面的文字中讨论了有关RS/6000系统的资源瓶颈问题,其中涉及到的系统命令的具体用法可以查找AIX联机命令手册。此外,一个系统的性能如何还与网络因素及应用程序有着密切的关系,分析这诸多因素的方法及工具还有很多,在此不做一一介绍了。希望大家在实际工作中逐步摸索,成为RS/6000系统性能分析专家 
附录A (filemon 输出文件示例) 
--------------------------------------- 
Thu Aug 19 11:30:49 1999 
System: AIX texmex Node: 4 Machine: 000691854C00 
0.369 secs in measured interval 
Cpu utilization: 9.0% 
Most Active Files 
----------------------------------------------------------------------------- 
#MBs #opns #rds #wrs file volume:inode 
----------------------------------------------------------------------------- 
0.1 1 14 0 smit.log /dev/hd4:858 
0.0 1 0 13 null 
0.0 2 4 0 ksh.cat /dev/hd2:16872 
0.0 1 2 0 cmdtrace.cat /dev/hd2:16739 
Most Active Segments 
------------------------------------------------------------------------------ 
#MBs #rpgs #wpgs segid segtype volume:inode 
------------------------------------------------------------------------------ 
0.1 13 0 5e93 ??? 
0.0 2 0 22ed ??? 
0.0 1 0 5c77 persistent 
Most Active Logical Volumes 
------------------------------------------------------------------------------ 
util #rblk #wblk KB/s volume description 
------------------------------------------------------------------------------ 
0.06 112 0 151.9 /dev/hd4 / 
0.04 16 0 21.7 /dev/hd2 /usr 
Most Active Physical Volumes 
------------------------------------------------------------------------------ 
util #rblk #wblk KB/s volume description 
------------------------------------------------------------------------------ 
0.10 128 0 173.6 /dev/hdisk0 N/A 
------------------------------------------------------------------------------ 
Detailed File Stats 
------------------------------------------------------------------------------ 
file: /smit.log volume: /dev/hd4 (/) inode: 858 
opens: 1 
total bytes xfrd: 57344 
reads: 14 (0 errs) 
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0 
read times (msec): avg 1.709 min 0.002 max 19.996 sdev 5.092 
file: /dev/null 
opens: 1 
total bytes xfrd: 50600 
writes: 13 (0 errs) 
write sizes (bytes): avg 3892.3 min 1448 max 4096 sdev 705.6 
write times (msec): avg 0.007 min 0.003 max 0.022 sdev 0.006 
file: /usr/lib/nls/msg/en_US/ksh.cat volume: /dev/hd2 (/usr) inode: 16872 
opens: 2 
total bytes xfrd: 16384 
reads: 4 (0 errs) 
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0 
read times (msec): avg 0.042 min 0.015 max 0.070 sdev 0.025 
lseeks: 10 
file: /usr/lib/nls/msg/en_US/cmdtrace.cat volume: /dev/hd2 (/usr) inode: 
16739 
opens: 1 
total bytes xfrd: 8192 
reads: 2 (0 errs) 
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0 
read times (msec): avg 0.062 min 0.049 max 0.075 sdev 0.013 
lseeks: 8 
------------------------------------------------------------------------------ 
Detailed VM Segment Stats (4096 byte pages) 
------------------------------------------------------------------------------ 
SEGMENT: 5e93 segtype: ??? 
segment flags: 
reads: 13 (0 errs) 
read times (msec): avg 1.979 min 0.957 max 5.970 sdev 1.310 
read sequences: 1 
read seq. lengths: avg 13.0 min 13 max 13 sdev 0.0 
SEGMENT: 22ed segtype: ??? 
segment flags: inode 
reads: 2 (0 errs) 
read times (msec): avg 8.102 min 7.786 max 8.418 sdev 0.316 
read sequences: 2 
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0 
SEGMENT: 5c77 segtype: persistent 
segment flags: pers defer 
reads: 1 (0 errs) 
read times (msec): avg 13.810 min 13.810 max 13.810 sdev 0.000 
read sequences: 1 
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0 

------------------------------------------------------------------------------ 
Detailed Logical Volume Stats (512 byte blocks) 
------------------------------------------------------------------------------ 
VOLUME: /dev/hd4 description: / 
reads: 5 (0 errs) 
read sizes (blks): avg 22.4 min 8 max 40 sdev 12.8 
read times (msec): avg 4.847 min 0.938 max 13.792 sdev 4.819 
read sequences: 3 
read seq. lengths: avg 37.3 min 8 max 64 sdev 22.9 
seeks: 3 (60.0%) 
seek dist (blks): init 6344, 
avg 40.0 min 8 max 72 sdev 32.0 
time to next req(msec): avg 70.473 min 0.224 max 331.020 sdev 130.364 
throughput: 151.9 KB/sec 
utilization: 0.06 

VOLUME: /dev/hd2 description: /usr 
reads: 2 (0 errs) 
read sizes (blks): avg 8.0 min 8 max 8 sdev 0.0 
read times (msec): avg 8.078 min 7.769 max 8.387 sdev 0.309 
read sequences: 2 
read seq. lengths: avg 8.0 min 8 max 8 sdev 0.0 
seeks: 2 (100.0%) 
seek dist (blks): init 608672, 
avg 16.0 min 16 max 16 sdev 0.0 
time to next req(msec): avg 162.160 min 8.497 max 315.823 sdev 153.663 
throughput: 21.7 KB/sec 
utilization: 0.04 

------------------------------------------------------------------------------ 
Detailed Physical Volume Stats (512 byte blocks) 
------------------------------------------------------------------------------ 
VOLUME: /dev/hdisk0 description: N/A 
reads: 7 (0 errs) 
read sizes (blks): avg 18.3 min 8 max 40 sdev 12.6 
read times (msec): avg 5.723 min 0.905 max 20.448 sdev 6.567 
read sequences: 5 
read seq. lengths: avg 25.6 min 8 max 64 sdev 22.9 
seeks: 5 (71.4%) 
seek dist (blks): init 4233888, 
avg 171086.0 min 8 max 684248 sdev 296274.2 
seek dist (%tot blks): 
init 48.03665, 
avg 1.94110 min 0.00009 max 7.76331 sdev 3.36145 
time to next req(msec): 
avg 50.340 min 0.226 max 315.865 sdev 108.483 
throughput: 173.6 KB/sec 
utilization: 0.10
探索 .NET 多版本兼容的精美 WinForms UI 控件库:ReaLTaiizor 你可以根据需要修改主题的颜色方案。// 示例:修改主题颜色设置主色和次色。应用到中。通过继承和重写控件的方法,可以实现自定义样式。// 示例:自定义 MetroButton 样式// 自定义绘制逻辑创建类继承自。重写OnPaint方法,添加自定义绘制逻辑。 阅读详情

相关推荐

AIX 使用 基础 关于IBM RS/6000小型机使用的最基本的课程

AIX使用基础,是关于IBM RS/6000小型机使用的最基本的课程。完成本课程后,学员应当能够了解UNIX和它的变体AIX,并对AIX的基本使用了解和掌握。熟悉AIX的使用环境。

IBM POWER微处理器

关于IBM操作系统增强包,请见「关于POWER架构,请见「是的一種,由設計,全稱為“”,《IBM Connect電子報》2007年8月號譯為「增強RISC性能優化」。POWER系列微處理器在不少IBM及中,廣泛作為主CPU使用。而架構也是源自POWER架構,並應用在的及部份IBM的工作站,以及各式各樣的嵌入式系統上。此外,IBM透過網站,向其他開發者及製造商推廣POWER架構及其他衍生產品。

weixin_40191861的博客 872

IBM RS6000硬件知识

IBM RS6000硬件知识doc版本 RS6000 系列是IBM公司在2000年推出的新一代企业级服务器。 RS6000的目标是为象电子商务、ERP、SCM、BI等有严格要求的应用提供解决方案。在ERP环境中,它是一个卓越的具有强大处理能力和突出存储能力的应用服务器;在电子商务领域,它是一个优秀的具有高可靠性和快速处理能力的WEB服务器;同样的,它具有特殊的特征以适合于电信中心应用的运行。 本文主要以M80为例讲述IBM RS6000系列服务器的一些特性和硬件安装。

常用p系列服务器&RS/6000服务器产品号码对照表

RS/6000服务器 产品型号 系列型号 产品号码 B50 B50 7046-B50 150 43P 150 7043-150 260 43P 260 7043-260 170 44P 170 7044-170 270 44P 270 7044-270 F50 F50 7025-F50 H50 ...

Fangrn的专栏 1051

如何查看进程的线程数?

之前因为线程内出现异常导致Python部分线程退出,程序以单线程方式运行了好几个星期,浪费了很多时间。 如何查看当前进程有多少个存活线程呢? 方法1)pstree -p 4761(进程ID)。如下截图所示:   方法2)cat /proc/4761(进程ID)/status。如下图所示:     方法3)top -p 4761(进程ID),

zhangwu416826的专栏 1万+

使用Beans.instantiate()创建可串行化的JavaBean

       通常使用new这个关键词来实例化一个Java对象,而当想要创建一个可串行化的JavaBean时,可使用Beans.instantiate( )方法。Beans.instantiate( )通过类加载器自动装载JavaBean的任何串行化版本(带有.ser文件扩展名的bean文件)。例如:      存在的存在test.ser文件,它是序列化对象保存的内容。现在使用Beans.ins...

bluestar 340

Beans.instantiate() 创建新 bean 实例

 有两种不同的方法用来创建 Javabean。一种方法是使用 new 来创建对象实例,而另一种方法是使用 java.beans.Beans.instantiate() 来创建新对象。然而,使用 Beans.instantiate() 会给性能带来负面影响,因为这种方法将在文件系统上搜索那个对象的一个序列化版本,即与要实例化的类同名的.ser文件。如果找到序列化对象,则装入它。如果找不到它,

王洪伟的专栏 4030

java api javabean包简单理解和学习

在DaoSupport 的构建中,为了实现通过传入的参数(为class<T>)来检测正确和构造类的实例,但是当时使用的是java的反射机制和范型来实现的。暂且不讨论范型和注解带来的不便。那么在java api中是不是还有替代上述方式来构建java bean呢? 答案是有的。 详...

chiqulao5770的博客 269

org.apache.solr.client.solrj.beans.BindingException: Could not instantiate object of class 处理

solr进行范围超找时候抛异常: 1、问题描述: solrJ中进行范围搜索时候报错: org.apache.solr.client.solrj.beans.BindingException: Could not instantiate object of class com.baidu.Item Caused by: org.apache.solr.client.solrj.beans.Bind...

Syntacticsugar's blog 2349

java.beans_java命名空间java.beans类beans的类成员方法: instantiate定义及介绍

实例化 bean。基于相对于某个类加载器的名称创建 bean。此名称应该是以句点分隔的名称,例如 "a.b.c"。在 beans 1.0 中,给定名称可以指示一个序列化对象或一个类。其他机制可以在将来添加。在 beans 1.0 中,首先试着将 beanname 作为序列化的对象名称对待,然后将它作为类名称对待。在将 beanname 用作序列化对象名称时,要将给定的 beanname 转换为资源...

weixin_39843151的博客 282

《Java与模式》: 21 专题:javaBean的“冷藏”和“解冻”

21.1 实现Serialization,Java对象与二进制流间的相互转换串行化(Serialization)又叫“冷藏”,并行化(Deserialization)又叫“解冻”。21.2 什么可以“冷藏”Component,Exception,Error类及其继承的子类均可串行化;Reader,Writer等I/O类均是不可串行化的。绝对不可串行化:(1)      一个

学海无涯 982

Serializable接口**是一个标记接口,用于指示一个类的对象可以被序列化**

序列化是一个将对象的状态转换为可以存储或传输的格式的过程,而反序列化则是将这些数据重新转换回对象的过程。需要注意的是,一个类实现了Serializable接口,并不意味着它的所有属性都可以被序列化。总的来说,Serializable接口是Java提供的一种机制,它允许开发者将对象的状态以某种形式保存下来,以便在未来某个时刻恢复或传输。Java Bean通常实现了Serializable接口,这意味着它们可以被序列化,即可以将其状态转换为字节流,以便将其保存到文件中或通过网络发送。

[Blog][Domain] programb.blog.csdn.net 487

Spring学习总结—IOC和AOP

1. 概述 1.1 简介 Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层Spring MVC和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的 Java EE 企业应⽤开源框架。 1.2 核心结构 Spring框架是一个轻量级的解决方案,可以一站式地构建企业级应用。Spring是模块化的,所以可以只使用其中需要的部分。主要包括几大模块:数据处理模块、Web模块、AOP/Aspect

dukay2021的博客 458

RS6000小型机,可以远程供大家练手--收藏

1.本人有固定的IP地址,和固定的带宽(电信光纤直连2M口)。 2.机器为43P-140一台 3.具体配置为:2块4.3G硬盘,CPU 233,256M内存,磁带机,光驱 4.操作系统为AIX4.3.3 5.已经安装了Oracle 8.1.7 6.本人只提供给网络速度较好的同仁telnet使用(需要先测试速度)。可以适当的提供磁带进行备份和恢复练习(需预约)。 7.本人操作水平有限,只不过通过了一

温兵的专栏 1181

RS/6000 IBM,7044-170 介绍

Description   IBM UNIX systems consist of the IBM eServer pSeries and IBM RS/6000 product lines.  Providing unprecedented value, these innovative systems feature IBMs leading-edge technology and run

q30的专栏 1598

在ibm rs6000 44p安装linux 小结

1。suse的问题是。什么都好。就是升级收费。偶比较穷2。debian 我以前的最爱。也是什么什么都好。就是无法正确安装。虽然可以通过在suse上装(chroot)。但是官方的内核心没一个能启动的。也是仅仅缺个自己的核心而已。3。gentoo。刚开始用。缺点是浪费时间。deibna下3分钟搞定的。gentoo下非要3个小时不可。呵呵内核编译和启动已经成功。有使用同样power3机器的朋友可以联系我

小城序员 2177

银行核心操作系统as400 rs6000

核心银行系统 核心银行系统,英文名称:Core Banking System。 核心银行系统指金融行业的银行核心业务系统。 目前的核心银行系统,都是以客户为中心,进行帐务处理、满足综合柜员制、并提供24小时服务的核心银行业务系统。   技术实现 对于不同技术平台的选择,决定了不同的技术实现。目前有二种比较成熟的技术实现。(大型机采用的技术实现未列出) OS/400 配套硬件为IBM

互联网金融爱好者 1万+

aspose-cad-21.11.jar

aspose-cad-21.11.jar。已成功去除水印和其他限制,下载即可使用

上一篇: AIX安装后的基本系统设置
下一篇: AIX 系统参数配置
q30
q30
博客等级 码龄22年 6粉丝 112原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值