常用的JDK调优监控工具整理

JVM 调优首先要做的就是监控 JVM 的运行状态,这就需要用到各种官方和第三方的工具包了

一、 JDK 工具包

JDK 自带的 JVM 工具可以分为命令行工具和可视化工具

  1. 命令行工具
    1. jps: JVM Process status tool:JVM进程状态工具,查看进程基本信息
    2. jstat: JVM statistics monitoring tool:JVM统计监控工具,查看堆,GC详细信息
    3. jinfo:Java Configuration Info:查看配置参数信息,支持部分参数运行时修改
    4. jmap:Java Memory Map:分析堆内存工具,dump堆内存快照
    5. jhat:Java Heap Analysis Tool:堆内存dump文件解析工具
    6. jstack:Java Stack Trace:Java堆栈跟踪工具
  2. 可视化工具
    1. VisualVM:性能分析可视化工具

1.1 命令 jps (列出 java 进程)

jps 工具全称,Java Viture Machine Process Status Tool

作用:查看 Java 进程信息,用来列出 Java 进程

jps :列出Java程序进程ID和Main函数名称
jps -q :只输出进程ID
jps -m :输出传递给Java进程(主函数)的参数
jps -l :输出主函数的完整路径
jps -v :显示传递给Java虚拟机的参数

案例jps

命令:jps -l

C:\Users\StoneYu>jps -l
11040 org.jetbrains.jps.cmdline.Launcher
15968 sun.tools.jps.Jps
4720 com.anmed.jjld.JjldApplication
13352
24024 org/netbeans/Main
12780 org.jetbrains.idea.maven.server.RemoteMavenServer36
25228 org.jetbrains.idea.maven.server.RemoteMavenServer36
25500 org.jetbrains.idea.maven.server.RemoteMavenServer36

1.2 命令 jstat (监控 java 进程状态)

jstat 全称:JVM statistics Monitoring Tool

**作用:**可以查看 Java 程序运行相关信息,可以通过它查看运行时堆信息的相关情况
参数格式:jstat -<options> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
options:必选参数由以下值构成

  1. -class:显示ClassLoader的相关信息
  2. -compiler:显示JIT编译的相关信息
  3. -gc:显示与GC相关信息
  4. -gccapacity:显示各个代的容量和使用情况
  5. -gccause:显示垃圾收集相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾收集的诱发原因
  6. -gcnew:显示新生代信息
  7. -gcnewcapacity:显示新生代大小和使用情况
  8. -gcold:显示老年代信息
  9. -gcoldcapacity:显示老年代大小
  10. -gcpermcapacity:显示永久代大小
  11. -gcutil:显示垃圾收集信息

**-t 可选参数:**如果包含此选项,则在输出中增加一列显示时间戳,单位是秒,从JVM启动到命令执行的时间。
**-h 可选参数:**用于定义输出时每行的宽度(或字符数),默认值通常是适合大多数终端的宽度。是一个数字,指定了行宽。
必选参数:用于指定要监控的Java进程的虚拟机ID。这个ID可以通过jps命令获取。
[]:可选参数,用于设置两次采样之间的间隔时间(单位为秒)。如果不指定,默认可能不打印多次结果,或者根据选项有不同的默认行为。
[]:可选参数,用于指定总共要采集并打印的样本数量。如果不指定,默认通常只打印一次结果。如果指定了但没有指定, 则会持续打印直到手动中断。

案例 jstat -gc

**功能:**输出进程内存区域大小,以及 GC 的详细信息
**监控命令 **jstat -gc 4720 250 5 进程 id 4720 采样间隔 250ms(也可以手动指定单位,不指定就是 ms) 采样 5 次
**监控结果 **
image.png

S0C:年轻代中第一个survivor(幸存区)的容量 (单位kb)
S1C:年轻代中第二个survivor(幸存区)的容量 (单位kb)
S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (单位kb)
S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (单位kb)
EC :年轻代中Eden的容量 (单位kb)
EU :年轻代中Eden目前已使用空间 (单位kb)
OC :Old代的容量 (单位kb)
OU :Old代目前已使用空间 (单位kb)
MC:metaspace的容量 (单位kb)
MU:metaspace目前已使用空间 (单位kb)
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC :从应用程序启动到采样时年轻代中gc次数
YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
FGC :从应用程序启动到采样时old代(全gc)gc次数
FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

