JAVA项目现场问题排查解决方案

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 查看线程状态

  1. 使用jps -l 或jps -ml查看死锁进程ID(org.apache.catalina.startup.Bootstrap),我们得知死锁程序的PID为11172~

  2. 接下来,我们就使用jstack -l 11172检测死锁原因~

  3. 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HELLO XF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值