官网/下载页面:https://www.oracle.com/technetwork/java/javase/downloads/index.html

一、环境说明

安装路径/usr/
版本(虚拟机)jdk1.8.0_51
版本(容器)jdk1.8.0_131

二、安装步骤

1、手动安装

1.1解压

tar -xf jdk-8u51-linux-x64.gz -C /usr

1.2 添加环境变量

#vim /etc/profile

export JAVA_HOME=/usr/jdk1.8.0_51
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# source /etc/profile

1.3 验证

# java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)

2、Salt安装

执行命令salt 'ip' state.sls jdk.jdk_18_0_51

 

 

三、常用工具

jstack命令,用于查看 Java 进程内的线程堆栈信息。

jps命令,显示当前所有java进程pid的命令

jmap命令,用于生成堆转储快照,可以使用该命令查看进程堆内存的使用情况,包括JVM 使用的 GC 算法、堆配置参数和各代中堆内存的使用情况。此外,也可以使用 jmap 工具把进程内存导出到文件中,再结合其他工具进行分析查看。

jhat工具,和 jmap 搭配使用,使用 jhat 工具分析jmap 导出来的堆快照文件。

jconsole图形界化工具,可以用在本地开发环境排查性能问题。

jvisualvm图形界化工具:图形化显示线程信息、内存区块和 GC使用情况,可用在开发环境排查性能问题。

jstat:JVM 统计信息监测工具,可以使用该工具查看分析各区内存使用和 GC 情况。

四、常用命令

1、jps:显示当前所有java进程pid的命令

常用指令

jps:显示当前用户的所有java进程的PID

jps -v 3331:显示虚拟机参数

jps -m 3331:显示传递给main()函数的参数

jps -l 3331:显示主类的全路径

2、jstat:显示进程中的类装载、内存、垃圾收集、JIT编译等运行数据

常用指令

jstat -gc 3331 250 20 :查询进程2764的垃圾收集情况,每250毫秒查询一次,一共查询20次。

jstat -gccause:额外输出上次GC原因

jstat -calss:查询类装载、类卸载、总空间以及所消耗的时间

3、jmap:生成堆转储快照(heapdump)

常用指令

jmap -heap 3331:查看java 堆(heap)使用情况

jmap -histo 3331:查看堆内存(histogram)中的对象数量及大小

jmap -histo:live 3331:JVM会先触发gc,然后再统计信息

jmap -dump:format=b,file=heapDump 3331:将内存使用的详细情况输出到文件,之后一般使用其他工具进行分析。

4、jhat:一般与jmap搭配使用,用来分析jmap生成的堆转储文件

由于有很多可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)可以替代,所以很少用。不过在没有可视化工具的机器上也是可用的。

常用指令

jmap -dump:format=b,file=heapDump 3331 

jhat heapDump:解析Java堆转储文件,并启动一个 web server

5、jstack:生成当前时刻的线程快照

常用指令

jstack 3331:查看线程情况

jstack -F 3331:正常输出不被响应时,使用该指令

jstack -l 3331:除堆栈外,显示关于锁的附件信息

五、常见问题定位过程

1、频繁GC问题或内存溢出问题

一、使用jps查看线程ID

二、使用jstat -gc 3331 250 20 查看gc情况,一般比较关注PERM区的情况,查看GC的增长情况。

三、使用jstat -gccause:额外输出上次GC原因

四、使用jmap -dump:format=b,file=heapDump 3331生成堆转储文件

五、使用jhat或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。

六、结合代码解决内存溢出或泄露问题。

2、死锁问题

一、使用jps查看线程ID

二、使用jstack 3331:查看线程情况

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