JVM 性能监控与故障处理工具

news2024/9/26 5:21:09

基础工具

jps:虚拟机进程状态工具

jps 命令格式:jps [options] [hostid]

命令可选项解释:

选项解释
-q只输出 LVMID,省略主类的名称
-m输出传给 main 函数的参数
-l输出主类的全名,如果进程运行的 JAR 包,则输出 JAR 包的路径
-v输出虚拟机进程启动时的 JVM 参数
jstat:虚拟机统计信息监视工具

jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具,在没有 GUI 图像界面、只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的常用工具。

它既可以连接本地虚拟机也可以连接远程虚拟机,如果连接远程虚拟机,那 VMID 的格式应当是:[protocol:][//]lvmid[@hostname[:port]/servername]

jstat 命令格式:jstat [option vmid [interval[s|ms] [count]]]

参数 interval 和 count 代表查询间隔和次数,如果省略这两个参数,说明只查询一次;下面的命令查询 vmid 为 2764 的 JVM 进程,且每 250 毫秒查询一次,一共查询 20 次。

$ jstat -gc 2764 250 20

可选项参数如下:

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

示例如下:

本地启动一个 Tomcat 服务,然后用 jps 命令获取 vmid 为 17260

$ jps -l
11232 org.jetbrains.idea.maven.server.RemoteMavenServer36
5940 org.jetbrains.jps.cmdline.Launcher
15784
16828 org.jetbrains.jps.cmdline.Launcher
17260 org.apache.catalina.startup.Bootstrap
5244 sun.tools.jps.Jps

使用 jstat 命令查看 JVM 内存使用情况和 gc 的统计信息。
在这里插入图片描述
输出列对应的含义如下:

列名描述
S0C年轻代中第一个 survivor 区的容量(字节)
S1C年轻代中第二个 survivor 区的容量(字节)
S0U年轻代中第一个 survivor 区目前已使用的容量(字节)
S1U年轻代中第二个 survivor 区目前已使用的容量(字节)
EC年轻代中 Eden 的容量(字节)
EU年轻代中 Eden 目前已使用的容量(字节)
OC老年代的容量(字节)
OU老年代目前已使用的容量(字节)
MC方法区大小(字节)
MU方法区目前已使用的容量(字节)
CCSC压缩类空间大小(字节)
CCSU压缩类空间已使用大小(字节)
YGC从应用程序启动到采样时年轻代中 minor gc 次数
YGCT从应用程序启动到采样时年轻代中 minor gc 所用时间(s)
FGC从应用程序启动到采样时 Full gc 的次数
FGCT从应用程序启动到采样时 Full gc 所用时间(s)
GCT从应用程序启动到采样时 gc 用的总时间(s)

jstat 命令展示的信息可知,启动 Tomcat 后进行了 3 次

jinfo:Java 配置信息工具

jinfo(Configuration Info for Java)的作用是实时查看和调整虚拟机各项参数。我们知道 JVM 在启动的时候有非常多的配置参数,比如堆大小、垃圾收集器等,在没有显示指定的情况下,这些参数有默认值,当我们向查看这个默认值是多少的时候,就可以使用 jinfo 命令,jinfo 命令还支持动态修改部分 JVM 参数。

jinfo 命令使用说明如下:
在这里插入图片描述
jinfo 命令可选项的含义:

可选项含义
-flag <name>/-flag [+|-]<name>打印指定 JVM 参数的值,也可以启用/禁用指定的 JVM 参数
-flags打印 JVM 参数
-sysprops打印 Java 系统属性

其中 pid 就是通过 jps 查询到的 vmid,两个的值是一样的。

# 打印 VM 参数
$ jinfo -flags 17260
Attaching to process ID 17260, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.311-b11
Non-default VM flags: -XX:CICompilerCount=12 -XX:InitialHeapSize=232783872 -XX:+ManagementServer -XX:MaxHeapSize=3722444800 -XX:MaxNewSize=1240465408 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=77594624 -XX:OldSize=155189248 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -Djava.util.logging.config.file=C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_servlet-webapp_2\conf\logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53422,suspend=y,server=n -javaagent:C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\captureAgent\debugger-agent.jar -Dcom.sun.management.jmxremote= -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_servlet-webapp_2\jmxremote.password -Dcom.sun.management.jmxremote.access.file=C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_servlet-webapp_2\jmxremote.access -Djava.rmi.server.hostname=127.0.0.1 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -Dcatalina.base=C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_servlet-webapp_2 -Dcatalina.home=D:\IT\tomcat\apache-tomcat-8.5.78-windows-x64\apache-tomcat-8.5.78 -Djava.io.tmpdir=D:\IT\tomcat\apache-tomcat-8.5.78-windows-x64\apache-tomcat-8.5.78\temp

# 查看最大堆内存参数的值
$ jinfo -flag MaxHeapSize 17260
-XX:MaxHeapSize=3722444800
jmap:Java 内存映像工具

jmap(Memory Map for Java)命令用于生成堆转储快照,除了 jmap 命令,还可以使用 -XX:HeapDumpOnOutOfMemoryError 参数让虚拟机在内存溢出异常出现之后自动生成堆转储快照文件。

jmap 命令的使用说明如下:
在这里插入图片描述
jmap 命令可选项的含义如下:

可选项含义
-heap打印 Java 堆详细信息,如使用哪种收集器、JVM 参数、分代状况等
-dump:<dump-options>生成 Java 堆转储快照,dump-options 参数有 live:只 dump 存活的对象,如果没有指定,则 dump 出堆中的所有对象;format=b:二进制格式;file=<file>:dump 到指定文件,示例:jmap -dump:live,format=b,file=heap.bin <pid>
-F当虚拟机进程对 -dump 选项没有响应时,可使用这个选项强制生成 dump 快照,在这种模式下不支持 “live” 子选项

下面实战演示一下:

# 该选项的输出类似于 jinfo 命令,但是多了堆配置参数和垃圾收集器
$ jmap -heap 17260
Attaching to process ID 17260, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.311-b11

using thread-local object allocation.
Parallel GC with 13 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 3722444800 (3550.0MB)
   NewSize                  = 77594624 (74.0MB)
   MaxNewSize               = 1240465408 (1183.0MB)
   OldSize                  = 155189248 (148.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 58720256 (56.0MB)
   used     = 58026680 (55.33855438232422MB)
   free     = 693576 (0.6614456176757812MB)
   98.81884711129325% used
From Space:
   capacity = 9437184 (9.0MB)
   used     = 0 (0.0MB)
   free     = 9437184 (9.0MB)
   0.0% used
To Space:
   capacity = 9437184 (9.0MB)
   used     = 0 (0.0MB)
   free     = 9437184 (9.0MB)
   0.0% used
PS Old Generation
   capacity = 109576192 (104.5MB)
   used     = 15419240 (14.704933166503906MB)
   free     = 94156952 (89.7950668334961MB)
   14.071706379429575% used

17183 interned Strings occupying 1607936 bytes.

# 生成堆转储快照文件
$ jmap -dump:file=heap.bin 17260
Dumping heap to D:\IT\heap.bin ...
Heap dump file created

执行 jmap -dump:file=heap.bin 17260 命令之后,可以看到在当前目录下生成了名为 heap.bin 的文件,它是一个二进制文件,用文本格式打开会显示乱码。

jhat:虚拟机堆转储快照分析工具

不管你是通过 -XX:HeapDumpOnOutOfMemoryError 参数还是通过 jmap 得到的堆转储快照文件,由于它是一个二进制文件,所以要分析它必须要另外的工具,jhat 就是用来分析堆转储快照的命令行工具。

jhat 内置了一个微型的 HTTP/Web 服务器,生成堆转储快照的分析结果后,可以在浏览器中查看。因为分析堆转储快照是一个耗时且耗费硬件资源的过程,因此不要再部署应用程序的服务器上直接分析堆转储快照文件,而是将其复制到其他服务器上再进行分析。

jhat 命令的使用说明如下:

在这里插入图片描述

使用 jhat 命令来分析之前用 jmap 得到的堆转储快照文件 heap.bin 文件。

$ jhat heap.bin
Reading from heap.bin...
Dump file created Wed Oct 04 12:09:18 CST 2023
Snapshot read, resolving...
Resolving 208424 objects...
Chasing references, expect 41 dots.........................................
Eliminating duplicate references.........................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

看到上面的输出结果说明分析成功,因为默认端口号是 7000(这一点也可以从 jhat 命令的输出中看出来),所以我们在浏览器中键入 http://127.0.0.1:7000 查看分析结果。页面如下:
在这里插入图片描述
分析结果默认以包为单位进行分组显示,分析内存泄露问题主要会使用到其中的 “Heap Histogram”(与 jmap -hsito 功能一样)与 OQL 页签的功能,前者可以找到内存中总容量最大的对象,后者是标准的对象查询语言,使用类似 SQL 的语法对内存中的对象进行查询统计。

jstack:Java 堆栈跟踪工具

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或者 javacore 文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。线程出现停顿时通过 jstack 来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

jstack 命令的使用说明:

在这里插入图片描述
可选项的含义:

可选项含义
-F当正常输出的请求不被响应时,强制输出线程堆栈
-l除堆栈信息外,显示关于锁的附加信息
-m打印调用本地方法的堆栈信息
# jstack 会打印所有线程的堆栈信息,这里只展示了前三个线程
$ jstack -l 17260
2023-10-04 12:45:48
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.311-b11 mixed mode):

"http-nio-8080-AsyncTimeout" #47 daemon prio=5 os_prio=0 tid=0x00000111f42bc000 nid=0xa20 waiting on condition [0x0000000159efe000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1256)
        at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
        - None

"http-nio-8080-Acceptor" #46 daemon prio=5 os_prio=0 tid=0x00000111f42b8000 nid=0x3910 runnable [0x0000000159dfe000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:424)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:252)
        - locked <0x00000006e283b9f8> (a java.lang.Object)
        at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:455)
        at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:71)
        at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:129)
        at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
        - None

