当前位置:首页 > 内存 > 正文

查看jvm内存使用情况

  • 内存
  • 2024-04-25 01:21:17
  • 7754

一、如何查看unix的java内存使用情况jmap(Linux特有,也是一个很常用的命令)
观察正在运行的jvm的物理内存使用情况。
参数如下:
-heap:打印jvmheap的情况
-histo:打印jvmheap的直方图。输出信息包括类名、对象数量和对象分配的大小。
-histo:live:同上,但只允许存活对象
-permstat:打印永久代堆情况
命令用法:
jmap-heap3409
NewGeneration可以可观察(EdenSpace、FromSpace、ToSpace)、tenuredGeneration、PermGeneration内存使用情况
输出内容:
jmap-histo3409|jmap-histo:live3409
可以观察堆中所有对象的状态(剩下的所有对象的堆框)。包括物体的数量和占用的空间。
输出内容:
编写一个脚本,可以快速找到占用堆最大的对象,这对于处理内存泄漏特别有效。
如果结果较多,可以使用以下命令将结果发送到文本文件。
jmap-histo3409|jmap-histo:live3409>
jinfo:可以输出和更改正在运行的java进程的选项。
jps:与Unix上的ps类似,用于显示本地java进程。可以看到本地运行多个java程序并显示它们的进程号。
jstat:监控VM内存的强大工具。可用于监视虚拟机内存中的各种堆和非堆大小以及内存使用情况。
jmap:打印某个java进程内存中所有“对象”的状态(使用pid)(例如:生成了哪些对象及其数量)。
jconsole:一个ja​​vaGUI监控工具,可以以图形的形式显示各种数据。并可以通过远程连接监控远程服务器VM。
详细说明:在使用这些工具之前,首先使用JPS命令获每个JVM的当前进程号,然后选择要查看的JVM。
jstat工具特别强大,有很多选项可以详细查看堆各部分的使用情况以及加载的类的数量。使用时必须添加要显示的进程的进程ID以及选择的参数。下面详细介绍各个参数的含义。
jstat-classpid:显示加载的类数量、占用空间等信息。
jstat-compilerpid:显示VM实时编译数量等信息。
jstat-gcpid:可以显示gc信息,查看gc次数和时间。最后五个元素分别是younggc的次数、younggc的时间、fullgc的次数、fullgc的时间和gc的总时间。
jstat-gccacapacity:可以显示VM内存中三代(young、old、permanent)对象的使用情况和占用大小。例如:PGCMN显示perm的最小内存使用量,PGCMX显示perm的最大内存使用量。permUsage,PGC是当前新生成的perm的内存使用量,PC是之前的perm的内存使用量。其他的都可以依此类推,OC就是旧时的纯涂层。
jstat-gcnewpid:新对象信息。
jstat-gcnewcapacitypid:有关新对象及其使用情况的信息。
jstat-gcoldpid:有关旧对象的信息。
jstat-gcoldcapacitypid:旧对象信息及其占用情况。
jstat-gcpermcapacitypid:Perm对象信息及其占用情况。
jstat-ulpid:统计gc信息统计。
jstat-printcompilationpid:当前VM执行信息。
除了上述参数外,还可以同时添加两个数字。例如:jstat-printcompilation30242506每250毫秒打印一次,共6次。您还可以添加-h3以每三行显示一次标题。
Jmap是一个可以输出内存中所有对象的工具。它甚至可以将VM中的堆以二进制格式输出为文本。
命令:jmap-dump:format=b,file=
文件:保存路径和文件名
pid:进程号
?jmap-histo:livepid|less:堆中的活动对象和大小
?jmap-heappid:查看有关堆使用情况的信息
jinfo的用途:比较简单就是可以在以下位置发出并更改java进程的执行参数运行。用法为jinfo-optpid例如:要查看MaxPerm大小2788,可以使用jinfo-flagMaxPermSize2788。
Jconsole是一个用Java编写的GUI程序,用于监控虚拟机和远程虚拟机。它非常容易使用并且具有非常强大的功能。使用方法:只需在命令行中打开jconsole并选择进程即可。
JConsole中内存分区的说明。
EdenSpace(heap):内存最初分配给该线程池中的大多数对象。
SurvivorSpace(堆):用于存储eden​​space内存池中垃圾回收后未被回收的对象。
TenuredGeneration(堆):用于维护已经在survivorspace内存池中存在一段时间的对象。
PermanentGeneration(非堆):存储虚拟机自己的静态(反射)数据,例如类和方法对象。Java虚拟机共享此类数据。该区域分为只读和只读,
CodeCache(非堆):HotSpotJava虚拟机包含一块用于编译和存储本机代码(nativecode)的内存,称为“代码缓存”(codecache)
?jstack(检查jvm线程的运行状态,是否有死锁现象等):jstackpid:threaddump
?jstat-gcutilpid1000100:每1000ms统计100次gc状态;
另外推荐查看jmapdump的内存对象工具MemoryAnalyzer


二、linux如何查看jvm的内存使用情况这是内存使用情况。您可以在管家或“设置”中查看。

上一篇:java内存占用情况

下一篇:jvm查看堆内存