2024年最全JVM故障处理工具,使用总结,完美世界java面试

笔者福利

以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!




本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

grant codebase “file:${java.home}/…/lib/tools.jar” {

permission java.security.AllPermission;

};

添加好配置文件后,在 bin 目录下注册添加的 jstatd.all.policy 文件:C:\Program Files\Java\jdk1.8.0_161\bin>jstatd -J-Djava.security.policy=jstatd.all.policy

顺利的话现在就可以查看原创机器JVM信息了,如下:

E:\itstack\git\github.com\interview>jps -l 127.0.0.1

111552 org/netbeans/Main

26852

96276 org.jetbrains.jps.cmdline.Launcher

36056 sun.tools.jps.Jps

59000

8460 org/netbeans/Main

76188 sun.tools.jstatd.Jstatd

  • 也可以组合使用 jps 的选项参数,比如:jps -lm 127.0.0.1

2. jcmd 虚拟机诊断命令

====================

jcmd,是从jdk1.7开始新发布的 JVM 相关信息诊断工具,可以用它来导出堆和线程信息、查看Java进程、执行GC、还可以进行采样分析(jmc 工具的飞行记录器)。注意其使用条件是只能在被诊断的JVM同台sever上,并且具有相同的用户和组(user and group).

命令格式

jcmd <pid | main class> <command …|PerfCounter.print|-f file>

  • pid,接收诊断命令请求的进程IDmain class,接收诊断命令请求的进程main类。

  • command,接收诊断命令请求的进程main类。

  • PerfCounter.print,打印目标 Java 进程上可用的性能计数器。

  • -f file,从文件file中读取命令,然后在目标Java进程上调用这些命令。

  • -l,查看所有进程列表信息。

  • -h、-help,查看帮助信息。

2.1 jcmd pid VM.flags,查看JVM启动参数

===================================

E:\itstack\git\github.com\interview>jcmd 111552 VM.flags

111552:

-XX:CICompilerCount=4 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\Users\xiaofuge1\AppData\Roaming\VisualVM\8u131\var\log\heapdump.hprof -XX:+IgnoreUnrecognizedVMOptions -XX:InitialHeapSize=25165824 -XX:MaxHeapSize=268435456 -XX:MaxNewSize=89128960 -XX:Min

HeapDeltaBytes=524288 -XX:NewSize=8388608 -XX:OldSize=16777216 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC

2.2 jcmd pid VM.uptime,查看JVM运行时长

====================================

E:\itstack\git\github.com\interview>jcmd 111552 VM.uptime

111552:

583248.912 s

2.3 jcmd pid PerfCounter.print,查看JVM性能相关参数

==============================================

E:\itstack\git\github.com\interview>jcmd 111552 PerfCounter.print

111552:

java.ci.totalTime=56082522

java.cls.loadedClasses=5835

java.cls.sharedLoadedClasses=0

java.cls.sharedUnloadedClasses=0

java.cls.unloadedClasses=37

2.4 jcmd pid GC.class_histogram,查看系统中类的统计信息

================================================

E:\itstack\git\github.com\interview>jcmd 111552 GC.class_histogram

111552:

num #instances #bytes class name


