这里只演示Windows下的步骤、linux下的后期添加

目录:
一、简介
二、安装说明
三、配置(重要)

一、简介

JProfiler 是一个全功能的 Java 剖析工具(profiler),专用于分析 J2SE 和 J2EE  应用程序。它把 CPU 线程和内存的剖析组合在一个强大的应用中。JProfiler 可提供许多 IDE 整合和应用服务器整合用途。

JProfiler 直觉式的 GUI 让你可以找到效能瓶颈、抓出内存泄漏(memory leaks)、并解决线程的问题。它让你得以对 heap walker 作资源回收器的 root analysis,可以轻易找出内存泄漏;heap 快照(snapshot)模式让未被参照(reference)的对象、稍微被参照的对象、或在终结(finalization)队列的对象都会被移除;整合精灵以便剖析浏览器的  Java外挂功能,JProfiler 功能很强大,可以监控普通的  java application, applet, java web start,application server  等。除了可以监控本地的程序,还可以对远程服务器上跑的应用进行监

控。

最新版下载连接 http://www.ej-technologies.com/download/jprofiler/files.php。

实测可以破解的版本https://download.csdn.net/download/zhao3587717/10765483

当前使用版本为  9.2

  二、 安装说明(这里指安装Windows)

windows 下安装,点击 exe 文件进行安装,默认安装即可(也可自己指定安装目录)。linux 下服务端安装,直接解压即可。安装时会自动搜索是否安装过 JDK ,可不必配置.

三、配置

1、 JProfiler's start center 

在安装完毕后打开会有一个页面向导

使用 JProfiler's start center,你可以创建新的会话,编辑已有会话或者打开已保存的会话。

在菜单中选择 start center ,也可以打开这个向导页面、有以下四个标签:Open session、New session、Convert session和  Open snapshot。

我们可以先看第一个

1.1 Open session 

在 start center 中,打开  Open session标签,在窗口中显示所有预先定义的会话,如上图:

你可以选择一个会话,点击 OK来打开预定义的会话。

会话也可以被修改、复制、删除和排序。

也可以菜单中选择 session --> Open session,打开 Open session窗口。

1.2 New session 

会话能够通过两种途径创建:

第一种:人工配置:使用[New session]按钮手工配置一个新的session,配置完成后,开始运行(如何配置详见下面)

第二种:通过集成向导:使用集成向导上的三个按钮:[New server integration] 、[New remote integration] 和 [New applet integration] 。

会话创建完成后可以立即运行。在 Open session标签页中能够看到新建的会话。

1.2.1   New  Session(人工配置创建)

点击New Session按钮,显示Application Settings窗体,关于Application Settings配

置,请参见2管理session

此页面也可以在菜单中选择 Session-->New Session,打开 New Session 窗体

1.2.2 New server integration(通过集成向导创建)

点击 New server integration按钮,打开集成向导,引导你将  JProfiler与本地或远程的应用服务器进行集成,步骤:

第一步、选择需要集成的应用服务器。

如果你所使用的应用服务器不在列表中,则选择“Generic application sever ”,并点击“下一步”如图:

第二步、  选择要集成的应用服务器地址

选择要集成的应用服务器是本地的,还是远程的。如果你选择远程计算机,在选择 的计算机上必须安装JProfiler ,并选择远程计算机的操作系统,点击 “ 下一步 ” 如图:

第三步:选择  JVM提供商,版本和模式(也就是指定jdk的版本)

当你选择 jdk版本时,系统会自动选择推荐的模式

第四步、选择 Jprofiler 启动界面方式。

在开发环境,建立选择第一项,很容易修改监测设置;如果你选择不等待,在启动应用服务器之前要先配置监测设置。VM参数依赖于  JProfiler配置文件的位置;配置文件要与远程计算机上的保持同步。

1、wait for a connection from the Jprofiler GUI :  监控时 tomcat 需要由  JProfiler来启动

2、startup immediately,connect later with the JProfiler GUI: 立即启动,稍后与JProfiler 页面连接

3、profile offline ,JProfiler GUI cannot connect :在脱机情况下,jprofiler gui 无法连接

我选择第一个立即启动稍后连接(有兴趣的可以都尝试一下)

第五步:选择 Tomcat 启动脚本文件路径

