一、概述
1.1Java开发和运行过程
- 编写阶段:采用各种编辑工具,编写.java文件
- 编译阶段:采用javac.exe对java文件编译,产生.class文件
- 运行阶段:采用java.exe加载.class文件运行

详细过程


1.2相关概念

javaOS管理
JavaOS是一个基于Java语言的操作系统,它的管理主要涉及以下几个方面:
资源管理:JavaOS需要管理计算机上的各种资源,如内存、磁盘空间、CPU等。操作系统需要协调这些资源,使它们能够有效地被应用程序使用。
进程管理:JavaOS需要管理运行在计算机上的各种应用程序,这些应用程序是由多个进程组成的。操作系统需要管理这些进程,为它们分配资源,控制它们的执行顺序和时间片等。
文件系统管理:JavaOS需要管理计算机上的文件系统,包括文件的创建、读写、删除等操作。操作系统需要维护文件的目录结构,确保文件系统的完整性和安全性。
网络管理:JavaOS需要管理计算机上的网络资源,如网卡、网络连接等。操作系统需要提供网络服务,如TCP/IP协议栈、网络文件共享等。
设备驱动程序管理:JavaOS需要管理计算机上的各种设备驱动程序,如打印机驱动程序、音频驱动程序等。操作系统需要确保设备驱动程序的正确性和稳定性。
以上是JavaOS管理的几个方面,其中最重要的是资源管理和进程管理,因为它们直接影响了操作系统的性能和稳定性。
java JVM管理
JVM是负责将Java程序编译成字节码并将其解释执行的环境。JVM还为程序提供内存管理、垃圾回收、线程管理等服务。
以下是JVM管理的一些重要方面:
内存管理:JVM会为程序分配内存空间,并在需要时动态分配更多的内存。它还负责释放不再使用的内存,以防止程序泄漏内存和崩溃。
垃圾回收:JVM会自动监视程序的内存使用情况,并在必要时自动清理不再使用的内存空间。这称为垃圾回收。垃圾回收可确保程序不会浪费内存并避免内存泄漏。
线程管理:JVM管理程序的线程,确保它们在正确的时间运行,并协调它们之间的共享资源。JVM可以检测线程死锁和死循环,并采取措施避免这些问题。
类加载:JVM负责将程序中使用的类加载到内存中,以便可以执行其方法。
执行引擎:JVM还有一个执行引擎,它可以解释字节码并将其转换为机器代码,以便能够在计算机上运行。
JVM管理对于Java程序的正常运行至关重要,因此开发人员需要确保在开发过程中优化程序以减少内存使用和资源消耗。
二、OS管理
2.1管理命令概述

2.2top命令
命令在linux章节中详细描述,在此不做赘述
Linux top命令用于实时显示进程的动态,例如CPU使用率、内存使用情况、进程数等信息。以下是常用的top命令选项和参数:
-d <秒数>:设置top命令更新进程信息的时间间隔。
-H:显示进程的线程信息。
-p <进程号>:只显示指定进程的信息。
-u <用户名>:只显示指定用户的进程信息。
-i:不显示闲置进程(IDLE)。
-c:显示完整的命令行信息。
-b:以批处理模式运行,将结果输出到文件中。
top命令的交互式命令:
d:改变刷新时间间隔。
q:退出top命令。
k:杀死指定进程。
r:修改指定进程的优先级。
s:改变top命令的显示方式,可以选择按CPU使用率或内存使用率排序。
h:查看帮助信息。
2.3vmstat命令

vmstat(virtual memory statistics)命令是一个强大的系统性能分析工具,在Linux系统中被广泛使用。vmstat命令可以显示虚拟内存、进程、CPU活动等系统性能信息。下面是vmstat命令的详细介绍。
命令格式:
javavmstat [选项] [时间间隔] [重复次数]
常用选项:
-a:显示活动和非活动内存的详细信息。
-d:显示磁盘活动的信息。
-p:显示进程详细信息。
-s:显示系统内存的统计信息。
时间间隔和重复次数:用于指定命令显示的时间间隔和显示的次数,默认时间间隔是1秒,重复次数是无限次,可以通过使用Ctrl+C或指定重复次数来停止命令执行。
vmstat命令输出结果解释:
r:等待运行的进程数。
b:处于非中断或可中断睡眠状态的进程数。
swpd:交换内存使用量。
free:空闲内存数量。
buff:缓存内存数量。
cache:缓存内存数量。
si:每秒从磁盘交换到内存的数据量。
so:每秒从内存交换到磁盘的数据量。
bi:每秒从磁盘读取的块数。
bo:每秒写入磁盘的块数。
in:每秒中断次数。
cs:每秒CPU上下文切换次数。
us:用户空间程序消耗CPU时间百分比。
sy:内核空间程序消耗CPU时间百分比。
id:CPU空闲时间百分比。
wa:等待I/O操作完成的CPU时间百分比。
2.4iostat命令
2.5windows任务管理器