"http-nio-8080-Poller" #45 daemon prio=5 os_prio=0 tid=0x00000111f42b9800 nid=0x230c runnable [0x0000000159cfe000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
        at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
        at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
        at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
        - locked <0x00000006e2856638> (a sun.nio.ch.Util$3)
        - locked <0x00000006e2856648> (a java.util.Collections$UnmodifiableSet)
        - locked <0x00000006e28565b8> (a sun.nio.ch.WindowsSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
        at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:716)
        at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
        - None

从 JDK 5 开始,java.lang.Thread 类新增了一个 getAllStackTraces() 方法用于获取虚拟机中所有线程的 StackTraceElement 对象,使用这个方法可以通过简单的几行代码完成 jstack 的大部分功能,我们可以使用这个方法来做一个管理员页面,可以随时使用浏览器来查看线程堆栈。

可视化工具

JDK 中除了附带大量的命令行工具外,还提供了几个功能集成度更高的可视化工具,用户可以使用这些可视化工具以更加便捷的方式进行进程故障诊断和调试工作。这些工具主要包括 JConsole、VisualVM 和 JMC,其中 JConsole 在 JDK 5 中发布,VisualVM 在 JDK 6 中发布,Java Mission Control(JMC)在 JDK 7 中发布。

JConsole:Java 监视与管理控制台

