jps

[root@xxx bin]# jps -l 2007
bash: jps: command not found

[root@xxx bin]# /opt/jdk1.8.0_181/bin/jps -q 116471
RMI Registry not available at 116471:1099
Exception creating connection to: 116471; nested exception is:
java.net.SocketException: Invalid argument or cannot assign requested address

一、监控管理工具

以下三个命令常用于监视JVM虚拟机性能及资源消耗情况:

1、jps-Java Virtual Machine Process Status Tool

使用说明: 该命令用于列出目标系统上正在运行的虚拟机进程(每个java程序会独占一个java虚拟机实例)。所列信息包括进程ID及虚拟机执行主类名称,对于非root账户,只能显示当前用户启动的虚拟机进程。值得注意的是,java程序启动后,默认会在/tmp/hsperfdata_${user_name}目录下以该进程ID为文件名的文件,并将jvm运行相关信息存储其中,其中user_name是当前用户名。出现无法查看时,可能是磁盘读写、目录权限;临时文件丢失;java进程信息文件存储地址呗设置(-Djava.io.tmpdir)等问题。

命令格式:

jps [opions] [hostid]

options: 命令行选项;hostid:RMI注册表中注册的主机名,默认是localhost

参数详解:

选项

描述

-q

只显示进程ID

-m

显示传递给main方法的参数

-l

显示执行主类全名,jar则为其所在全路径

-v

显示传递给JVM的命令行参数

2、jstat-Java Virtual Machine Statistics Monitoring Tool

使用说明: 该命令用于输出给定java进程的统计信息。在只有控制台的环境中(比如生产环境),该命令十分奏效。我们主要通过它可以显示系统中垃圾回收、类装载、运行期编译状况等数据。

命令格式:

jstat
[generalOpion] [outputOptions] vmid [interval][s|ms] [count]]

generalOptions:
常规命令行选项,如-version,-options;

outputOptions:输出选项;

vmid:进程ID;

interval[s|ms]:采样间隔,默认是毫秒;

count:采样次数;

参数详解:

选项

描述

-class

类装载器的行为统计

-gc

垃圾回收堆的行为统计

-gccapacity

各个垃圾回收代(young,old,perm)和它们的相应空间统计

-gcutil

垃圾回收统计概述

-gccause

同-gcutil,但会额外输出导致上一次GC产生原因

-gcnew

监视新生代GC状况

-gcnewcapacity

同-gcnew,但主要关注使用到的最大和最小空间

-gcold

监视老年代GC状况

-gcoldcapacity

同-gccold,输出主要关注使用到的最大和最小空间

-gcpermacapacity

输出永久代使用到的最大和最小空间

-compiler

输出JIT编译器编译过的方法、耗时等信息

-printcompilation

输出已经被JIT编译的方法

备注:

1)JIT 即时编译技术,能够加速java程序的执行速度,JIT编译器将字节码编译成本机机器码

2)JVM堆结构

Sun JVM分代垃圾回收器把堆空间分成3块:

Young Gen:年轻代,包括1个Eden区和2个Suvivor区,新创建的对象(大部分为短周期的对象)将进入这个区,虚拟机会频繁地对这个区进行垃圾回收。

Old Gen:年老代,当对象在Young Gen呆地足够久(经过几次的垃圾回收仍然存在)或Young
Gen空间不足时,对象将进入Old Gen,由于一般是生命周期比较长的对象,因此虚拟机对这块内存的回收频度会比较低,一旦回收,使用的将是一个耗时的Full
GC,另外,一旦堆空间不足时,虚拟机也会尝试去回收这个区。

Perm Gen:持久代,一些常量定义和类、方法声明及其bytecode都会放在这个区

3、jstatd-Virtual Machine jstat Daemon

使用说明: 此命令将开启一个RMI服务器程序,提供了对JVM的创建和结束监视,也为远程监视工具提供了一个可以attach的接口。启动它之前需要首先为其制定安全策略,创建策略稳健,并命名为jstatd.all.policy,启动时,命令为jstatd -J-Djava.security.policy=jstatd.all.policy。策略稳健内容如下:

grant codebase ”file{java.home}/../lib/tools.jar” {
permission java.security.AllPermission;
};

命令格式:

jstatd
[options]

options: 命令行选项;

参数详解:

选项

描述

-nr

当一个存在的RIM Registry没有找到时,补仓是创建一个内部的RMI Registry

-p

port端口号,默认为1099

-n

RMI Registray中注册的远程RMI对象名称

-J

JVM参数

二、故障诊断工具

以下三个命令常用于完成特定故障诊断任务:

1、jinfo-Configuration Info

使用说明: 该命令作用是实时查看或调整JVM运行环境参数。如果想知道显式指定的虚拟机参数,可以采用jps -v,但是如果想知道默认的相关虚拟机参数值,只能借助该命令来做。

命令格式:

jinfo [option]
pid

options: 命令行选项;pid:java进程ID;

参数详解:

选项

描述

-flag <name>

打印指定VM参数值

-flag [+|-]<name>

更改VM参数生效与否

-flag
<name>=<value>

设置VM参数为指定值

-h

打印帮助信息

-help

同-h

2、jmap-Memory Map

使用说明: 该命令用于生成堆转存快照,使用jmap可以查看heap空间的概要情况,粗略的掌握heap的使用情况。也可以生成heapdump文件,再使用jhat通过web浏览器具体分析内容中的对象和数据。

命令格式:

jmap [option]
vmid

