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

hpunix查看内存使用情况

  • 内存
  • 2024-06-02 12:45:03
  • 395

一、如何使用免费工具监控和管理UNIX系统的性能问题?

本文重点介绍用于监视和优化UNIX系统以提高性能的免费性能分析工具。UNIX系统的关键性能指标包括CPU、内存、磁盘空间、I/O时间和网络时间,以及正在运行的应用程序的状态。主要有五个作用:


用户状态:用户运行程序的CPU时间,包括库函数调用,但不包括内核执行时间。
系统状态:CPU在处理核心服务和I/O请求时的状态,通过阻塞I/O来优化。
I/O时间和网络时间:数据传输和I/O服务请求所花费的时间。
虚拟内存对象:包含改变和交换内存的上下文,显示系统资源的分配和使用情况。
应用程序性能:应用程序在不同状态下的运行时间,例如当CPU忙于其他进程时。
程序
Netstat:网络链接显示信息、精彩表格等。
time:测量控件运行时间和资源使用情况。
正常运行时间:平均系统负载较高。
ps:显示当前进程的状态。
vmstat:显示虚拟内存变量。
gprof:调用图分析。
prof:流程性能分析。
top:实时呈现系统服务。
通过有效地使用这些工具,管理员可以更直观地了解和优化统一系统的实施,以改善他们的运营。
二、如何查看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:一个JavaGUI监控工具,可以以图形形式显示各种数据。并且可以通过远程连接监控远程服务器虚拟机。
详细说明:在使用这些工具之前,首先使用JPS命令获取每个JVM当前的进程号,然后选择要查看的JVM。
jstat工具特别强大,提供了众多选项来详细查看堆各部分的使用情况以及加载的类的数量。使用时需要添加要显示的进程的进程ID以及选择的参数。下面详细解释各个参数的含义。
jstat-classpid:显示加载的类数量、使用的磁盘空间等信息。
jstat-compilerpid:显示VM实时编译数量等信息。
jstat-gcpid:可以显示GC信息,查看GC次数和时间。最后五个元素分别是YoungGC的数量、YoungGC的时间、FullGC的数量、FullGC的时间和GC的总时间。
jstat-gccapacity:可以显示VM内存中三代(young、old、perm)对象的使用情况和占用大小。示例:PGCMN显示perm的最小内存使用量,PGCMX显示perm的最大内存使用量。PGC是当前新生成的perm的内存使用量,PC是之前的perm的内存使用量。其他的可以这样类比:OC就是旧时的纯占用。
jstat-gcnewpid:新对象信息。
jstat-gcnewcapacitypid:有关新对象及其占用情况的信息。
jstat-gcoldpid:有关旧对象的信息。
jstat-gcoldcapacitypid:旧对象信息及其占用情况。
jstat-gcpermcapacitypid:Perm对象信息及其占用情况。
jstat-utilpid:统计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(堆):用于存储垃圾回收后尚未回收到Edenspace内存池中的对象。
TenuredGeneration(Heap):用于管理Survivorspace内存池中已经存在一定时间的对象。
PermanentGeneration(无堆):存储虚拟机自己的静态(反射)数据,例如:B.类和方法对象。Java虚拟机共享此类数据。该区域分为只读区域和只读区域。
CodeCache(无堆):HotSpotJava虚拟机包含一块用于编译和存储本机代码(nativecode)的内存,称为“codecache”(代码缓存)。
?jstack(检查JVM线程的运行状态,是否有死锁现象等):jstackpid:threaddump
?jstat-gcutilpid1000100:1000ms统计100次GC情况;
另外推荐查看jmapdump的内存对象工具MemoryAnalyzer