JConsole(Java Monitoring and Management Console)是一款基于 JMX(Java Management Extensions)的可视化监视、管理工具。它的主要功能是通过 JMX 的 MBean(Managed Bean)对系统进行信息收集和参数动态调整。JMX 是一种开发性的技术,不仅可以用在虚拟机本身的管理上,还可以运行于虚拟机之上的软件中。

通过 JDK/bin 目录下的 jconsole.exe 启动 JConsole 后,会自动搜索出本机运行的所有虚拟机进程,而不需要用户自己使用 jps 来查询,如下图所示:

在这里插入图片描述
选择要监控的 JVM 进程,点击 “连接” 按钮进入 JConsole 主界面,主界面里共包括 “概述”、“内存”、“线程”、“类”、“VM 摘要” 和 “MBean” 六个页签。

页签的作用如下:

  • 概述:显示整个虚拟机主要运行数据的概览信息,包括 “堆内存使用情况”、“线程”、“类”、“CPU 使用情况” 四项信息的曲线图。
  • 内存:相当于可视化的 jstat 命令,用于监视被收集器管理的虚拟机内存的变化趋势。
  • 线程:相当于可视化的 jstack 命令,遇到线程停顿的时候可以使用这个页签的功能进行分析。
  • 类:显示虚拟机中类的统计信息
  • VM 摘要:当前连接的 VM 的摘要信息

