Linux
查看磁盘是否满了
df -h
查看内存占用
top
free -m
free -h
cat /proc/meminfo
查看文件最后5行
tail -n 行数值 filename 查看文件最后5行
各个进程的资源占用状况
top
top -Hp pid
查看JAVA线程CPU占用
使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p:通过指定监控进程ID来仅仅监控某个进程的状态。
q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S:指定累计模式。
s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i:使top不显示任何闲置或者僵死进程。
c:显示整个命令行而不只是显示命令名。
在top命令的界面中,可以输入一些指令实现交互性的操作,下面列出一些比较常用的交互性操作。
CTRL+L:刷新整个屏幕,重新开始显示。
h:显示帮助。
q:退出top程序。
空格:立即刷新信息。
k:杀掉进程。输入k之后,会提示用户输入PID及要发送哪种信号。
r:重新设置进程优先级,即renice。输入r之后,会提示用户输入PID及新的nice值。
s:改变刷新周期。输入s之后,会提示用户输入新的刷新周期,单位为秒。
n:改变进程列表中的显示数量。
f:添加或删除进程列表中的列。输入f之后会显示字母与列的映射表,再输入对应字母就可以开关相应的列。
c:在COMMAND列中切换显示命令名和完整的命令行。
u:指定在进程列表中只显示对应用户的进程。
l:切换显示界面中第一行信息(时间和平均负载)。
t:切换显示界面中第二、三行信息(进程和CPU统计)。
m:切换显示界面中第四、五行信息(内存和交换空间)。
1:切换展开CPU统计信息。展开后,会分别显示CPU每个逻辑核心的占用。
N:按PID对进程排序。
M:按%MEM对进程排序。
P:按%CPU对进程排序。
T:按TIME+对进程排序。
H:切换在进程列表中显示所有线程信息。
其中,有一些参数可以直接跟在top命令后来使用,比如top -c、top -H等。
df 磁盘空间
查看java进程
在Linux下查看所有java进程命令:
1。ps -ef | grep java
停止特定java进程命令:kill -9 java进程序号
停止所有java进程命令:pkill - 9 java
2、jps -l -v
-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null
-v 输出传递给JVM的参数
ps -ef | grep java
windows系统
JDK环境变量配置成jre
JAVA_HOME加上jdk路径,不需要重启
C:\Java\jre1.8.0_321;C:\Java\jdk1.8.0_241
查看所有端口占用进程PID
netstat -ano
查看端口号占用进程pid
netstat -aon|findstr "8081"
查看指定 PID 的进程
tasklist|findstr "9088"
查看java进程
tasklist | findstr "java"
查找 pid对应的java程序
1、JVisalVM
2、jconsole
3、jinfo
备注:
jconsole定义:jconsole是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强 。
jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号
jinfo:可以输出并修改运行时的java 进程的opts。
jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。
jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。
jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
查看端口对应程序PID
netstat -ano | findstr 8080
结束进程
强制(/F参数)杀死 pid 为 9088 的所有进程包括子进程(/T参数):
taskkill /T /F /PID 9088
数据库
oracle
查看和关闭进程
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o,v$session s
where l.object_id=o.object_id and l.session_id=s.sid;
--杀掉进程 sid,serial#
alter system kill SESSION '852,50697';
sga缓存区大小
select component, current_size ,min_size from v$sga_dynamic_components;
查看缓存配置
show parameter sga;
show sga;
前一小时的awr报告
JVM
##jps -l
查看java进程
可以监控到内存,线程等等使用情况,也可以通知JVM进行垃圾回收,还可以生成内存以及线程的详细信息dump,抽样器
查看进程的堆栈状态,分析线程状态
线程dump
##jps(安装jdk)查看进程
继续使用jstack pid命令查看当前java进程的堆栈状态
##jstack 查看线程状态
-
使用jps -l 或jps -ml查看死锁进程ID(org.apache.catalina.startup.Bootstrap),我们得知死锁程序的PID为11172~
-
接下来,我们就使用jstack -l 11172检测死锁原因~
-
jstack 20368 > D://1.txt
##jstack
jstack -l #pid > jstack_#i.log
一般情况下,通过jstack输出的线程信息主要包括:jvm自身线程、用户线程等。其中jvm线程会在jvm启动时就会存在。对于用户线程则是在用户访问时才会生成。
-
可以用mat或jdk自带jhat看dump文件
查看内存
jmap -dump:live,format=b,file=/root/heapdump.phrof $PID
##jstat 查看GC
jstat -gcutil $PID 1s
jstat -gccause
##jstat命令
1>类加载统计 jstat -class19570 解析:Loaded:加载class的数量 Bytes:所占用空间大小 Unloaded:未加载数量 Bytes:未加载占用空间 Time:时间 2>编译统计 jstat -compiler 19570 解析:Compiled:编译数量。 Failed:失败数量 Invalid:不可用数量 Time:时间 FailedType:失败类型 FailedMethod:失败的方法 3>垃圾回收统计 jstat -gc 19570 解析:S0C:第一个幸存区的大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 OC:老年代大小 OU:老年代使用大小 MC:方法区大小 MU:方法区使用大小 CCSC:压缩类空间大小 CCSU:压缩类空间使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间 FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间 GCT:垃圾回收消耗总时间 4>堆内存统计 命令:jstat -gccapacity 19570 解析:NGCMN:新生代最小容量 NGCMX:新生代最大容量 NGC:当前新生代容量 S0C:第一个幸存区大小 S1C:第二个幸存区的大小 EC:伊甸园区的大小 OGCMN:老年代最小容量 OGCMX:老年代最大容量 OGC:当前老年代大小 OC:当前老年代大小 MCMN:最小元数据容量 MCMX:最大元数据容量 MC:当前元数据空间大小 CCSMN:最小压缩类空间大小 CCSMX:最大压缩类空间大小 CCSC:当前压缩类空间大小 YGC:年轻代gc次数 FGC:老年代GC次数 5>新生代垃圾回收统计 命令:jstat -gcnew 19570 解析:S0C:第一个幸存区大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 TT:对象在新生代存活的次数 MTT:对象在新生代存活的最大次数 DSS:期望的幸存区大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间
可以查看堆内存各部分的使用量,以及加载类的数量。
##jmap 查看堆内存
jmap pid
命令:jmap -heap pid
描述:显示Java堆详细信息
命令:jmap -histo:live pid
描述:显示堆中对象的统计信息
命令:jmap -clstats pid
描述:打印类加载器信息
命令:jmap -finalizerinfo pid
描述:打印等待终结的对象信息
命令:jmap -dump:format=b,file=heapdump.phrof pid
描述:生成堆转储快照dump文件。
(这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用, 线上系统慎用。)
是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。
频繁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)分析堆情况。
六、结合代码解决内存溢出或泄露问题
原文链接:https://blog.csdn.net/ppangxiao/article/details/123067169
GC 状态
jstat -gcutil XXXX
jstat -gccause XXXX
用jstat -gccause查看gc原因
jcmd 查看class数量(用于排查元空间溢出)
jcmd 7368 GC.class_stats | awk'{print $13}'| sort | uniq -c | sort -nrk1 | head
jconsole
定义:jconsole是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强 jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
jconsole是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。
使用方法:命令行里打 jconsole,选择进程查看。
另外推荐一款查看jmap dump 的内存对象工具 MemoryAnalyzer ,官网,可以查看dump时对象数量,内存占用,线程情况等。
jps
:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号
jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。
jinfo
:可以输出并修改运行时的java 进程的opts。
jinfo的用处比较简单,就是能输出并修改运行时的java进程的运行参数。
用法是jinfo -opt pid 如:查看2788的MaxPerm大小可以用 jinfo -flag MaxPermSize 2788。
jstat
:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。
jstat -class pid:显示加载class的数量,及所占空间等信息。
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
jstat -gcnew pid:new对象的信息。
jstat -gcnewcapacity pid:new对象的信息及其占用量。
jstat -gcold pid:old对象的信息。
jstat -gcoldcapacity pid:old对象的信息及其占用量。
jstat -gcpermcapacity pid:perm对象的信息及其占用量。
jstat -util pid:统计gc信息统计。
jstat -printcompilation pid:当前VM执行的信息。
除了以上一个参数外,还可以同时加上两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。
总结
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。参考格式如下:
jstat -options
可以列出当前JVM版本支持的选项,常见的有
-
l class (类加载器)
-
l compiler (JIT)
-
l gc (GC堆状态)
-
l gccapacity (各区大小)
-
l gccause (最近一次GC统计和原因)
-
l gcnew (新区统计)
-
l gcnewcapacity (新区大小)
-
l gcold (老区统计)
-
l gcoldcapacity (老区大小)
-
l gcpermcapacity (永久区大小)
-
l gcutil (GC统计汇总)
-
l printcompilation (HotSpot编译统计)
jmap
:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。
jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
命令:jmap -dump:format=b,file=heap.bin <pid>
说明:file:保存路径及文件名,pid:进程编号
jmap -histo:live pid| less:堆中活动的对象以及大小
jmap -heap pid :查看堆的使用状况信息
Arthas
带pid启动
java -jar arthas-boot.jar路径 pid
查看报错
trace com.fingard.ats.business.front.project.zjsjt.loan.service.impl.ZjsjtLoanLendsServiceImpl
updateLoanLendsExtend