案例 jstat-gcutil

功能:输出的是进程内存区域百分百 及 GC详细信息
案例命令:jstat -gcutil 4720 250 5
监控结果
image.png

S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E 年轻代中Eden(伊甸园)已使用的占当前容量百分比
O old代已使用的占当前容量百分比
M metaspace已使用的占当前容量百分比
CCS 压缩使用比例
YGC 从应用程序启动到采样时年轻代中gc次数
YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
FGC 从应用程序启动到采样时old代(全gc)gc次数
FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)

1.3 命令 jinfo (查看甚至修改 java 程序拓展参数)

jinfo : java Configuration Info

作用:查看正在运行的 Java 程序的拓展参数,甚至支持修改运行过程中的部分参数。
格式:jinfo [option] <pid>

-flags 打印虚拟机 VM 参数
-flag <name> 打印指定虚拟机 VM 参数
-flag [+|-]<name> 打开或关闭虚拟机参数
-flag <name>=<value> 设置指定虚拟机参数的值

案例 jinfo
案例命令:jinfo -flags 4720
案例输出

PS C:\Program Files\Java\jdk1.8.0_221\bin> ./jinfo -flags 4720
Attaching to process ID 4720, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.221-b11
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:+FlightRecorder -XX:InitialHeapSize=536870912 -XX:+ManagementServer -XX:MaxHeapSize=8573157376 -XX:MaxNewSize=2857369600 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=178782208 -XX:OldSize=358088704 -XX:TieredStopAtLevel=1 -XX:+UnlockCommercialFeatures -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3\lib\idea_rt.jar=57449:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3\bin -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dfile.encoding=UTF-8

1.4 命令 jmap (查看内存情况)

jmap : Memory Map

作用:jmap 用来查看堆内存使用情况,一般结合 jhat 使用。dunmp 堆内容时会暂停用户线程,生产环境使用的时候需要注意。并且该命令需要较高权限。
格式:jmap [option] <pid> | <executable core> | [<server-id@]remote-hostname-or-IP>

案例 jmap 打印共享对象及路径

命令: ./jmap 4720
image.png

案例 jmap -heap pid 打印堆详细信息

命令:./jmap -heap 4720
image.png
这里可以看到堆内存分配了 8g/32G 是我电脑物理内存的 1/4 ,因为我没有指定堆内存大小。

案例 jmap -histo:live pid 打印存活的对象统计信息

命令:jmap -histo:live pid
描述:显示堆中对象的统计信息:其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果ja指定了live子选项,则只计算活动的对象。
image.png

案例 jmap -clstats pid 打印加载器状态信息

命令:jmap -clstats 4720
描述:打印类加载器信息:打印Java堆内存的方法区的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。
image.png

案例 jmap -finalizerinfo 4720 查看等待终结的对象信息

命令:jmap -finalizerinfo 4720
描述:打印等待终结的对象信息
image.png

案例 jmap: dump 堆数据快照

命令: jmap -dump:format=b,file=heapdump.hprof pidformat=b 表示保存成二进制,这也是最常用的格式
描述:生成堆转储快照dump文件:以二进制格式转储Java堆到指定文件中。如果指定了live子选项,堆中只有活动的对象会被转储。浏览heap dump 可以使用jhat 读取生成的文件,也可以使用MAT等堆内存分析工具。
注意:dump 的过程耗时较长,并且会暂停应用。线上一定慎用
image.png

1.5 jhat 堆快照分析工具

jhat:Java Heap Analysis Tool

格式:jhat [ options ] heap-dump-file

  1. jhat 命令会解析Java堆转储文件,并启动一个 web server。然后用浏览器来查看/浏览 dump 出来的 heap二进制文件。
  2. jhat 命令支持预先设计的查询,比如:显示某个类的所有实例。还支持 对象查询语言(OQL)。 OQL有点类似SQL,专门用来查询堆转储。

案例 jhat

执行命令:./jhat C:\Users\StoneYu\Desktop\临时文件\testdump.hprof
image.png
启动了一个 Server 服务,端口为 7000
image.png

1.6 jstack 线程跟踪

jstack:Java Stack Trace

作用

  1. jstack是Java虚拟机自带的一种堆栈跟踪工具,用于生成java虚拟机当前时刻的线程快照。
  2. 线程快照是当前Java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待、等等。