在诊断 JVM 故障的时候我们最长使用 “内存” 和 “线程” 页签。

Java VisualVM:多合一故障处理工具

VisualVM(All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一,曾经在很长一段时间内是 Oracle 官方主力发展的虚拟机故障处理工具。Oracle 曾在 VisualVM 的软件说明中写上了 “All-in-One” 的字样,预示着它除了常规的运行监视、故障处理外,还将提供其他方面的能力,例如性能分析。

VisualVM 基于 NetBeans 平台开发工具,所以它具备通过插件扩展功能的能力,有了插件扩展支持,VisualVM 可以做到:

  • 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)
  • 监控应用程序的处理器、垃圾收集、堆、方法区以及线程的信息(jstat、jstack)
  • dump 以及分析堆栈转储快照(jmap、jhat)
  • 方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法
  • 离线程序快照:收集程序的运行时配置、线程 dump、内存 dump 等信息建立一个快照,可以将快照发送开发者处进行 Bug 反馈
  • 其他插件带来的无限可能性

初始状态下的 VisualVM 并没有加载任何插件,虽然基本的监视、线程面板的功能主程序都以默认插件的形式提供。

通过双击 %JAVA_HOME%/bin/jvisualvm.exe 来启动 VisualVM,主页面如下:

在这里插入图片描述

Java Mission Control:可支持在线的监控工具

和前面两款免费的可视化工具不同,JMC 如果要在生产环境使用需要商业授权才行,但是在个人开发环境下仍然是免费的。

需要注意的是,JDK 8 并不包含 JMC,你如果想要尝试 JMC 需要单独下载它,官方的下载地址是:https://jdk.java.net/jmc/,截至 2023-10-04,JMC 的最新版本是 JMC 8.3.1,从 JMC 8.1 开始运行 JMC 的 JDK 版本要求是 JDK 11 及以上,JMC 8.0 仍然仍然可以运行在 JDK 8 之上,所以你本地安装的是 JDK 8 的话,那么你需要下载 JMC 8.0 版本。

但是官网只提供了最新版本的下载连接,stackoverflow 上这个问题的答案列出了其他下载 JMC 发行版的地址,其中一个地址是:https://adoptium.net/zh-CN/jmc/,你可以在这个地址中下载到 JMC 8.0 版本。

在这里插入图片描述
解压之后的目录结构如下:

在这里插入图片描述
其中 jmc.imi 是配置文件,在启动 JMC 之前,你需要在 jmc.ini 文件中设置编码格式为 UTF-8,否则启动之后会出现乱码,在 jmc.ini 文件中添加一下内容即可:

-Dfile.encoding=UTF-8

最后双击 jmc.exe 启动 JMC。

在这里插入图片描述
在 ”JVM 浏览器“ 页签中展示了本机上正在运行的 JVM,双击其中一个进行连接,把连接后的进程展开可以看到每个进程的数据都有 MBean 和 JFR 两个数据来源。关于 MBean 这部分数据,与 JConsole 和 VisualVM 上取的内容是一样的,只是展示形式上有些差别。JFR 是和 MBean 不同的数据收集方式,它对被分析 JVM 程序性能影响和数据的质量都要比使用 MBean 要高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1078863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP8266 WiFi物联网智能插座—下位机软件实现