第六步:指定JPfrofiler的端口(选择监测的连接端口)

JProfiler GUI 前端通过指定的端口连接被监测的  JVM,默认端口为 8849。请不要选择常用的端口,如 80或  8080。

第七步:检查需求通知

集成向导完成配置,所有必须的信息会进行通知,请检查,点击下一步。如图:

第八步:完成是否立即运行


这里就新建一个session完毕。配置完毕后你会在Open session 中看到你配置的内容

选择启动、因为在第四步中选择了第一种。所以会出现



选择第二个、之后会出现

点击ok、则启动成功了!

这里有个问题。

在第四步中如果选择了第二种。那么无论是tomcat启动没有启动JProfiler都启动不了抛出一个Connection error的错


待排查

而在第四步选择第三种方式时。tomcat有没有启动JProfiler抛上面相同的错误。同上面。

待排查。

1.3 Open snapshot 

可以通过打开*.jps文件来打开原来保存过的   session

2 管理 session(不做详解)

2.1      Application settings dialog 

这个页面可以是在创建session时管理,也可在open session右键编辑管理(如前面人工配置图片)

 session 名称 session类型等根据需要自定义



3、监测视图

3.1 内存视图

JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。

3.1.1所有对象(ALL    objects

所有对象视图显示所有加载的类的列表和在堆上分配的实例数。只有       Java  1.5 (JVMTI)才会显示此视图。要查看特定时间段对象的分配,并记录分配的调用堆栈,请使用“记录的对象视图”

有一个集合体等级选择器,你可以在以下几种类型中切换:

  • 类(classes):每一行显示一个单独的类,这是默认的集合体类型
  • 包(packages):每一行显示一个单独的包,子包不包含在内。在这个集合体等级内,表是树形的。你可以点击树节点,查看其包含的类
  • J2EE组件(   J2EE  components):每一行是一个 J2EE组件。此模式类似类模式中的过滤器,能够让你快速检查应用中加载的 J2EE组件。

在表中显示三行,可以排序

  • 名字:根据集合体等级的不同,分别显示类、包或      J2EE
  • 实例数:
  • 大小:显示所以分配实际的总大小。只包括相应指针的大小,不包含引用数组和实例的大小。以字节显示。只包括对象数据,不包括类使用的 JVM大小,也不包含类数据和本地变量大小。

更新频率可以在profiling settings dialog的miscellaneous tab中设置。所有对象视图的更新频率是根据堆上的对象数来自动调整的,如果堆上有太多对象,所有对象视图的计算变得昂贵,所以更新频率会降低。你可以随时刷新以获取最新数据。

你可以在class tracker增加包或类。如果类跟踪器没有记录,则开始记录class tracker 中配置的所有类;如果正在记录不同的对象类型,所以的记录数据被清空

你可以冻结所有的视图让所有的视图对象保持静态

你可以标记当前值并显示差异值。

3.1.2  记录的对象(Recorded objects

记录的对象视图显示所有已记录对象和数组的列表,包括堆上分配的实例数。只有已记录的对象在此视图中显示。配置记录的细节请参见  memory section overview

如果选择了某个包或类,你可以从记录对象视图跳转到分配调用树和分配热点。方法是右键点击,选择要跳转的视图。

你可以在class tracker增加包或类。如果类跟踪器没有记录,则开始记录class tracker 中配置的所有类;如果正在记录不同的对象类型,所以的记录数据被清空

记录的对象视图可以根据对象的活动状态进行过滤:

  • 活动对象(Live objects) 只显示当前在内存中的对象
  • 垃圾回收对象(Garbage collected objects) 被显示被回收的对象
  • 活动的和垃圾回收对象(Live and garbage collected objects) 显示所有被创建的对象

右键选择 Change view mode 或者使用  View->Change view mode切换三种模式

你可以标记当前值并显示差异值。

3.1.3  分配调用树(Allocation call tree  )

分配调用树视图 显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件

3.1.4  分配热点视图(Allocation hot spots    view

分配热点视图显示所选类的对象被分配在哪儿的方法列表。分配到至少占总数  1%的方法才会被显示。方法可以根据active filter sets设置进行过滤。此视图和CPU section 里的hot spots view视图有些类似,只是显示的是分配的类的实例数和数组而不是时间度量

对于每个热点都可以显示它的跟踪记录树。

3.1.5类跟踪(Class     tracker

3.2 堆遍历(Heap Walker) 

3.2.1类(Classes)

显示所有类和它们的实例

3.2.2分配(Allocations)

为所有记录对象显示分配树和分配热点

3.2.3索引(References)

为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能

3.2.4数据(Data)

为单个对象显示实例和类数据

3.2.5时间(Time)

显示一个对已记录对象的解决时间的柱状图

3.3 CPU视图

3.3.1调用树视图(Call     tree view

调用树显示一个线程从上向下调用树。可以根据过滤设置向上或向下过滤显示。

JProfiler自动检测   J2EE组件并在调用树中显示相关的节点。使用不同的图标显示不同的 J2EE组件类型

  • servlets:黄色倒心形
  • JSPs:蓝色倒心形
  • EJBs:红色倒心形

对于 JSPs  EJBs, JProfiler显示名为:

  • JSPs:JSP 源文件路径
  • EJBs:EJB界面名称

如果  URL可以被细分,每个   URL请求使用一个特殊的符号创建一个新的结点以URL:做前缀,后面跟上细分后的 URL请求

调用树视图集合体等级选择有四种:

  • 方法,也是默认等级。每个节点都是一个方法调用。特殊的      J2EE组件方法有他们自己的图标和显示名,上面讲到过。真实的类名以方括号括起
  • 类:每个节点是一个单独的类。特殊的      J2EE组件方法有他们自己的图标和显示名,上面讲到过。真实的类名以方括号括起
  • 包:每个节点是一个单独的包。不包括子包
  • J2EE组件:每个节点是一个  J2EE组件,如果组件有独立的显示名,真实类名省略。

调用树不显示 JVM中的所有方法,只显示:

  • 未过滤的类:根据你配置的过滤器设置没有过滤的类
  • 未过滤的类的第一级调用:未过滤的类对过滤的类的第一级调用,对过滤类的深一级的调用不显示。过滤的节点在左上角以红色标记。
  • 线程实体方法:方法       Runnable.run()和主方法总是被显示的,无论是否过滤一个特殊的结点是桥结点,本来在视图中不显示,但其子孙节点在视图中显示。如果在  view settings中设置了percentage bar模式,调用树中的每个节点都会显示一个百分比条,显示当前节点的内部时间占总时间的百分比,当前节点包括其所有子孙节点和红色高亮的部分在view settings可以设置以下内容:

这需要一个图片后期补

1)节点描述

  • 百分比数:考虑树的根或调用节点
  • 总时间度量:ms或  µs 。包括调用其它节点的总时间。
  • 内部时间度量:ms或  µs。内部时间,不包括调用非过滤类
  • invocation count:显示在此路径中节点被调用的频繁程度。
  • 是否显示方法调用全名
  • 是否显示方法调用签名(显示参数)
  • 是否在括号内显示平均时间

2)时间范围

  • 自动
  • s
  • ms
  • us

3)显示极限

  • 隐藏小于一定百分比的调用

4)百分比计算

  • 绝对
  • 相对

名称显示依赖集合体等级:方法、类、包和 J2EE组件

行数在以下情况下会显示:行数显示的是调用(invocation)的行数,还不是方法本身的行数

  • 集合体等级为方法
  • 在profiling settings设置中选择了显示行数
  • 调用类为未过滤类

你可以选择任何一个节点,然后选择 View->Set as root ,将选择的节点改为根节点。如果在 view settings 里,百分比基数设置为“total thread time”,百分比会按照新的根节点重新计算。选择 View->Show all返回所有视图

你可以停止或重启  CPU数据获取来清空调用数,也可以冻结所有视图让调用数保持静态

3.3.2热点视图(Hot     spot view

热点视图显示选择类型的调用列表。截去了占总时间小于 0.1%的点。

热点类型"hot spot type"下拉中可选择,包括两种:

1》方法调用(method calls)

  • method calls (show filtered classes separately)

从方法调用中计算显示的热点,被过滤的类计算自己的热点,默认为此模式。

  • method calls (add filtered classes to calling class)

从方法调用中计算显示的热点,被调用的类被加到调用类上,除非是线程实体方法(run和  main 方法)

  • 根据你选择的集合体等级不同,方法热点也会变换。

2》 J2EE 相关的调用

  • JDBC calls

显示的热点为JDBC 调用。需要在profiling settings中设置为可用。

  • JMS calls

显示的热点为JMS 调用。需要在profiling settings中设置为可用。

  • JNDI calls

显示的热点为JNDI 调用。需要在profiling settings中设置为可用。

  • URL invocations

显示的热点  URL调用。需要在profiling settings中设置为可用。在profiling settings中,你需要指定是所有的URL都被显示,还是调用一个未过滤类的URL才会被显示,默认为后者。

3.3.3调用图(Call     graph

调用图静态地显示所选择节点计算出线程调用图。节点可以为方法、类、包或  J2EE组件。

计算调用图,点击工具栏中的 Generate graph或者选择  View->Generate graph 。

在图形计算之前,会启动调用图向导。结果图形是静态的,并能够重新计算。调用图向导会记录你最近一次的选项。

调用图向导如下:

第一步:选择图选项(后期补图)

调用图能够为所有线程、一个线程组和单个线程的所有集成等级生成调用图。线程状态选择可以控制在调用图中显示的时间含义。如在线程状态中,选择了 Runnable,在调用图中,Total Time表示的就是线程处于  Runnable的时间。

第二步:选择第一个节点:选择生成调用树的首节点,点击完成,生成调用树。(后期补图)

3.4 线程视图

3.4.1线程历史视图

按照线程开始的顺序显示 JVM中所有线程状态的详细历史信息在视图左手点,线程的名字固定显示,其它部分是滚动度量工具,在水平轴上显示时间。时间轴的开始时间与 JVM的第一个线程的时间保持一致。每个活动的线程用带颜色的线标明,从线程开始到线程结束。颜色标识线程的状态:

  • 绿色

绿色表明线程正在运行并能接收 CPU时间。不表明线程正在消耗  CPU时间,只表明线程准备运行并且没有阻塞或睡眠。线程被分配了多少  CPU时间,依赖于不同的其它因素,如总的系统负载,线程优先级和调度的运算法则

  • 橙色

橙色表示线程在等待。线程正在睡眠并等待计时器或其它线程唤醒

  • 红色

红色表示线程阻塞。线程尝试进入同步代码区或由其它线程控制的同步方法

  • 蓝色

亮蓝色表示线程在 Net  I/O操作,线程在等待  JAVA库的网络操作完成。在线程监听 socket连接或者等待读写数据到  socket中时,会产生这种状态。

在视图的顶部,有一个线程过滤器,你可以按以下方法进行过滤:

1》活动状态      liveness status

活动的和死线程  Both alive and dead threads

  • 只显示活动的线程
  • 只显示死线程

2》名称

在文本框中,你可以输入线程的全名或部分名称进行过滤。也可以使用通配符("*"   and  "?")选择线程组。可以用逗号隔开多个过滤项进行过滤,如 AWT-, MyThreadGroup-*-Daemon.

线程历史视图有两种显示模式:

  • 固定时间范围      fixed time scale

此种模式下,时间轴的刻度一直保持不变,如果显示超出屏幕范围,可以使用滚动条查看,如果视图是在自动跟踪模式下,刚总是显示当时时间下的图形。也可以使用  zooming in或  zooming out来调整显示的范围。

  • 固定窗口范围      scale to fit window

此种模式下,在当前视图中会显示整个时间段的图形。Zooming在此模式下不能使用

3.4.2线程监控视图

显示当前运行的线程列表以及相关的时间和状态信息。

显示的六列:

  • 名称      Name

显示线程名称,如果线程没有被特别命名,则使用 JVM提供的名称。想让此视图更加有用,最好将你自己创建的线程使用 setName() 进行命名。

  • 组      Group

显示与此线程相关的线程组的名称

  • Start time

显示线程开始的时间,时间是根据 JVM中第一个线程创建的时间还计算的。

  • End time

只有在 view settings设置了显示死线程时才能看到这一列,显示线程死去的时间,或者线程还活着但成为空线程的时间,时间是根据 JVM中第一个线程创建的时间还计算的。

  • CPU time

显示线程消耗的 CPU时间

Note:  CPU时间一列,只有在profiling  settings中的Miscellaneous栏中设置CPU  time

type 为Estimated   CPU  times ,并且当你记录CPU数据时,CPU时间才会被度量,否则CPU时间一栏总是空的。

如果你的系统和 JVM不支持线程特定的  CPU时间报告,这栏也是空的

  • Creating thread

显示线程的名字和创建此线程的线程组。

  • Status

显示线程的状态,相当于线程历史视图中的状态报告

如果你监控的是 JAVA1.5或以上版本(JVMTI),在屏幕的上半部分就显示上面的表,屏幕的下半部分显示所选线程的线程创建堆栈跟踪。堆栈跟踪只有线程创建时记录CPU数据才会显示。

3.4.3死锁检测图形

JVM中所有死锁的图形化显示.

正常的状态如果没有死锁,就显示"No deadlocks detected"

死锁根据以下情况进行分析:

  • 在     JAVA平台上建立的最初的同步机制,如:使用同步的关键词
  • 在     java.util.concurrent包中的锁机制,不使用对象的监控而是不同的实现机制

死锁检测图形有以下特征:

1》在死锁中的线程以紫色的矩形表示。矩形包括以下信息:

  • 线程名
  • 线程组(括号括起来)

2》在死锁中的监视器以灰色的矩形表示,包括以下信息:

  • 监控的类
  • 可以用来继续跟踪的监控  ID

3》监控器的所有权用实线箭头表示。箭头指向从线程到监控器。想要了解详细信息,把鼠标停留到箭头上,可以看到提示窗口

4》导致线程死锁的阻塞原因使用虚线箭头来表示。前头指向从阻塞线程到线程想进行的监控器

3.4.4当前监控使用视图

显示当前等待和阻塞的操作

显示以下 6列:可排序

  • 时间      Time

事件起始时间

  • Duration

事件持续时间,事件必须还在进行中

  • Type

事件类型,  "waiting" 或"blocked"中的一种

  • Monitor ID

在特定的监控实例上识别多个事件的  ID

  • Monitor class

监控器的类。如果没有 JAVA对象与此监控器相关联,刚显示   [raw monitor]

  • Waiting thread

事件中正在或过去在等待的线程

3.4.5监控使用历史视图

显示监控中等待和阻塞的操作

3.4.6监控使用统计

显示监控使用的统计信息

点击工具栏上的 Calculate statistics,或者选择 View->Calculate statistics。

在统计开始前,会打开一个monitor usage statistics options对话框,统计结果表是静态的,并能重新计算

包级别的统计表包含下面 5列:

1》Monitors/Threads/Classes

在统计对象框中按分组标准显示名称

2》Block count

在此监控组中,阻塞操作的频繁程度

3》Block duration

在此监控组中,所有阻塞操作的累积的待续阻塞时间

4》Wait count

在此监控组中,等待操作的频繁程度

5》Wait duration

在此监控组中,所有等待操作的累积的待续等待时间

3.5 VM遥感监测视图

3.5.1(Heap)

显示最大的堆大小以及堆中已使用的和未使用的空间大小。可以显示线性图和区域图

3.5.2对象(Objects)

显示堆上对象的总数,分为数组和非数组。可以显示线性图和区域图

3.5.3垃圾回收(Garbage     collector)

显示垃圾回收活动,包括对象释放的一条线和对象移动的一条线。只显示已记录的对象,如果没有记录对象,此视图不可用

3.5.4类(Classes)

显示 JVM调用的类的总,分为过滤类和非过滤类

3.5.5线程(Threads)

显示 JVM中活着的线程总数,分为活动的线程和不活动的线程。

此篇文章写在这里,下一篇文件写如何将JProfiler集成在eclips中


本文转载自:https://blog.csdn.net/sinat_38259539/article/details/71023582

JProfiler安装、激活相关推荐

  1. VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法

    dio 2013旗舰版. VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法 1.下载后得到的是ISO文件,直接解压缩或用虚拟光驱加载运行都可以 2.无所不藏在这里直接解压 ...

  2. Keil 5安装激活教程

    Keil 5安装激活教程 听语音 | 浏览:10426 | 更新:2018-01-23 15:53 1 2 3 4 5 6 7 分步阅读 Keil 5安装激活教程 工具/原料 电脑 方法/步骤 首先打 ...

  3. 使用Supervisor监控代码的修改 - cmd安装激活篇

    文章目录 前言 · 问题描述 一.如何安装 supervisor? 二.如何启用 supervisor? 三.cmd执行流 · 截图示下 前言 · 问题描述 很多时候,我们都有这种苦恼的境遇: 每次对 ...

  4. 关于uipath软件安装激活手顺书——在线激活

    关于uipath软件安装激活手顺书 自uipath官方发布v2020.10版软件后,相信很多人都在为软件下载安装后如何激活或激活过程中遇到的问题点而犯困,接下来为大家整理出一套uipath软件激活的S ...

  5. JProfiler 安装使用教程

    文章目录 JProfiler 简介 JProfiler 安装 JProfiler 监控本地 JProfiler 监控服务器 Direct connection to SSH tunnel JProfi ...

  6. 如何下载Windows和office官方镜像安装包,及安装激活详细步骤

    一.Windows 1.下载最新版Windows10镜像 打开链接https://www.microsoft.com/zh-cn/software-download/windows10/ 苹果电脑: ...

  7. Dreamweaver 安装 激活

    来源地址:http://jingyan.baidu.com/article/e75aca8575e076142fdac65d.html 怎么安装和激活Dreamweaver cs6详细教程 1 安装D ...

  8. Mac M1系统 miniconda安装、配置conda环境,及在conda环境中安装激活QIIME2

    Mac M1系统 miniconda安装.配置conda环境,及在conda环境中安装激活QIIME2 1.适配版本的miniconda软件安装包下载(windows, MAC, LINUX) Min ...

  9. MATLAB r2014a 下载+安装+激活

    http://www.tangblog.com/71.html MATLAB r2014a,下载包就有7个多GB,装完占用9个多GB,慎装.界面还不错,稍有改良. 其实本文是下载+安装+破解啦.读书人 ...

  10. Pycharm 2019安装激活

    Pycharm 2019 Win10 安装激活 安装过程中遇到了一些问题,总结记录如下,后期方便查阅. 1.下载安装 ​ 通过pycharm官网下载相应版本进行安装(本教程针对win10系统)下载专业 ...

最新文章

  1. 参与2011年7月13日举行的Azure国际猜拳锦标赛,赢取5,000美元大奖
  2. 用户控件(显示用户信息,修改用户名密码)的WebPart预览版
  3. 今天JKS挂了,记录一下手动发云机上流程
  4. CodeForces - 123A prime permutation(并查集,水题)
  5. 在业务系统中寻求技术含量
  6. 使用OpenCV画折线图
  7. JavaScript(JS)中与正则表达式有关的方法介绍
  8. 解决 dockerfile 构建镜像报错: [WARNING]: Empty continuation lines will become errors in a future release.
  9. nineoldandroid使用_nineoldandroid 详细使用并且实现drawerlayout侧滑动画
  10. python中factor函数_Python入门-函数
  11. [转]编译器选项(摘自MSDN)及VC项目配置基础
  12. 深入理解Java中的底层阻塞原理及实现
  13. centos7的网络配置
  14. NSDate的简单用法
  15. python3.x教程_Python3.x基础教程1
  16. 斑马打印机链接数据库实现自动打印
  17. 在 Word 中插入域代码并设置域代码的格式(转)
  18. Redis-keys命令
  19. (转)CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解
  20. 计算机总是无法完成更新失败,Win10系统更新失败无法完成更新正在撤销更改的解决方法...

热门文章

  1. 包含查询match和对时间进行范围查询range的DSL
  2. 南丁格尔玫瑰图-修改扇形块的颜色与玫瑰图添加图片与文字
  3. word 2007 页眉页脚编辑心得
  4. html embed用法
  5. c php embed,使用PHP Embed SAPI实现Opcodes查看器
  6. Centos校准时间
  7. 根据银行卡号获取logo,并提取图片主题色(小程序版)
  8. 计算机桌面视频录制,电脑上怎么录制屏幕上的视频?
  9. springboot发送短信验证码
  10. python求三个整数最大值_Python 输入三个整数,输出最大值