2.6 perfmon工具

2.7进一步

三、JDK管理工具(JVM管理)
3.1工具概述
3.2jps工具
jps (Java Virtual Machine Process Status Tool) 是一个命令行工具,用于显示正在运行的 Java 进程的进程 ID(PID)和类名。jps 工具可用于快速查找正在运行的 Java 进程,以便进行调试或监视。jps 命令用法如下:
jps [-q] [-m] [-l] [-v]
其中,-q 仅显示进程 ID,-m 显示进程 ID 和程序名,-l 显示进程 ID 和全限定程序类名,-v 显示进程 ID、全限定程序类名和传递给 JVM 的参数。默认情况下,jps 显示进程 ID 和程序名。

.3.3jstat工具
jstat 是 Java 中的一个工具命令,它可以用来监视 JVM 的各种状态和性能指标。使用 jstat 命令可以实时查看 JVM 的堆内存使用情况、GC 情况、类加载情况等等,可以帮助开发者定位应用程序性能问题,优化 JVM 的配置。
jstat 命令的语法格式如下:
bashjstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
其中,generalOption 表示通用选项,outputOptions 表示输出选项,vmid 表示需要监控的 JVM 进程 ID,interval 表示监控时间间隔,count 表示监控次数。
常用的 jstat 命令选项包括:
-gc:显示 JVM 的垃圾回收堆信息;
-class:显示 JVM 加载类的信息;
-compiler:显示 JVM 即时编译器(JIT)的信息;
-gcutil:显示 JVM 的垃圾回收统计信息;
-gccapacity:显示 JVM 堆内存使用情况。
例如,以下命令可以每秒对进程 ID 1234 进行一次垃圾回收堆信息、垃圾回收统计信息和堆内存使用情况的监控:
bashjstat -gc -gcutil -gccapacity 1234 1s

3.4 jinfo工具

Java jinfo工具是Java 诊断命令行工具之一,它可以用于查看和调整正在运行的Java应用程序的参数。jinfo可以打印出Java应用程序进程的基本信息,如启动参数,系统属性,Java虚拟机配置等。
jinfo工具的语法如下:
bashjinfo [options] <pid>
其中,`<pid>`是Java进程的进程号,`options` 是可选参数,包括:
`-flag <name>`:查看指定的JVM参数的值。
`-flags`:查看JVM参数的当前值。
`-sysprops`:查看Java系统属性的值。
例如,要查看进程号为12345的Java进程启动参数中的-Xmx参数值,可以使用以下命令:
bashjinfo -flag Xmx 12345
要查看进程号为12345的Java进程当前设置的所有参数的值,可以使用以下命令:
bashjinfo -flags 12345
要查看进程号为12345的Java进程的所有系统属性值,可以使用以下命令:
bashjinfo -sysprops 12345
3.5jstack工具