目录 1、软件架构 2、开发环境 3、软件功能 4、程序设计 4.1、初始化 4.2、主循环状态机 4.3、初始化模式 4.4、配置模式 4.5、运行模式 4.6、重启模式 4.7、升级模式 5、程序功能特点 5.1、日志管理 5.2、数据缓存队列 本篇博文开始讲解下位机插座节点的MCU软件…

淘宝京东拼多多商品价格采集分析接口

淘宝、京东、拼多多商品价格采集分析接口的具体信息&#xff0c;但是可以为您提供一些参考内容&#xff1a; 登录京东、天猫、淘宝、拼多多、苏宁、国美、唯品会等电商平台&#xff0c;注册并获取开发者账号和API接口权限。通过开发者账号和API接口权限&#xff0c;访问京东、…

Java之实现添加文字水印、图片水印功能

文章目录 1 添加文字水印、图片水印1.1 给图片添加文字水印1.1.1 获取原图片对象信息1.1.1.1 读取本地图片1.1.1.2 读取网络图片 1.1.2 添加水印1.1.3 确定水印位置1.1.3.1 设置固定值1.1.3.2 根据原图大小进行设置 1.1.4 获取目标图片1.1.5 完整代码 1.2 java实现给图片添加图…

HomeView/主页 的实现

1. 创建数据模型 1.1 创建货币模型 CoinModel.swift import Foundation// GoinGecko API info /*URL:https://api.coingecko.com/api/v3/coins/markets?vs_currencyusd&ordermarket_cap_desc&per_page250&page1&sparklinetrue&price_change_percentage24…

论文中的小细节——为什么论文中总是写WX而不是XW?

这是最近一个师弟问我的问题&#xff0c;为什么在论文里面总是写的 Y W X YWX YWX&#xff0c;而不是 Y X W YXW YXW&#xff1f;就算有的时候需要转置 W W W 或者 X X X&#xff0c;都不写 Y X W YXW YXW&#xff1f; 这个问题我最开始回答的是这就是约定俗成的写法&…

新能源三电系统测试如何快速连接,避免多次插拔?安规测试电连接器的作用

新能源汽车行业高速发展&#xff0c;电机、电动、电池作为核心三部件&#xff0c;必须有严格的检测已确保产品性能、质量、安全性符合要求。其中会涉及多种测试&#xff0c;如&#xff1a;防水防尘/气密测试、EOL测试、DCR测试等&#xff0c;需要连接相应的检测设备仪器。如何快…

LLaVA:大型语言和视觉助手,图片识别和理解能力让人惊叹

01简介 视觉指令调整&#xff1a;针对多模式 GPT-4 级别功能而构建的大型语言和视觉助手。 视觉聊天&#xff1a;构建多模式 GPT-4 级聊天机器人构建了包含 30 个未见过的图像的评估数据集&#xff1a;每个图像都与三种类型的指令相关联&#xff1a;对话、详细描述和…

查找浏览器中保存的密码

edge浏览器 谷歌浏览器 设置-》自动填充密码-》点击密码管理工具 后就可以查看到浏览器保存的密码了

PyTorch 入门

一、说明 深度学习是机器学习的一个分支&#xff0c;其中编写的算法模仿人脑的功能。深度学习中最常用的库是 Tensorflow 和 PyTorch。由于有各种可用的深度学习框架&#xff0c;人们可能想知道何时使用 PyTorch。以下是人们更喜欢使用 Pytorch 来完成特定任务的原因。 Pytorch…

LeetCode918 环形子数组最大值

这里写自定义目录标题 题目&#xff1a; 思路&#xff1a; 1、破环成链。 由于是环形数组&#xff0c;则数组的末端会与开头相连呈环状。 只需要将长度为N的数组拷贝一次&#xff0c;拼接在原数组后&#xff0c;即得到长度为2N的数组&#xff0c;该数组即为环形数组。 如&am…

mars3d的api文档关于addDynamicPosition查找使用说明