线程快照中需要留意的状态

  1. 死锁,Deadlock(重点关注)
  2. 等待资源,Waiting on condition(重点关注)
  3. 等待获取管程,Waiting on monitor entry(重点关注)
  4. 阻塞,Blocked(重点关注)
  5. 执行中,Runnable
  6. 暂停,Suspended
  7. 对象等待中,Object.wait() 或 TIMED_WAITING
  8. 停止,Parked

使用方式

jstack [ option ] pid 查看当前时间点,指定进程的dump堆栈信息。
jstack [ option ] pid > 文件 将当前时间点的指定进程的dump堆栈信息,写入到指定文件中。
# 注:若该文件不存在,则会自动生成; 若该文件存在,则会覆盖源文件。
jstack [ option ] executable core 查看当前时间点,core文件的dump堆栈信息。
jstack [ option ] [server_id@]<remote server IP or hostname> 查看当前时间点,远程机器的dump堆栈信息。
-F # 当进程挂起了,此时'jstack [-l] pid'是没有相应的,这时候可使用此参数来强制打印堆栈信息,强制jstack),一般情况不
需要使用。
-m # 打印java和native c/c++框架的所有栈信息。可以打印JVM的堆栈,以及Native的栈帧,一般应用排查不需要使用。
-l # 长列表. 打印关于锁的附加信息。例如属于java.util.concurrent的ownable synchronizers列表,会使得JVM停顿得长久
得多(可能会差很多倍,比如普通的jstack可能几毫秒和一次GC没区别,加了-l 就是近一秒的时间),-l 建议不要用。一般情况不需
要使用。
-h or -hel # 打印帮助信息

案例 jstack pid 打印堆栈

执行命令 ./jstack 25356
image.png

1.7 VisualVM JVM 可视化监控工具

介绍:
VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时
获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。
配置监控远程 JVM 的方法
远程服务需要配置 jmx 监控,配置 rmi 通信端口和地址

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=172.26.233.198
-Dcom.sun.management.jmxremote.rmi.port=9999
#JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -
Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -
Djava.rmi.server.hostname=123.56.254.18 -Dcom.sun.management.jmxremote.rmi.port=9999

image.png

二、第三方工具

2.1 GCEasy (GC 日志可视化分析网站)

网站地址:https://gceasy.io/
作用:能直接可视化分析 GC 日志,并给出问题分析和建议。
GCeasy-report-gc-default.pdf
image.png

2.2 MAT (Memory Analyzer tool 内存分析工具)

介绍
MAT是一个强大的可视化内存分析工具,可以快捷、有效地帮助我们找到内存泄露,减少内存消耗分析工具。MAT是MemoryAnalyzer tool的缩写,是一种快速,功能丰富的Java堆分析工具,能帮助你查找内存泄漏和减少内存消耗。
功能

  1. 找到最大的对象,因为MAT提供显示合理的累积大小(retained size)
  2. 探索对象图,包括inbound和outbound引用,即引用此对象的和此对象引出的
  3. 查找无法回收的对象,可以计算从垃圾收集器根到相关对象的路径
  4. 找到内存浪费,比如冗余的String对象,空集合对象。
  5. 分析内存溢出、分析内存泄露、查看对象个数及对象内存占用、观察对象回收后释放空间大小、观察线程栈