1: 50543 3775720 [C

2: 3443 2428248 [I

3: 50138 1203312 java.lang.String

4: 25351 811232 java.util.HashMap$Node

5: 6263 712208 java.lang.Class

6: 3134 674896 [B

7: 6687 401056 [Ljava.lang.Object;

8: 2468 335832 [Ljava.util.HashMap$Node;

2.5 jcmd pid Thread.print,查看线程堆栈信息

======================================

E:\itstack\git\github.com\interview>jcmd 111552 Thread.print

111552:

2021-01-10 23:31:13

Full thread dump Java HotSpot™ 64-Bit Server VM (25.161-b12 mixed mode):

“Computes values in handlers” #52 daemon prio=5 os_prio=0 tid=0x0000000019839000 nid=0x16014 waiting for monitor entry [0x0000000026bce000]

java.lang.Thread.State: BLOCKED (on object monitor)

at com.sun.tools.visualvm.core.model.ModelFactory.getModel(ModelFactory.java:76)

  • waiting to lock <0x00000000f095bcf8> (a com.sun.tools.visualvm.jvmstat.application.JvmstatApplication)

at com.sun.tools.visualvm.application.jvm.JvmFactory.getJVMFor(JvmFactory.java:45)

at com.sun.tools.visualvm.application.options.Open.openApplication(Open.java:108)

at com.sun.tools.visualvm.application.options.Open.process(Open.java:93)

at org.netbeans.spi.sendopts.Option$1.process(Option.java:348)

at org.netbeans.api.sendopts.CommandLine.process(CommandLine.java:278)

at org.netbeans.modules.sendopts.HandlerImpl.execute(HandlerImpl.java:23)

at org.netbeans.modules.sendopts.Handler.cli(Handler.java:30)

at org.netbeans.CLIHandler.notifyHandlers(CLIHandler.java:195)

at org.netbeans.core.startup.CLICoreBridge.cli(CLICoreBridge.java:43)

at org.netbeans.CLIHandler.notifyHandlers(CLIHandler.java:195)

at org.netbeans.CLIHandler$Server$1ComputingAndNotifying.run(CLIHandler.java:1176)

2.6 jcmd pid VM.system_properties,查看JVM系统参数

================================================

E:\itstack\git\github.com\interview>jcmd 111552 VM.system_properties

111552:

#Sun Jan 13 23:33:19 CST 2021

java.vendor=Oracle Corporation

netbeans.user=C:\Users\xiaofuge1\AppData\Roaming\VisualVM\8u131

sun.java.launcher=SUN_STANDARD

sun.management.compiler=HotSpot 64-Bit Tiered Compilers

netbeans.autoupdate.version=1.23

os.name=Windows 10

2.7 jcmd pid GC.heap_dump 路径,导出heap dump文件

===============================================

E:\itstack\git\github.com\interview>jcmd 111552 GC.heap_dump C:\Users\xiaofuge1\Desktop_dump_0110

111552:

Heap dump file created

  • 导出的文件需要配合 jvisualvm 查看

2.8 jcmd pid help,列出可执行操作

=============================

E:\itstack\git\github.com\interview>jcmd 111552 help

111552:

The following commands are available:

JFR.stop

JFR.start

JFR.dump

JFR.check

2.9 jcmd pid help JFR.stop,查看命令使用

=====================================

E:\itstack\git\github.com\interview>jcmd 111552 help JFR.stop

111552:

JFR.stop

Stops a JFR recording

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

Syntax : JFR.stop [options]

Options: (options must be specified using the or = syntax)

name : [optional] Recording name,.e.g “My Recording” (STRING, no default value)

recording : [optional] Recording number, see JFR.check for a list of available recordings (JLONG, -1)

discard : [optional] Skip writing data to previously specified file (if any) (BOOLEAN, false)

filename : [optional] Copy recording data to file, e.g. “C:\Users\user\My Recording.jfr” (STRING, no default value)

compress : [optional] GZip-compress “filename” destination (BOOLEAN, false)

3. jinfo Java配置信息工具

========================

jinfo(Configuration Info for Java),实时查看和调整JVM的各项参数。

在上面讲到 jps -v 指令时,可以看到它把虚拟机启动时显示的参数列表都打印出来了,但如果想更加清晰的看具体的一个参数或者想知道未被显式指定的参数时,就可以通过 jinfo -flag 来查询了。

命令格式

jinfo [ option ] pid

使用方式

E:\itstack\git\github.com\interview>jinfo -flag MetaspaceSize 111552

-XX:MetaspaceSize=21807104

E:\itstack\git\github.com\interview>jinfo -flag MaxMetaspaceSize 111552

-XX:MaxMetaspaceSize=18446744073709486080

E:\itstack\git\github.com\interview>jinfo -flag HeapDumpPath 111552

-XX:HeapDumpPath=C:\Users\xiaofuge\AppData\Roaming\VisualVM\8u131\var\log\heapdump.hprof

  • 各种JVM参数你都可以去查询,这样更加方便地只把你要的显示出来。

4. jstat 收集虚拟机运行数据

=======================

jstat(JVM Statistics Monitoring Tool),用于监视虚拟机各种运行状态信息。它可以查看本地或者远程虚拟机进程中,类加载、内存、垃圾收集、即时编译等运行时数据。

命令格式

jstat - [-t] [-h] [ []]

  • vmid:如果是查看远程机器,需要按照此格式:[protocol:][//]lvmid[@hostname[:port]/servername]

  • interval和count,表示查询间隔和次数,比如每隔1000毫秒查询一次进程ID的gc收集情况,每次查询5次。jstat -gc 111552 1000 5

选项列表

选项描述-class监视类加载、卸载数量、总空间以及类装载所耗费时长-gc监视 Java 堆情况,包括Eden区、2个 Survivor区、老年代、永久代或者jdk1.8元空间等,容量、已用空间、垃圾收集时间合计等信息-gccapacity监视内容与-gc基本一致,但输出主要关注 Java 堆各个区域使用到的最大、最小空间-gcutil监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比-gccause与 -gcutil 功能一样,但是会额外输出导致上一次垃圾收集产生的原因-gcnew监视新生代垃圾收集情况-gcnewcapacity监视内容与 -gcnew 基本相同,输出主要关注使用到的最大、最小空间-gcold监视老年代垃圾收集情况-gcoldcapacity监视内容与 -gcold 基本相同,输出主要关注使用到的最大、最小空间-compiler输出即时编译器编译过的方法、耗时等信息-printcompilation输出已经被即时编译的方法-gcpermcapacityjdk1.7 及以下,永久代空间统计-gcmetacapacityjdk1.8,元空间统计

  • jstat 的监视选项还是非常多的,但最常用的主要有上面这些。

4.01 jstat -class,类加载统计

===========================

E:\itstack\git\github.com\interview>jps -q

104928

111552

26852

96276

59000

8460

76188

  • Loaded,加载class的数量

  • Bytes:所占用空间大小

  • Unloaded:未加载数量

  • Bytes:未加载占用空间

  • Time:时间

4.02 jstat -compiler,编译统计

=============================

E:\itstack\git\github.com\interview>jps -l

111552 org/netbeans/Main

26852

96276 org.jetbrains.jps.cmdline.Launcher

59000

62184 sun.tools.jps.Jps

8460 org/netbeans/Main

76188 sun.tools.jstatd.Jstatd

  • Compiled:编译数量

  • Failed:失败数量

  • Invalid:不可用数量

  • Time:时间

  • FailedType:失败类型

  • FailedMethod:失败方法

4.03 jstat -gc,垃圾回收统计

=========================

E:\itstack\git\github.com\interview>jps -m

111552 Main --branding visualvm --cachedir C:\Users\xiaofuge\AppData\Local\VisualVM\Cache/8u131 --openid 3041391569375200

26852

96276 Launcher C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/plugins/java/lib/javac2.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/plugins/java/lib/aether-api-1.1.0.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/lib/jna-platform.jar;C:/Program Fi

les/JetBrains/IntelliJ IDEA 2019.3.1/lib/guava-27.1-jre.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/lib/httpclient-4.5.10.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/lib/forms-1.1-preview.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/plu

gins/java/lib/aether-connector-basic-1.1.0.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/plugins/java/lib/maven-model-builder-3.3.9.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/lib/jps-model.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/plu

gins/java/lib/maven-model-3.3.9.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/plugins/java/lib/aether-impl-1.1.0.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2019.3.1/lib/gson-2.8.5.jar;C:/Program File

59000

16844 Jps -m

8460 Main --branding visualvm --cachedir C:\Users\xiaofuge\AppData\Local\VisualVM\Cache/8u131 --openid 3041414336579200

76188 Jstatd

  • S0C、S1C,第一个和第二个幸存区大小

  • S0U、S1U,第一个和第二个幸存区使用大小

  • EC、EU,伊甸园的大小和使用

  • OC、OU,老年代的大小和使用

  • MC、MU,方法区的大小和使用

  • CCSC、CCSU,压缩类空间大小和使用

  • YGC、YGCT,年轻代垃圾回收次数和耗时

  • FGC、FGCT,老年代垃圾回收次数和耗时

  • GCT,垃圾回收总耗时

4.04 jstat -gccapacity,堆内存统计

================================

E:\itstack\git\github.com\interview>jps -v

111552 Main -Xms24m -Xmx256m -Dsun.jvmstat.perdata.syncWaitMs=10000 -Dsun.java2d.noddraw=true -Dsun.java2d.d3d=false -Dnetbeans.keyring.no.master=true -Dplugin.manager.install.global=false --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=jdk.jvmstat/sun

.jvmstat.monitor.event=ALL-UNNAMED --add-exports=jdk.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-exports=java.desktop/sun.swing=ALL-UNNAMED --add-exports=jdk.attach/sun.tools.attach=ALL-UNNAMED --add-modules=java.activation -XX:+IgnoreUnrecognizedVMOptions -Djdk.

home=C:/Program Files/Java/jdk1.8.0_161 -Dnetbeans.home=C:\Program Files\Java\jdk1.8.0_161\lib\visualvm\platform -Dnetbeans.user=C:\Users\xiaofuge1\AppData\Roaming\VisualVM\8u131 -Dnetbeans.default_userdir_root=C:\Users\xiaofuge1\AppData\Roaming\VisualVM -XX:+H

eapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\Users\xiaofuge1\AppData\Roaming\VisualVM\8u131\var\log\heapdump.hprof -Dsun.awt.keepWorkingSetOnMinimize=true -Dnetbeans.dirs=C:\Program Files\Java\jdk1.8.0_161\lib\visualvm\visualvm;C:\Program

59000 -Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:MaxPermSize=256m

76188 Jstatd -Denv.class.path=.;C:\Program Files\Java\jre1.8.0_161\lib;C:\Program Files\Java\jre1.8.0_161\lib\tool.jar; -Dapplication.home=C:\Program Files\Java\jdk1.8.0_161 -Xms8m -Djava.security.policy=jstatd.all.policy

  • NGCMN、NGCMX,新生代最小和最大容量

  • NGC,当前新生代容量

  • S0C、S1C,第一和第二幸存区大小

  • EC,伊甸园区的大小

  • OGCMN、OGCMX,老年代最小和最大容量

  • OGC、OC,当前老年代大小

  • MCMN、MCMX,元数据空间最小和最大容量

  • MC,当前元空间大小

  • CCSMN、CCSMX,压缩类最小和最大空间

  • YGC,年轻代GC次数

  • FGC,老年代GC次数

4.05 jstat -gcnewcapacity,新生代内存统计

=====================================

E:\itstack\git\github.com\interview>jstat -gcnewcapacity 111552

NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC

8192.0 87040.0 80384.0 28672.0 1024.0 28672.0 512.0 86016.0 77312.0 60 52

  • NGCMN、NGCMX,新生代最小和最大容量

  • NGC,当前新生代容量

  • S0CMX,最大幸存0区大小

  • S0C,当前幸存0区大小

  • S1CMX,最大幸存1区大小

  • S1C,当前幸存1区大小

  • ECMX,最大伊甸园区大小

  • EC,当前伊甸园区大小

  • YGC,年轻代垃圾回收次数

  • FGC,老年代回收次数

4.06 jstat -gcnew,新生代垃圾回收统计

===============================

E:\itstack\git\github.com\interview>jstat -gcnew 111552

S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT

1024.0 512.0 0.0 0.0 3 15 512.0 77312.0 70.2 60 0.649

  • S0C、S1C,第一和第二幸存区大小

  • S0U、S1U,第一和第二幸存区使用

  • TT,对象在新生代存活的次数

  • MTT,对象在新生代存活的最大次数

  • DSS:期望的幸存区大小

  • EC,伊甸园区的大小

  • EU,伊甸园区的使用

  • YGC,年轻代垃圾回收次数

  • YGCT,年轻代垃圾回收消耗时间

4.07 jstat -gcold,老年代垃圾回收统计

===============================

E:\itstack\git\github.com\interview>jstat -gcold 111552

MC MU CCSC CCSU OC OU YGC FGC FGCT GCT

37120.0 34423.3 5376.0 4579.4 39424.0 13622.9 60 52 3.130 3.779

  • MC、MU,方法区的大小和使用

  • CCSC、CCSU,压缩类空间大小和使用

  • OC、OU,老年代大小和使用

  • YGC,年轻代垃圾回收次数

  • FGC,老年代垃圾回收次数

  • FGCT,老年代垃圾回收耗时

  • GCT,垃圾回收总耗时

4.08 jstat -gcoldcapacity,老年代内存统计

=====================================

E:\itstack\git\github.com\interview>jstat -gcoldcapacity 111552

OGCMN OGCMX OGC OC YGC FGC FGCT GCT

16384.0 175104.0 39424.0 39424.0 60 52 3.130 3.779

  • OGCMN、OGCMX,老年代最小和最大容量

  • OGC,当前老年代大小

  • OC,老年代大小

  • YGC,年轻代垃圾回收次数

  • FGC,老年代垃圾回收次数

  • FGCT,老年代垃圾回收耗时

  • GCT,垃圾回收消耗总耗时

4.09 jstat -gcmetacapacity,元空间统计

====================================

E:\itstack\git\github.com\interview>jstat -gcmetacapacity 111552

MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT

0.0 1081344.0 37120.0 0.0 1048576.0 5376.0 60 52 3.130 3.779

  • MCMN、MCMX,元空间最小和最大容量

  • MC,当前元数据空间大小

  • CCSMN、CCSMX,压缩类最小和最大空间

  • CCSC,压缩类空间大小

  • YGC,年轻代垃圾回收次数

  • FGC,老年代垃圾回收次数

  • FGCT,老年代垃圾回收耗时

  • GCT,垃圾回收消耗总耗时

4.10 jstat -gcutil,垃圾回收统计

=============================

E:\itstack\git\github.com\interview>jstat -gcutil 111552

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT

0.00 0.00 0.09 34.55 92.74 85.18 60 0.649 52 3.130 3.779

  • S0、S1、幸存1区和2区,当前使用占比

  • E,伊甸园区使用占比

  • O,老年代区使用占比

  • M,元数据区使用占比

  • CCS,压缩类使用占比

  • YGC,年轻代垃圾回收次数

  • FGC,老年代垃圾回收次数

  • FGCT,老年代垃圾回收耗时

  • GCT,垃圾回收消耗总耗时

4.11 jstat -printcompilation,JVM编译方法统计

==========================================

E:\itstack\git\github.com\interview>jstat -printcompilation 111552

Compiled Size Type Method

3642 9 1 java/io/BufferedWriter min

  • Compiled:最近编译方法的数量

  • Size:最近编译方法的字节码数量

  • Type:最近编译方法的编译类型

  • Method:方法名标识

5. jmap 内存映射工具

===================

jmap(Memory Map for Java),用于生成堆转储快照(heapdump文件)。

jmap 的作用除了获取堆转储快照,还可以查询finalize执行队列、Java 堆和方法区的详细信息。

命令格式

jmap [ option ] pid

  • option:选项参数

  • pid:需要打印配置信息的进程ID

  • executable:产生核心dump的Java可执行文件

  • core:需要打印配置信息的核心文件

  • server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器

  • remote server IP or hostname: 远程调试服务器的IP地址或主机名

选项列表

选项描述-dump生成 Java 堆转储快照。-finalizerinfo显示在F-Queue中等待Finalizer线程执行finalize方法的对象。Linux平台-heap显示 Java 堆详细信息,比如:用了哪种回收器、参数配置、分代情况。Linux平台-histo显示堆中对象统计信息,包括类、实例数量、合计容量-permstat显示永久代内存状态,jdk1.7,永久代-F当虚拟机进程对 -dump 选项没有响应式,可以强制生成快照。Linux平台

5.1 jmap,打印共享对象映射

=====================

grant codebase “file:${java.home}/…/lib/tools.jar” {

permission java.security.AllPermission;

};

5.2 jmap -heap,堆详细信息

========================

E:\itstack\git\github.com\interview>jmap -heap 111552

Attaching to process ID 111552, please wait…

Debugger attached successfully.

Server compiler detected.

JVM version is 25.161-b12

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

久代内存状态,jdk1.7,永久代-F当虚拟机进程对 -dump 选项没有响应式,可以强制生成快照。Linux平台

5.1 jmap,打印共享对象映射

=====================

grant codebase “file:${java.home}/…/lib/tools.jar” {

permission java.security.AllPermission;

};

5.2 jmap -heap,堆详细信息

========================

E:\itstack\git\github.com\interview>jmap -heap 111552

Attaching to process ID 111552, please wait…

Debugger attached successfully.

Server compiler detected.

JVM version is 25.161-b12

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

[外链图片转存中…(img-O6uM0yPU-1715085728347)]

[外链图片转存中…(img-pPsed4sj-1715085728347)]

[外链图片转存中…(img-vdDCLXCu-1715085728347)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值