使用visualvm的Profiler功能,可以提供两方面的性能跟踪功能:

Profile

一个是CPU,可以跟踪每个方法占用CPU的时长;比如你在发现CPU持续走高的时候可以通过Profile的CPU跟踪来确定是哪些函数耗费了性能;

一个是内存,内存的Profile通常可以检测到现存的对象都有哪些,占用了多少内存,对象存在多久等信息;通过内存Profile可以发现可疑的内存泄漏对象,进行分析;还可以针对某一个具体的对象进行内存跟踪,只要右键Class-name列下一行,有一个“log class library”,点击即可切换到跟踪指定对象的内存使用情况。

分析堆栈

可以在monitor的Tab页下,点击“heap dump”,可以会生成一个当前项目的堆栈,在生成的heapdump的标签页中,点击Find按钮即可(如下图)。如果发现某个对象可疑,通过链接进入进行选择,点到了右侧“Inspect”下面某个类,可以产看这个类的都有哪些实例,每个实例的对象情况更等等。

调试大对象

映入眼帘的左侧菜单的选择,是该对象有多少个实例,

远程访问

需要本机运行jstatd服务,并对外开放端口;

在JAVA_HOME/bin目录中,创建名称为jstatdAllPolicy文件(这个文件名称也可以顺便起,不过要与jstatd启动时指定名称相同),将以下内容拷贝到文件中。并保证文件的权限和用户都正确。

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

在JAVA_HOME/bin目录中,执行以下命令:

./jstatd -J-Djava.security.policy=jstatdAllPolicy-p  -J-Djava.rmi.server.hostname=192.168.xxx.xxx

  如果是tomcat,需要增加在catalina.sh中增加如下参数:

export CATALINA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port= -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

  如果是jar包,则在java -jar XX.jar的后面跟上参数即可。

  在远程机器,Remote节点下右键add Remote Host,录入IP后将会添加一个远程的节点,在该节点上面右键,选择“add jstatd Connection...",参数就是参数"com.sun.management.jmxremote.port"中指定的端口号。点击确定即可。

常见调试场景

1. 如果发现内存是锯齿状的,说明不断地有资源被创建,达到了回收上限触发一次回收;

2. 如果检测到Old区的空间被占满,那很可能是有资源没有被是释放,比如大量创建线程,用后没关闭;

visualvm-profile以及远程访问的更多相关文章

  1. JConsole和VisualVM远程访问JMX

    1.jvisualvm监控tomcat 修改tomcat的bin目录下的 catalina.sh文件,搜索JAVA_OPTS="",在引号中添加参数 JAVA_OPTS=" ...

  2. Java程序性能分析工具Java VisualVM(Visual GC)—程序员必备利器

    VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回收 ...

  3. 通过web远程访问服务器的ipython

    如果想同过一个Web浏览器的方式远程访问服务器上的ipython notebook sever,可通过下面的步骤实现. 服务器:ubuntu14.04 server 客户端:windows/unix/ ...

  4. 华为云(ECS)-linux服务器中-Ubuntu图形界面安装-解决root登录受限-VNCviwer/Teamviwer远程访问教程

    安装ubuntu-desktop .更新软件库 apt-get update .升级软件 apt-get upgrade .安装桌面 apt-get install ubuntu-desktop 解决 ...

  5. VisualVM远程连接Tomcat

    最近项目已经要提测了,有时间来考虑一些性能上的事儿了.之前拜读过<深入理解java虚拟机>,只可惜当时功力尚浅,有些东西还是不太懂,而且应用场景也没有,所以借这次机会看看.当然了,这次并不 ...

  6. docker tomcat jvm 使用 visualVM监控

    1.  建立基础镜像 FROM centos MAINTAINER fengjian <fengjian@senyint.com> ENV TZ "Asia/Shanghai&q ...

  7. Monitoring an IBM JVM with VisualVM

    Monitoring an IBM JVM with VisualVM 分类: Java 2013-06-09 16:15 250人阅读 评论(0) 收藏 举报 JDK6 update 7 and o ...

  8. Java性能调优:利用VisualVM进行性能分析

    JVisualVM 简介 VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC ...

  9. Linux 安装JDK Tomcat MySQL(使用Mac远程访问)

    阅读本文需要一定的Linux基础 一 环境 阿里云服务器: CentOS 7.4 64位(基于RedHat) 本机: macOS High Sierra 二 压缩包 JDK http://www.or ...

随机推荐

  1. Raspberry Pi开发之旅-发送邮件记录时间及IP

    由于我使用树莓派的场景大多数是在没有显示器.只用terminal连接它的情况下,所以,它的IP地址有时会在重启之后变掉(DHCP的),导致我无法通过terminal连接上它.然后我又要很麻烦地登录路由 ...

  2. 获取CPU利用率

    #define MB (1024 * 1024) MEMORYSTATUSEX statex; statex.dwLength = sizeof (statex); GlobalMemoryStatu ...

  3. INSPIRED启示录 读书笔记 - 第22章 原型测试

    物色测试者 1.如果你已经拥有一批特约用户,可以邀请他们参加测试 2.如果是企业级产品,同类产品的展销会是寻找目标用户的好去处 3.可以在分类信息网站上发布广告,征集测试者.征集要求可以写得笼统些,不 ...

  4. SpringBoot Mybatis keyProperty和useGeneratedKeys的作用

    在使用mybatis时,常常会出现这种需求: 当主键是自增的情况下,添加一条记录的同时,其主键是不能被使用的(为空),但是有时我们需要该主键,这时我们该如何处理呢?这时我们只需要在其对应xml中加入以 ...

  5. QT 布局时使用 addStretch 可伸缩设置

    今天在使用addStretch,布局的时候,发现addStretch竟然是可以平均分配的,有意思.比如: QVBoxLayout *buttonLayout = new QVBoxLayout; bu ...

  6. python定制

    1.简单定制   a.使用time模块的localtime方法获取时间 b.time.localtime返回struct_time的时间格式 c.表现你的类:__str__和__repr__ 注:当属 ...

  7. Codeforces 895C Square Subsets:状压dp【组合数结论】

    题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= ...

  8. php如何查看扩展是否开启

    php如何查看扩展是否开启 一.总结 一句话总结:php -m 1.查看php已安装扩展命令 ? php -m 2.phpinfo();这是最常用的方法,但那么多扩展一时还真不太好找.? 3.exte ...

  9. 理解面向消息的中间件和 JMS

    本章知识点: 企业消息和面向消息的中间件 理解 Java Message Service(JMS) 使用 JMS APIs 发送和接收消息 消息驱动 bean 的一个例子 简介 一般来说,掌握了企业级 ...

  10. 绑定自己Self

    Header="{Binding Path=Command.Text, RelativeSource={RelativeSource Self}}"/>