安装

  1. MAT安装有两种方式,一种是以eclipse插件方式安装,一种是独立安装。
  2. 独立安装在MAT的官方文档中有相应的安装文件下载,下载地址为:[https://www.eclipse.org/mat/downloads.php](https://www.eclipse.org/mat/downloads.php)

MAT 的一些概念

  1. 内存泄漏与内存溢出
    1. 内存泄露:对象是垃圾了,还存在被GCRoots引用的情况,无法被垃圾收集器回收。解决方案:找出泄漏的代码位置和原因,具体问题具体解决;
    2. 内存溢出:内存中的对象非常多,堆空间不足,就会出现。解决方案:检查堆大小设置是否合理,检查是否存在对象生命周期太长、持有状态时间过长的情况。
  2. shallow heap及retained heap
    1. shallow heap:对象本身占用内存的大小,也就是对象内存区域的总和。
    2. retained heap:对象及对象引用链中所有对象的大小总和,如果一个对象被释放掉,因为该对象的释放而被释放的所有的对象的大小。相对于shallow heap,Retained heap可以更精确的反映一个对象实际占用的大小。
  3. outgoing references与incoming references
    1. outgoing references :表示该对象的出节点(被该对象引用的对象)。
    2. incoming references :表示该对象的入节点(引用到该对象的对象)。
  4. Dominator Tree Dominator Tree对象的支配树:帮助我们快速的发现占用内存最大的块,也能帮我们分析对象之间的依赖关系。

2.3 GCViewer 开源的GC日志分析工具

GCViewer是一款开源的GC日志分析工具。项目的 GitHub 主页对各个指标提供了完整的描述信息 需要安装JDK才能使用。借助GCViewer日志分析工具,可以非常直观地分析出待调优点。作为 GCEasy 的备份
可从以下几方面来分析:

  1. Memory:分析Totalheap、Tenuredheap、Youngheap内存占用率及其他指标,理论上内存占用率越小越好;
  2. Pause:分析Gc pause、Fullgc pause、Total pause三个大项中各指标,理论上GC次数越少越好,GC时长越小越好;

项目主页:https://github.com/chewiebug/GCViewer

2.4 阿里的 Arthas 线上监控诊断工具

image.png
项目官网:https://arthas.aliyun.com/
介绍:Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率
Arthas 支持 JDK 6+,支持 Linux、Mac、Winodws,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问
题的定位和诊断。
Arthas 功能:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到 JVM 的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?

Arthas 常见命令

jvm:查看当前 JVM 的信息
thread:查看当前 JVM 的线程堆栈信息,
-b 选项可以一键检测死锁
-n 指定最忙的前N个线程并打印堆栈
trace:方法内部调用路径,并输出方法路径上的每个节点上耗时,服务间调用时间过长时使用
stack:输出当前方法被调用的调用路径
Jad:反编译指定已加载类的源码,反编译便于理解业务
logger:查看和修改 logger,可以动态更新日志级别

Arthas支持使用管道对上述命令的结果进行进一步的处理,如 sm java.lang.String * | grep 'index'
grep——搜索满足条件的结果
plaintext——将命令的结果去除ANSI颜色
wc——按行统计输出结果

后台异步任务

当线上出现偶发的问题,比如需要watch某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考
这里
使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session断开不影响任务执行(生命周期默认为1天)
jobs——列出所有job
kill——强制终止任务
fg——将暂停的任务拉到前台执行
bg——将暂停的任务放到后台执行

用户数据回报:

  1. 在 3.1.4 版本后,增加了用户数据回报功能,方便统一做安全或者历史数据统计。
  2. 在启动时,指定 stat-url ,就会回报执行的每一行命令,比如: ./as.sh --stat-url
  3. 'http://192.168.10.11:8080/api/stat’
  4. 在tunnel server里有一个示例的回报代码,用户可以自己在服务器上实现
  5. 这里只列出常用命令,完整列表参考命令列表:https://github.com/alibaba/arthas/blob/master/README_CN.md

案例 查看 dashboard

输入dashboard,按 回车/enter ,会展示当前进程的信息,按 ctrl+c 可以中断执行。
image.png

案例 thread -1 查看线程信息

通过thread命令来获取到应用进程的线程信息,thread -1 会打印线程统计信息
image.png

案例 jad 反编译项目代码

命令 jad com.anmed.jjld.JjldApplication
image.png

案例 watch 监听方法返回值

通过watch命令来查看 com.hero.web.user.controller#UserController 函数的返回值
命令:watch com.hero.web.user.controller.UserController findByUsername returnObj
image.png

退出 Arthas

  • 如果只是退出当前的连接,可以用 quit 或者 exit 命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时
  • 可以直接连接上。如果想完全退出arthas,可以执行 stop 命令

Java 生成堆快照的方式

  1. 使用 jmap -dump 可以在 JVM 运行时获取 dump
  2. 使用 jconsole 选项通过 HotSpotDiagnosticMXBean 从运行时获得堆转储。
  3. 使用 VisualVM 也可以直接获得堆存储
  4. 应用启动时增加虚拟机参数,-XX:+HeapDumpOnOutOfMemoryError 抛出 OOM 时,会自动会自动执行堆转储。

Java 项目保存 GC 日志的 vm 参数

如果想要确定JVM性能问题瓶颈,需要分析GC日志

  1. -XX:+PrintGCDetails 开启GC日志创建更详细的GC日志,默认关闭
  2. -XX:+PrintGCTimeStamps,-XX:+PrintGCDateStamps 开启GC时间提示,开启时间便于我们更精确地判断几次GC操作之间的时两个参数的区别时间戳是相对于0(依据JVM启动的时间)的值,而日期戳(date stamp)是实际的日期字符串由于日期戳需要进行格式化,所以它的效率可能会受轻微的影响,不过这种操作并不频繁,它造成的影响也很难被我们感知。
  3. -XX:+PrintHeapAtGC 打印堆的GC日志
  4. -Xloggc:./logs/gc.log 指定GC日志路径

Idea 配置案例:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:C:\Users\StoneYu\Desktop\临时文件\gc-default.log -XX:+PrintCommandLineFlags

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DomoAI让你轻松变身视频达人!支持20s完整视频生成!

账号注册 官网&#xff1a;https://www.domoai.app/zh-Hant/library 功能 支持不同风格的视频类型&#xff0c;支持图片转视频&#xff0c;支持文字转图片&#xff0c;支持静态图片变为动态。 可以切换语言为中文 风格转换 选择不同风格的 支持生成20s&#xff0c;目前接触…

0. 云原生之基于乌班图远程开发

云原生专栏大纲 文章目录 安装乌班图配置静态IP重置root密码开启root远程登录开启远程SSH访问安装docker安装docker-compose安装Edge浏览器安装搜狗输入法安装TeamViewer安装虚拟显示器安装JDK安装maven安装vscodevscode插件安装VSCode配置maven、git、jdk、自动报错vscode快捷…

2024年【陕西省安全员C证】考试及陕西省安全员C证最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证考试参考答案及陕西省安全员C证考试试题解析是安全生产模拟考试一点通题库老师及陕西省安全员C证操作证已考过的学员汇总&#xff0c;相对有效帮助陕西省安全员C证最新解析学员顺利通过考试。 1、【多…

树以及二叉树的定义和特点

目录 开场白 树的定义 结点的分类 结点间的关系 树的其他相关概念 树的存储结构 孩子兄弟表示法 二叉树的定义 二叉树的特点 特殊二叉树 满二叉树 完全二叉树 二叉树的性质 二叉树的存储结构 开场白 这一篇文章是关于树的知识&#xff0c;这是一个比较特…

Python 学习 用Python第二册 第9章内容解八皇后问题

----用教授的方法学习 目录 1.八皇后问题 2.状态表示(抽象) 3.检测冲突 4.基线条件 5.递归条件 6.结尾 1.八皇后问题 深受大家喜爱的计算机科学谜题&#xff1a;你需要将8个皇后放在棋盘上&#xff0c;条件是任何一个皇后都不能威胁其他皇后&#xff0c;即任何两个皇后…

利用485缓存器实现两主一丛RS485串行通信

作者:艺捷自动化&#xff0c;其旗下产品有艺捷自动化网站和易为二维码小程序&#xff08;微信&#xff09; 对于工控自动化领域的电气工程师来说&#xff0c;基于RS485的串行通讯是最常见的。绝大部分仪表都能支持这种通讯方式。RS485通讯&#xff0c;是一种异步半双工模式&…

誉天5月红帽战报:恭喜14名学员通过RHCE认证,通过率87.5%!

红帽认证是全球公认的Linux权威认证之一&#xff0c;对于Linux从业者来说具有很高的价值和认可度。旨在评估考生在Linux系统管理和应用方面的专业知识和技能。红帽考试是Linux从业者提升自身技能水平和职业竞争力的重要途径之一。 5月份&#xff0c;誉天14名学员通过了RHCE认证…

css入门宝典

3.1.4 通配符选择器 语法 : *{} 作用 : 让页面中所有的标签执行该样式,通常用来清除间距 例子 : *{ margin: 0; //外间距 padding: 0; //内间距 } 一 CSS基本语法 1基础知识 1.1概述 Css (层叠样式表)是种格式化网页的标准方式&#xff0c; 用于控制设置网页的样式&#xff…

WSL Ubuntu安装TensorFlow-GPU、PyTorch-GPU

在Windows 11的WSL Ubuntu中安装TensorFlow-GPU、PyTorch-GPU 0、WSL Ubuntu安装 在Windows 11的商店中下载即可&#xff0c;此处以Ubuntu22.04.3为例 1、CUDA Toolkit安装 参考公孙启的文章Windows11 WSL Ubuntu Pycharm Conda for deeplearning前往nVidia官网下载CUDA …

transformer模型首次体验代码

前言 首先是安装python&#xff0c;更新pip源到清华源。安装transformer pip install transformer安装jupyter lab&#xff0c;也简单一行 pip install jupyterlab现在不想用anaconda了&#xff0c;因为国内没有源了&#xff0c;国外的又慢。直接用pip吧。 然后开始体验之旅…

DeepDriving | CUDA编程-05:流和事件

本文来源公众号“DeepDriving”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;CUDA编程-05&#xff1a;流和事件 1 CUDA流 在CUDA中有两个级别的并发&#xff1a;内核级并发和网格级并发。前面的文章DeepDriving | CUDA编程-04&…

buildroot编译出错you should not run configure as root

虚拟机版本&#xff1a;ubuntu-22.04.4 问题 buildroot在图形配置后&#xff0c;执行 sudo make开始编译出现以下错误configure: error: you should not run configure as root (set FOenvironment to bypass this check) 在网上看到说在/etc/profile文件中添加以下内容 exp…

Ngunx + Tomcat 负载均衡和动态分离

目录 一、tomcat简介 二、Nginx 负载均衡 1. Nginx 应用 2. Nginx 负载均衡实现原理 2.1 正向代理 2.2 反向代理 2.3 具体过程接收请求&#xff1a;Nginx作为反向代理服务器&#xff0c;接收客户端的请求。选择后端服务器&#xff1a;根据预先配置的负载均衡算法&#xf…

23种设计模式之享元模式

享元模式 1、定义 享元模式&#xff1a;运用共享技术有效的支持大量细粒度对象的复用 2、享元模式结构 Flyweight&#xff08;抽象享元类&#xff09;&#xff1a;通常是一个接口或抽象类&#xff0c;在抽象享元类中声明了具体享元类公共的方法&#xff0c;这些方法可以向外…

从多线程设计模式到对 CompletableFuture 的应用

大家好&#xff0c;我是 方圆。最近在开发 延保服务 频道页时&#xff0c;为了提高查询效率&#xff0c;使用到了多线程技术。为了对多线程方案设计有更加充分的了解&#xff0c;在业余时间读完了《图解 Java 多线程设计模式》这本书&#xff0c;觉得收获良多。本篇文章将介绍其…

几种经典查找算法

几种经典查找算法 顺序查找法二分查找法判定树 二叉查找树&#xff08;BST&#xff09;索引查找B-树B树散列表&#xff08;hash&#xff09;查找 顺序查找法 顺序查找的平均查找长度为&#xff1a; 时间复杂度为0&#xff08;n&#xff09;&#xff1b; 二分查找法 int bin…

CNN学习(7):用C++实现简单不同参数的卷积模型

目录 一、参数说明和计算公式 1、符号约定 2、输出大小计算公式 二、不同类型的卷积 1、输入3*3*1&#xff0c;卷积核3*3*1&#xff0c;输出1*1*1 &#xff08;1&#xff09;实现代码 &#xff08;2&#xff09;代码说明 2、输入4*4*1&#xff0c;卷积核3*3*1&#xff…

环保评A的意义与价值

环保评A&#xff0c;这个看似简单的称谓&#xff0c;背后却蕴藏着深厚的环保理念和实践标准。在当今社会&#xff0c;环保已经成为一项全球性的议题&#xff0c;各国都在努力推动绿色发展&#xff0c;实现可持续发展目标。那么&#xff0c;环保评A究竟是全国性的认证还是地方性…

Java SSTI服务端模版注入漏洞原理与利用

文章目录 前言Velocity基础语法基础示例命令执行 靶场实践漏洞代码漏洞验证检测工具 FreeMarker基础示例漏洞示例CMS案例 Thymeleaf基础示例漏洞示例安全方案 总结 前言 SSTI&#xff08;Server Side Template Injection&#xff09;全称服务端模板注入漏洞&#xff0c;在 Jav…

开放式耳机值得入手买吗?可以对比这几款开放式耳机看看

居家办公时&#xff0c;选择一款合适的耳机能够有效地提高工作效率。入耳式耳机虽然能够有效地隔绝外界噪音&#xff0c;但长时间佩戴会对耳朵造成负担&#xff0c;甚至引发耳道感染。而头戴式耳机虽然能够提供更好的音质&#xff0c;但体积较大&#xff0c;佩戴起来不够灵活。…