示例链接&#xff1a;功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 api地址&#xff1a;Mars3D三维可视化平台 | 火星科技 说明&#xff1a; 1.用户反馈不知道如何搜索这个属性的用法 说明&#xff1a; 1. 示例代码中的graphic.addDynamicPosition()说明这个addDynam…

electron 升级 v22 遇到问题

Electron 漏洞 https://mp.weixin.qq.com/s/5LpSJb_5uV8EIDOl3fz9Tw 由于 23以上不在支持win 7 8 8.1 所以我选择安装 v22.3.24 electron 22.3.24 node-sass 6.0.1 sass-loader 10.4.1 对应的版本 npm i node-sass6.0.1 --sass_binary_sitehttps://npm.taobao.org/mirrors…

vscode安装svn扩展(windows)

一、安装 1.1 环境说明 操作系统 windows 10 1.2 安装过程 1. 安装svn 双击安装程序 点击next 继续next 继续next 点击Install 在弹出框中点击 是 开始安装进度&#xff0c;一会将安装成功 安装结束 右键菜单栏中已经有svn选项&#xff0c;并且能正常拉取以…

一区TOP期刊提出一种植被覆盖度估算新方法

研究背景&#xff1a;光合植被(PV)主要指绿色的叶片&#xff0c;而非光合植被(NPV)包括凋落物和茎等。利用遥感数据估算植被覆盖(FVC)主要有三种方法&#xff1a;1) 回归模型2&#xff09;光谱混合物分析(SMA) 3) 数据驱动的模型。在这三种方法中&#xff0c;回归模型因其简单性…

网络安全--APT技术、密码学

目录 1. 什么是APT&#xff1f; 2. APT 的攻击过程&#xff1f; 3. 详细说明APT的防御技术 4. 什么是对称加密&#xff1f; 5. 什么是非对称加密&#xff1f; 6. 私密性的密码学应用&#xff1f; 7. 非对称加密如何解决身份认证问题&#xff1f; 8. 如何解决公钥身份认…

这篇被吹爆了的职称评审个人专业技术业务工作总结范文模板,不看就是你的损失了

职称评审需要写个人工作总结吗&#xff1f;甘建二告诉你毫无疑问&#xff0c;肯定是必须要的&#xff0c;对于评职称的人来说&#xff0c;准备一篇几千字的工作技术总结&#xff0c;是必不可少的申报材料之一。甚至对于初级职称评审来说&#xff0c;个人专业技术总结决定了一个…

三战时区问题

一、前言 前两天测试向我反馈生产环境挖机进口日期页面上展示的比数据库中存储的早了一天&#xff0c;但在测试环境是正常的&#xff0c;并且其它时间字段都没有任何问题&#xff0c;很是奇怪&#xff0c;安排开发排查没有头绪&#xff0c;然后我自己登录生产环境确认LInux系统…

别再瞎考证了,从事网络安全工作,这五大证书是加分项!

其他行业&#xff0c;对证书的要求可能并不明显&#xff0c;但在信息安全类的岗位中&#xff0c;大部分招聘信息中明确标明持有NISP、CISP等网络安全相关资质证书优先等。因此想要快速进入网络安全行业&#xff0c;通过学习并考取相关证书&#xff0c;是一个很不错的途径。 那么…

flutter开发实战-Universal Links配置及flutter微信分享实现

flutter开发实战-Universal Links配置及flutter微信分享实现 在最近开发中碰到了需要实现微信分享&#xff0c;在iOS端需要配置UniversalLink&#xff0c;在分享使用fluwx插件来实现微信分享功能。 一、配置UniversalLink 1.1、什么是UniversalLink Universal link 是Apple…

Vue中的router路由的介绍(快速入门)

路由的介绍 文章目录 路由的介绍1、VueRouter的介绍2、VueRouter的使用&#xff08;52&#xff09;2.1、5个基础步骤(固定)2.2、两个核心步骤 3、组件存放的目录&#xff08;组件分类&#xff09; 生活中的路由&#xff1a;设备和ip的映射关系&#xff08;路由器&#xff09; V…