1、查看磁盘还剩多少空间,使用df命令(查看Linux版本:lsb_release -a,uname -a)
2、当前文件夹下的磁盘使用情况:(du --max-depth=1 -h后面没有显示跟路径,它默认是当前的路径。)
3、查看其中某一文件(文件夹)的大小:这里的大小是该文件夹下的大小的总和
4、查看指定目录下的文件大小
-----------------------------------------------------------------------------------------------------
jps工具
简洁:jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进行的pid命令,非常适合在Linux/Unix平台上简单查看当前java进程的一些简单情况。可以通过它来查看到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例)
jps命令:
jps -q(只显示pid,不显示class名称,jar文件名和传递给main方法的参数)
jps -m输出传递给main方法的参数,在嵌入式jvm上可能是null
jps -l输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
jps -v输出传递给JVM的参数
注:jsp命令有个地方不好,似乎只能显示当前用户的java进程,要显示其他用户的还是只能用unix/linux的ps命令
选项 | 作用 |
-q | 只能输出LVMID,省略主类的名称 |
-m | 输出虚拟机进程启动时传递给主类main()函数的参数 |
-l | 输出主类的全名,如果进程执行的是Jar包,输出Jar路径 |
-v | 输出虚拟机进程启动时JVM参数 |
---------------------------------------------------------------------------------------------------------------------------
jstat
(JVM Statistics Monitorning Tool)是用于监视虚拟机各种运行状态信息的状态信息的命令行工具。它可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具:
1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间。此外还可以用jstat -gc pid 时间段(毫秒值) 查询次数
其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
2.jstat -gccapacity pid,监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,
如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,
PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。
其他的可以根据这个类推, OC是old内纯的占用量。
经计算PGCMN的值为128m,PGCMX的值为256m,这些就是在虚拟机中配置的参数值。
3.jstat -gcutil pid:监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间
说明永生带使用了的内存量为88.03%
4.jstat -gcnew pid:监视新生代GC的状况
5.jstat -gcnewcapacity pid:监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
6.jstat -gcold pid:监视老年代的状况
7.stat -gcoldcapacity pid:监视内容与-gcold基本相同,输出主要关注使用到的最大和最小空间。
8.jstat -gcpermcapacity pid:输出永生代使用到的最大和最小空间
9.jstat -class pid:监视类装载、卸载数量、总空间及类装载所耗费的时间
显示加载class的数量,及所占空间等信息。
10.jstat -compiler pid:输出JIT编辑器编译过的方法、耗时等信息
11.stat -printcompilation pid:输出已经被JIT编译的方法
当前VM执行的信息。
一些术语的中文解释:
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量 (字节)
OGC:old代当前新生成的容量 (字节)
PGCMN:perm代中初始化(最小)的大小 (字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量 (字节)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
TT: 持有次数限制
MTT : 最大持有次数限制
--------------------------------------------------------------------------------------------------------------------------------------------------------------
jinfo:实时地查看和调整虚拟机的各项参数。
通过java -XX:+PrintFlagsFinal查看参数默认值
---------------------------------------------------------------------------------------------------------------------------------------------------------------
jmap命令:jmap的用途是为了展示java进程的内存映射信息,或者堆内存详情
jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。如果不使用jmap命令,要想获取Java堆转储快照还有一些比较“暴力”的手段:譬如在第2章中用过的-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生成dump文件,通过-XX:+HeapDumpOnCtrlBreak参数则可以使用【Ctrl】+【Break】键让虚拟机生成dump文件,又或者在Linux系统下通过Kill -3命令发送进程退出信号“恐吓”一下虚拟机,也能拿到dump文件。
jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
histo
jmap -histo pid 展示class的内存情况,可以采用jmap -histo pid >a.log(再如:jamp -histo:live 2464 >testjmap.txt)将其保存到文件中,在一段时间后使用文本对比工具,可以对必出GC回收了哪些对象。jmap -dump:format=b,file=outfile 5446可以将5446进程内存heap输出出来到outfile文件里,在配合MAT(内存分析工具)。
展示的信息为编号,实例数,字节,类名
heap
jmap -heap pid 展示pid的整体堆信息
[root@localhost ~]# jmap -heap 5446
Attaching to process ID 5446, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.45-b08
using thread-local object allocation.
Parallel GC with 10 thread(s) #10个gc线程
Heap Configuration: #堆内存初始化配置
MinHeapFreeRatio = 40 #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率
MaxHeapFreeRatio = 70 #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率
MaxHeapSize = 3722444800 (3550.0MB) #-XX:MaxHeapSize=设置JVM堆的最大大小
NewSize = 1310720 (1.25MB) #-XX:NewSize=设置JVM堆的‘新生代’的默认大小
MaxNewSize = 17592186044415 MB #-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
OldSize = 5439488 (5.1875MB) #-XX:OldSize=设置JVM堆的‘老生代’的大小
NewRatio = 2 #-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
SurvivorRatio = 8 #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
PermSize = 134217728 (128.0MB) #-XX:PermSize=<value>:设置JVM堆的‘永生代’的初始大小
MaxPermSize = 268435456 (256.0MB) #-XX:MaxPermSize=<value>:设置JVM堆的‘永生代’的最大大小
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space: #Eden区内存分布
capacity = 651165696 (621.0MB)
used = 29038624 (27.693389892578125MB)
free = 622127072 (593.3066101074219MB)
4.459483074489231% used
From Space: #其中一个Survivor区的内存分布
capacity = 1572864 (1.5MB)
used = 0 (0.0MB)
free = 1572864 (1.5MB)
0.0% used
To Space: #另一个Survivor区的内存分布
capacity = 296747008 (283.0MB)
used = 0 (0.0MB)
free = 296747008 (283.0MB)
0.0% used
PS Old Generation #当前的Old区内存分布
capacity = 2481979392 (2367.0MB)
used = 120759968 (115.16567993164062MB)
free = 2361219424 (2251.8343200683594MB)
4.865470212574594% used
PS Perm Generation #当前的 “永生代” 内存分布
capacity = 268435456 (256.0MB)
used = 139659040 (133.18923950195312MB)
free = 128776416 (122.81076049804688MB)
52.02704668045044% used
dump
导出的文件可以供分析用,比如jhat或者mat,以便查找内存溢出原因
假如指定live选项,那么只输出活的对象到文件.
jmap –dump:live,[format=b,]file=/usr/java/dump.log 5446
-finalizerinfo 打印正等候回收的对象的信息
jmap -finalizerinfo 5446
64位机上使用需要使用如下方式:
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来
$jmap -permstat 5446
Ø -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
Ø -h | -help 打印辅助信息
Ø -J 传递参数给jmap启动的jvm.
-----------------------------------------------------------------------------------------------------------------------------
jhat命令
用途:是用来分析java堆的命令,可以将堆中的对象一html的形式显示出来,包括对象的数组,大小等等,并支持对象查询语言
第一步:导出堆
jmap -dump:live,file=dump.txt 5446
第二步:分析堆文件
jhat dump.txt
第三步:查看html(再输入:http://访问机器的ip地址:7000后:)
注意:在访问的html下方有各种条件的查询:
(2)从根集能引用到的对象
(3)显示平台包括的所有类的实例数量
(4)堆实例的分布表
(5)执行对象查询语句
windows下按[Ctrl+C]停止
-------------------------------------------------------------------------------------------------------------------------------------------------------
jstack:java堆栈跟踪工具
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javadoc文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
jstack命令
该命令打印java线程的堆栈跟踪,可以得知哪些线程被阻塞或正等待,以便于查找如线程死锁的原因
用法:
jstack [ option ] pid
-F:强制产生一个线程dump
-m:打印java和native frames
-l:打印关于锁的附加信息
jstack [-l] 5446