options: 命令行选项;pid:java进程ID;

参数详解:

选项

描述

-dump

生成堆转存快照

-finalizerinfo

显示等待finalize方法的对象

-heap

显示堆详细信息

-histo

显示堆中对象统计信息

-permstat

以classloader为统计口径显示永久代内存状态

-F

当虚拟机进程对-dump选项无响应时,可使用这个选项强制生成

3、jstack-Stack Trace

使用说明: 该命令用于生成JVM当前时刻的线程快照。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可知道没有响应的线程到底在后台做些什么事情,或者等待什么资源。

命令格式:

jstack [option]
vmid

options: 命令行选项;pid:java进程ID;

参数详解:

选项

描述

-F

强制输出线程堆栈

-m

如调用本地方法的话,可显示C/C++堆栈

-l

出堆栈外,显示关于锁的附加信息

在生产环境中,jstack命令帮助解决内存泄露引起的垃圾回收线程占用高CPU,以及服务线程阻塞在某个远程接口处导致无响应等问题。列出子线程的cpu占用率等情况,再对照jstack命令得到的线程号,就可以知道cpu占用高的线程执行到了那里:

ps -eL -o
pid,%cpu,lwp|grep -i 16907

常见的监控JVM的几个Linux命令和使用的更多相关文章

  1. Linux服务器上监控网络带宽的18个常用命令nload, iftop,iptraf-ng, nethogs, vnstat. nagios,运用Ntop监控网络流量

    Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...

  2. Linux服务器上监控网络带宽的18个常用命令

    [51CTO精选译文]本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量分开来显示. 一些命令可以 ...

  3. Linux服务器上监控网络带宽的18个常用命令(转)

    本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量分开来显示. 一些命令可以显示单个进程所使用的带 ...

  4. Linux服务器上监控网络带宽的18个常用命令 zz

    Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...

  5. Linux服务器上监控网络带宽的18个常用命令和工具

    一.如何查看CentOS的网络带宽出口 检查维护系统的时候,经常会要查看服务器的网络端口是多大的,所以需要用到Linux的一个命令. 如何查看CentOS的网络带宽出口多大?可以用下面的命令来查看. ...

  6. linux下监控jvm 使用的方法

    之前一直用jconsole监控jvm,图形界面简单易用,最近因为需要在纯linux下进行操作,所以总结了一下 linux下监控jvm的例子,这次主要用到了jstat工具, 各个参数意义: jstat ...

  7. Linux ---> 监控JVM工具

    Linux ---> 监控JVM工具shkingshking 发布时间: 2013/10/10 01:27 阅读: 2642 收藏: 26 点赞: 1 评论: 0 JDK内置工具使用 jps(J ...

  8. visualvm监控jvm及远程jvm监控方法(转)

    VisualVM是Sun的一个OpenJDK项目,其目的在于为Java应用创建一个整套的问题解决工具.它集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览H ...

  9. 性能测试三十六:内存溢出和JVM常见参数及JVM参数调优

    堆内存溢出: 此种溢出,加内存只能缓解问题,不能根除问题,需优化代码堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java h ...

随机推荐

  1. 快排的时间复杂度O(n) = nlogn计算过程

    转载:https://www.cnblogs.com/javawebsoa/p/3194015.html 本文以快速排序为例,推导了快排的时间复杂度nlogn是如何得来的,其它算法与其类似. 对数据D ...

  2. MUD游戏开发教程视频

    MUD游戏开发教程视频 https://space.bilibili.com/476328540/channel/detail?cid=91187

  3. 【linux基础】ubuntu16.04 安装后,屏幕分辨率过低且不可调节

    前言 安装CUDA和NVIDIA驱动之后,屏幕分辨率过低且不可调节,尝试了几种方法都没成功解决,特此讲解决方法记录下来. 解决过程 注销进入登录界面,按ctrl+alt+F1进入命令行终端,输入账户名 ...

  4. notepad++删除某关键字所在的行内容

    例如,我要删除zhao这个字符串所在的行 打开notepad++的ctrl+f窗口 点击替换选项,在查找目标输入^.*bp.*$ 其中替换为那里留空,查找模式选择正则表达式,建议也勾选匹配大小写,同时 ...

  5. [LeetCode] 636. Exclusive Time of Functions 函数的独家时间

    Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find ...

  6. Jenkins - 安装并启动Jenkins

    1 - 关于Jenkins 构建流水线(build pipeline)工具Jenkins可以轻松地定义和管理各种各样的操作(构建.测试等),并将这些操作像管道pipe一样自由地进行组合,从而自动.流畅 ...

  7. SpringBoot+MybatisPlus+MySql 自动生成代码 自动分页

    一.配置 <!-- Mybatis plus --> <dependency> <groupId>com.baomidou</groupId> < ...

  8. python实战项目 — 爬取 校花网图片

    重点: 1.  指定路径创建文件夹,判断是否存在 2. 保存图片文件 # 获得校花网的地址,图片的链接 import re import requests import time import os ...

  9. Java 总结篇2

    第02章:数据类型和运算符 一.概述: 1.数据类型:int.float.char.boolean 2.运算符:算术运算符.赋值运算符.关系运算符.逻辑运算符.位运算符(了解即可).条件运算符 3.基 ...

  10. 如何配置php session使用redis集群

    本实例基于phpredis 2.2.8,支持集群处理,php5.3及以上. 1.页面修改: ini_set('session.save_handler', 'rediscluster'); ini_s ...