Java jstack是一个命令行工具,用于查看Java应用程序的线程堆栈信息。它可以帮助开发人员诊断应用程序中的线程问题和死锁问题。
使用jstack需要在命令行中输入以下命令:
bashjstack [pid]
其中pid是Java应用程序的进程ID。这将打印出应用程序中所有线程的堆栈跟踪信息。
可以使用下列命令来将jstack的输出转储到文件中:
javajstack [pid] > [filename]
在生成的文件中,可以使用一个文本编辑器或其他工具来查看线程堆栈的信息。
3.6jstatd工具
Java jstatd是一个Java工具,用于在远程主机上监视Java虚拟机(JVM)的性能。它运行在一个单独的进程中,可以连接到运行在远程主机上的JVM,并收集有关该JVM的性能信息。jstatd可以在本地或远程运行,并且可以通过Java管理扩展(JMX)来配置和管理。
jstatd通常用于监视Java应用程序的性能和行为,以便进行调优和优化。它可以提供关于JVM内存使用情况、线程堆栈、垃圾收集器活动和类加载器使用情况等信息。
要使用jstatd工具,必须安装JDK(Java开发工具包)。然后,可以使用以下命令运行jstatd:
bashjstatd [-options] [hostid]
其中,选项包括:
-Joption:将选项传递给Java虚拟机。
-p port:指定jstatd进程的端口号。
-n:指定jstatd进程应接受所有远程主机的连接。
-r:指定jstatd进程应接受所有远程主机的SSL连接。
hostid参数指定要监视的远程主机的主机名或IP地址。如果未指定hostid,则jstatd将在本地运行,并且可以通过JMX访问本地JVM。
一旦jstatd运行起来,就可以使用jstat命令连接并查询JVM性能数据。例如,可以使用以下命令查询JVM内存使用情况:
bashjstat -gcutil <remote_host>:<port> <interval> <count>
其中,remote_host是jstatd进程所在的远程主机的主机名或IP地址,port是jstatd进程的端口号,interval是查询间隔时间(以毫秒为单位),count是查询次数。该命令将返回JVM的垃圾收集器使用情况,包括堆大小、已使用的堆空间和垃圾收集器的使用率等信息。
总之,Java jstatd工具是一个非常有用的工具,可用于监视和优化Java应用程序的性能。
3.7jcmd工具
jcmd是JDK 7中引入的一个命令行工具,可以用于管理Java应用程序。它可以列出正在运行的Java进程,以及这些进程所支持的与诊断和调试相关的命令。下面是一些常用的jcmd命令:
- 列出所有正在运行的Java进程:
jcmd -l
- 显示某个Java进程的命令列表:
jcmd <pid> help
- 显示某个Java进程的JVM属性:
jcmd <pid> VM.system_properties
- 查看某个Java进程的线程信息:
jcmd <pid> Thread.print
- 查看某个Java进程的堆信息:
jcmd <pid> GC.heap_info
这些命令只是jcmd的一部分,还有很多其他命令可以使用。可以使用"jcmd -help"命令列出所有可用的命令。
四、可视化管理工具

4.1JConsole工具
详细

4.2VM工具

详细


4.3Mission Control

五、堆文件分析
5.1jmap命令

jmap命令是Java自带的一个工具,用于获取Java进程的内存快照(memory snapshot),可以查看Java堆中的对象信息、类信息、线程信息、GC信息等。常见的用法包括:
使用jmap -heap pid 查看Java进程的内存使用情况;
使用jmap -dump:format=b,file=heap.bin pid 将Java进程的堆内存dump到文件中,方便后续离线分析;
使用jmap -histo pid 查看Java进程中各个类的实例数量和占用内存情况;
使用jmap -permstat pid 查看Java进程中永久代(PermGen或Metaspace)的情况。
需要注意的是,jmap在获取内存快照时会触发Full GC,可能会对应用性能产生影响,因此建议仅在必要时使用jmap命令。
5.2jhat命令 (消失)
jhat是Java SE Development Kit (JDK)自带的一个命令行工具,用于生成并分析Java堆转储(Java heap dump)文件。它将堆转储文件加载到内存中,并允许用户在浏览器中查看Java堆转储文件中包含的对象、类、实例和引用的信息。
使用jhat命令可以帮助开发人员或运维人员快速诊断Java应用程序的内存问题,并定位内存泄漏或者内存溢出等问题。
例如,可以通过以下方式使用jhat命令:
- 生成Java堆转储文件:
javajmap -dump:live,format=b,file=<filename>.hprof <PID>
- 使用jhat命令加载和解析Java堆转储文件:
javajhat <filename>.hprof
六、JMX
6.1概述
JMX(Java Management Extensions)是 Java 平台上一种管理和监控应用程序、设备、系统和网络服务的标准化方式。JMX 提供了一种标准的方式来管理 Java 应用程序,并且可以方便地集成到现有的管理工具中。
Java 应用程序可以通过使用 JMX API 暴露自己的管理接口,这些接口可以被远程客户端连接并使用。JMX API 可以访问应用程序中的 MBeans(Managed Beans),这些 MBeans 是用来表示应用程序的组件和状态的标准 Java 对象。JMX API 还提供了一种事
6.2JMX的架构
6.3MBean

6.4Agent
6.5优点

七、Java程序运行安全
·Java程序来源繁杂
- 自定义的类
- 第三方Jar包
- 网络下载(Applet,.RMI等)
·Java程序运行
- 非法访问某些目录
- 打开Socket链接
- 退出虚拟机


相关代码

