文档章节

java远程调试与JVM调优工具

chape
 chape
发布于 2013/12/24 23:57
字数 932
阅读 355
收藏 4

Java远程调试方法:

1、被调试程序当作调试服务器(本地主动连接远程服务器,需要用如下命令让远程服务器jvm开启调试模式)。

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765


然后使用eclipse打开工程,并设置断点,右键-》debug-As-》remote java application,新建一个remote 实例。名字随意,工程名不选,填入对应的服务器ip和调试端口号

2、被调程序当作调试客户端(本地打开调试连接端口,让服务器主动连接本地)。

菜单Run-》debug configurations-》remote java application,新建一个remote 实例。选择connectType为socket Listen(默认socket attach,如同1),设置端口号8000,最后服务器端运行如下命令:

-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000


注意:在eclipse里面加载源代码。

eclipse特殊断点调试:

1. 函数断点 – 可以在执行函数前或者退出函数前中断程序的执行。

如在eclipse中光标悬停在函数上,菜单-》Run-》toggle method breakpoint,则设定了函数断点,最后右键函数断点-》breakpoint properties设定进入Or退出。以下断点设置类似。

2.条件断点 – 可以指定触发断点的条件,避免每次重复触发断点降低调试工作效率。

直接设置断点,右键-》breakpoint properties-》conditional

3. 监视断点 – 可以在访问数据的时候,中断程序的执行。

4. 异常断点 – 当程序发生指定异常的时候,中断程序的执行,第一时间发现问题所在。

5. 类型断点 – 当程序试图加载某个类型的时候,中断程序的执行。

JVM调优

GC简介:

• 所有Java对象都是分配在Java堆上面的;

• Java上使用垃圾回收机制回收没有引用到的对象;

• Java虚拟机有专门的GC线程用来执行垃圾回收;

• 当GC线程从内存删除一个对象时,首先会调用对象的finalize函数,在这个函数里可以执行自定义的释放资源操作;

• Java程序自身无法强制启动GC,即使使用System.gc()和Runtime.gc()这样的函数,也只是递交一个GC请求给GC线程;

• 当无法在Java内存堆(Java heap)上创建对象时,Java虚拟机会抛出OutOfMemoryError。

• 对象没有被其他对象引用,是指从GC Root开始遍历,无法遍历到的对象,GC Root包括:

     Class – 系统里加载的类,这些类不会被卸载,类里的静态变量可能会引用其它Java对象。

     Thread – 正在运行的线程。

    堆栈上的局部变量 – 堆栈上的函数还要运行,因此他们引用到的对象都是有用的。

    JNI参数和局部变量。

    锁(Monitor) - 用于线程同步。

        在GC时,通常young generation里的GC,即minor GC很快,当old generation空间不够时,Java虚拟机首先会尝试CMS GC并行收集,如果这样空间还不能快速回收时,那Java虚拟机会暂停所有线程执行GC,压缩并整理内存空间,重新分配地址空间(即引用),这个时候称为Full GC。一般来说,Full GC的执行效率要比minor GC慢很多,程序优化的目标也是尽量减少Full GC的执行次数。

JMap工具(java memory analysis packager)

1、jmap –heap javaPID,堆的设置信息使用信息

2、jmap –histo javaPID,查看各个对象的占用的内存情况

3、jmap –permstat javaPID,持久代详细使用信息

4、jmap -dump:format=b,file=xxx.dmp javaPID,导出堆信息到文件

先查看java进程id,使用jps命令。




© 著作权归作者所有

共有 人打赏支持
chape
粉丝 157
博文 339
码字总数 191349
作品 0
成都
程序员
私信 提问
阿里P8架构师总结的互联网Java架构系统化学习路线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/83181980 网络应用,最常见的研发语言是Java的和PHP。 后端服务,最常见的...

JAVA高级架构v
10/19
0
0
如何合理的规划一次jvm性能调优

这是jvm优化系列第三篇: jvm优化——垃圾回收 jvm优化——监控工具 JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响。但也有一些基础的理论和原则,理解...

wier
2017/10/25
0
9
成为Java GC专家(5)—Java性能调优原则

这是“成为Java GC专家”系列的第五篇文章。在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程、GC的工作原理、新生代(Young Generation)和老年代(Old Generation)的...

stefanzhlg
2014/12/05
0
1
《成神之路-基础篇》JVM——JVM参数及调优(已完结)

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是[《成神之路系列文章》][1]的第一篇,主要是关于JVM的一些介绍。 持续更新中 JVM参数及调优 JVM实用参数系列 成为Java GC专家(5)...

05/05
0
0
JVM学习总结五——性能监控及故障处理工具

之前扯了四篇理论,这一篇终于可以动动手了。本篇我们将介绍JVM常用的一些工具,这些工具将是我们监控JVM状态、处理故障和调优分析的利器。 不过在开始之前,我还是要先车扯两句:工具终归只...

oO脾气不坏Oo
2014/03/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理...

ThinkGem
15分钟前
10
0
0022-如何永久删除Kafka的Topic

1.问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。 2.问题复现...

Hadoop实操
18分钟前
0
0
技术工坊|区块链中的p2p网络(上海)

区块链是一个去中心化的系统,每个节点分布在全球各地,那么节点之间是如何自发地组成网络,又如何进行通信的?区块链中的p2p网络算法与bt下载中的p2p网络有什么区别?11月28日,第29期技术工...

HiBlock
23分钟前
1
0
MySQL性能优化之char、varchar、text的区别

在存储字符串时, 可以使用char、varchar或者text类型, 那么具体使用场景呢? 参考下面这个表结构: 1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。 ...

hansonwong
26分钟前
0
0
并发编程系列:4大并发工具类的功能、原理、以及应用场景

一:并发工具包 1.并发工具类 提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作。 2.并发容器 提供各种线程安全...

游人未归
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部