Jprofiler内存监控及系统调优
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• Memory Views界面,Record Object 标签 • 观察类的实例化数量。如果某个NNM5系统类实例化数 量较大,可观察代码,是否为工具类
www.raisecom.com
性能测试——内存泄露
如下图所示:这一系列的实例化数都较多
www.raisecom.com
性能测试——内存泄露
Jprofiler使用界面
www.raisecom.com
Jprofiler安装
安装程序存放路径:ftp://192.168.9.8/新 员工学习输出/平台/李元乾 文件:jprofiler_windows_6_0_2.exe 现有可用key:
L-Larry_Lau@163.com#78484-akisfpr22a5j#268 L-Larry_Lau@163.com#85756-laf1m81o8l0am#03510 L-Larry_Lau@163.com#54329-1okktf1zoaw6#340 L-Larry_Lau@163.com#2308-rawrdt14n3yp8#0331 L-Larry_Lau@163.com#95931-19bzzha12jyss4#433
性能测试——线程数过多
线程数过多 检验方式: 进行某些特定的操作,如资源同步。若系统线程 数突发性的增长或持续增长,且之后不回落,说 明某些模块在持续性的占用线程。 观察是否有许多线程来自同一个模块、长期处于 waiting或block状态 观察如下视图:
www.raisecom.com
性能测试——线程数过多
www.raisecom.com
性能测试——系统内存占用大
系统内存占用大 检验方式: 进行某些特定的操作,如资源同步。若系统内存 数突发性的增长,且之后不回落,说明某些模块 在持续性的占用系统资源。 若出现以下现象,可定位系统内存占用问题:
www.raisecom.com
性能测试——系统内存占用大
选择On this computer项
www.raisecom.com
Jprofiler配置(应用程序)
选择JVM的厂家及版本。我们可以选择Sun公司的 1.6.0 JVM版本 www.raisecom.com
Jprofiler配置(应用程序)
第一项:程序等待Jprofiler监控开始在开始运行 第二项:程序立即启动(通常选择) www.raisecom.com 第三项:离线模式,生成记录文件(一般不用)
www.raisecom.com
性能测试——内存泄露
内存泄露 出现情况: • ResultSet未释放。 例:在平台的模块中,有将ResultSet作为方法 返回值进行返回的情况。在这种情况中,调用 该方法的方法未进行ResultSet的释放,就可能 会造成ResultSet长期存在的情况。建议不将其 作为返回值返回,在需要返回的情况下将数据 读出,转移到集合类中返回。
如下图所示:一般的工具类实例化数都为1
www.raisecom.com
性能测试——线程数过多
测试实例:
• 告警映射生成类问题 • 如上图所示,在对NNM5系统压力的一期测试中,发现 告警映射的类有大量生成问题(量级约为万) • 经阅读代码,其中的某些类中没有成员变量,应为工具 类型的类 • 建议阅读相关代码,进行修改
Thread Views 界面 Thread History标签
Thread Views 界面 Thread Monitor标签
www.raisecom.com
性能测试——线程数过多
测试实例:
• 资源模型缓存问题 • 资源模型缓存在使用线程时,采用了自建线程的方式, 在某个线程锁上发生了阻塞,导致系统线程数居高不下
www.raiFra Baidu bibliotekecom.com
Jprofiler配置(Eclipse)
Jprofiler可以作为插件, 在Eclipse中配置使用,免 去的配置的繁琐性。 如右图所示,选择主菜单 ,Session项,选择IDE Integrations 项
www.raisecom.com
Jprofiler配置(Eclipse)
Jprofiler简介
Jprofiler:
– JVM监控工具,可很好的监视CPU、线程和内存 – 可与Eclipse进行整合,也可单独监控某一进程 – 可监控远程计算机上的进程 – 观察每个对象的生存情况,提升模块性能 – 可观察GC情况、CPU使用情况、堆使用情况等
www.raisecom.com
www.raisecom.com
内存调优方向
健康系统内存表现:
不出现内存泄露 不会出现频繁的GC 是否出现频繁实例化对象 每次GC之后,Heap中的剩余内存量最好占Heap上限值 的35%—50%左右,且不出现迅速的增长 • GC不会消耗太多的时间,最好在0.5s以下(可通过 –XX:+PrintGCDetails查看GC细节) • 线程数量适当 • • • •
选择 Eclipse 3.5 (经测试, 如版本为 Eclipse 3.6 ,选择3.5 也可集成 ),点击出 现的按钮 ”Integrate”
www.raisecom.com
Jprofiler配置(Eclipse)
打开Eclipse,点击windows--customize perspective—Command Group Availability 在列表中将Profile这一项前面打勾
www.raisecom.com
性能测试——内存泄露
内存泄露 检验方式: 内存泄露需要进行时长测试,既将监控界面及系 统界面全部打开,进行长时间运行(如12小时) ,观察系统类的增长情况。 如果在Jprofiler的视图中,有如下两种情况出现, 可以基本判定为内存泄露:
www.raisecom.com
同上,选择 Mark current values(记录当前值), 经过系统模块测试,出现较大规模的红色部分( 增长部分),且无法GC(非始终增加)
www.raisecom.com
性能测试——系统内存占用大
堆视图如下:有增长,无法回落,但并非持续性 增长
www.raisecom.com
性能测试——系统内存占用大
www.raisecom.com
Memory View界面
www.raisecom.com
Thread View界面
www.raisecom.com
VM Telemetry View界面
www.raisecom.com
性能测试
NNM5系统性能测试主要问题:
– 内存泄露 – 内存占用过大,响应速率慢 – 线程数不断增加,出现死锁或空闲线程 – 某些工具类实例化数目过多,占用多余的内存 空间
例如我们想监控NNM5的 服务器端,需要在 NMS\PLATFORM\NNM5\se rver\run.xml中加入上述 字符串,如下图所示
www.raisecom.com
Jprofiler配置(应用程序)
www.raisecom.com
Jprofiler配置(应用程序)
经过上述步骤,Jprofiler在应用程序上的配 置就完成了。我们可以开启应用程序及 Jprofiler,进入监控界面:
Jprofiler配置(应用程序)
选择监控端口,一般采用默认的8849。 注:若需要监控两个程序,需要修改监控端口 www.raisecom.com
Jprofiler配置(应用程序)
得到配置命令行
www.raisecom.com
Jprofiler配置(应用程序)
这一步比较重要
拷贝上文中的配置字符串agentpath:C:\PROGRA~1\JPR OFI~1\bin\windows\jprofilerti .dll=port=8849
测试实例:
• MibNodes节点问题,如上文图中所示。 • SNMP模块在缓存MibNode节点信息是,将所有的值长 期持有在HashTable中 • 随着设备发现及同步的进行,该类的数量出现大规模增 加,并且在系统退出之前不会进行释放
解决方案:
• 编写缓存,将这种规模的数据进行了缓存及释放
www.raisecom.com
解决方案:
• 检验代码,修正发生阻塞的地方。 • 建议以后的模块在有类似的需求是,采用线程池的方式
www.raisecom.com
性能测试——工具类实例化多
工具类实例化多:
• 某些工具类未采用static方式,但系统实例化地方较多 ,导致实例化出来的类数量很多 • 该问题会浪费实例化时间以及空间
检验方式:
www.raisecom.com
其他的内存监控工具
如果电脑上安装了JDK1.6以上的版本,可以使用 Java自带的一个快捷内存监控工具: jvisualvm 其路径为: Java安装目录\ Java\jdk1.6.0_25\bin\ jvisualvm.exe 该软件可进行内存、线程及cpu的相关监控,其使 用界面较为简洁。
性能测试——内存泄露
1.如上文所示,堆视图:
打开方式:Jprofiler,VM Telemetry View 界面 Memory 标签页,Heap选项
www.raisecom.com
性能测试——内存泄露
2.打开Jprofiler的Memory views界面(初始界面)
打开Recorded Object标签,在界面上点击右键菜单,选择 Mark current values(记录当前值),经过时长测试, 出现较大规模的红色部分(增长部分),且无法GC
www.raisecom.com
性能测试——内存泄露
内存泄露 出现情况: • 应用第三方框架时,未调用某些类或方法的释 放方法。 例:拓扑模块中, com.raisecom.nms.topo.client.core.view.ui.TopoVi ewRefreshTimerTask。该方法未调用释放方法, 导致内存出现持续性上涨。
www.raisecom.com
Jprofiler配置(Eclipse)
经过如上配置,就将Jprofiler同Eclipse集成 完毕了,我们可以通过界面上的标志进行调 用(配置参数同debug configuration中)
各种需要的参数Jprofiler都会自动生成
www.raisecom.com
Jprofiler配置(应用程序)
开启Jprofiler会弹出上述菜单,选择application项 (也可以在StartCenter中创建一个新项目)
www.raisecom.com
Jprofiler配置(应用程序)
选择Generic application项
www.raisecom.com
Jprofiler配置(应用程序)
Jprofiler基本使用
Jprofiler基本使用主要涉及以下几个界面:
• Memory View界面:最经常使用,用于观察系统内存具 体情况——实例化的类数量、大小、引用关系 • Thread View界面:线程界面,用于监控线程的数量、每 个线程的具体运行状态及线程的引用模块 • VM Telemetry View界面:显示系统总体运行情况,包括 堆视图、非堆视图、CPU、线程数、GC情况、记录类生 成情况、类总数等内容
www.raisecom.com
Jprofiler安装
注: – 一个key在局域网中只能同时使用一个, 否则会把前一个使用的成员强行中断 – 建议每个组分配一个key,因为组内同时 使用Jprofiler进行调优的概率较低。可防 止在使用中被踢下去造成的工作进度损失
www.raisecom.com
www.raisecom.com
内存调优方向——推荐文档
选择合适的GC算法:
• • • • –XX:+UseSerialGC Serial –XX:+UseParallelGC Parallel –XX:+UseParallelOldGC Parallel compacting –XX:+UseConcMarkSweepGC Concurrent mark–sweep (CMS)
内部培训资料
Jprofiler内存监控及系统调优
李元乾
www.raisecom.com / www.raisecom.com
Jprofiler内存监控及系统调优
内存监控目的
1.发现内存泄露 2.发现主要占用内存的数据 3.帮助修正代码结构,系统结构,提高 系统的运行效率
www.raisecom.com
www.raisecom.com
性能测试——内存泄露
如下图所示:这一系列的实例化数都较多
www.raisecom.com
性能测试——内存泄露
Jprofiler使用界面
www.raisecom.com
Jprofiler安装
安装程序存放路径:ftp://192.168.9.8/新 员工学习输出/平台/李元乾 文件:jprofiler_windows_6_0_2.exe 现有可用key:
L-Larry_Lau@163.com#78484-akisfpr22a5j#268 L-Larry_Lau@163.com#85756-laf1m81o8l0am#03510 L-Larry_Lau@163.com#54329-1okktf1zoaw6#340 L-Larry_Lau@163.com#2308-rawrdt14n3yp8#0331 L-Larry_Lau@163.com#95931-19bzzha12jyss4#433
性能测试——线程数过多
线程数过多 检验方式: 进行某些特定的操作,如资源同步。若系统线程 数突发性的增长或持续增长,且之后不回落,说 明某些模块在持续性的占用线程。 观察是否有许多线程来自同一个模块、长期处于 waiting或block状态 观察如下视图:
www.raisecom.com
性能测试——线程数过多
www.raisecom.com
性能测试——系统内存占用大
系统内存占用大 检验方式: 进行某些特定的操作,如资源同步。若系统内存 数突发性的增长,且之后不回落,说明某些模块 在持续性的占用系统资源。 若出现以下现象,可定位系统内存占用问题:
www.raisecom.com
性能测试——系统内存占用大
选择On this computer项
www.raisecom.com
Jprofiler配置(应用程序)
选择JVM的厂家及版本。我们可以选择Sun公司的 1.6.0 JVM版本 www.raisecom.com
Jprofiler配置(应用程序)
第一项:程序等待Jprofiler监控开始在开始运行 第二项:程序立即启动(通常选择) www.raisecom.com 第三项:离线模式,生成记录文件(一般不用)
www.raisecom.com
性能测试——内存泄露
内存泄露 出现情况: • ResultSet未释放。 例:在平台的模块中,有将ResultSet作为方法 返回值进行返回的情况。在这种情况中,调用 该方法的方法未进行ResultSet的释放,就可能 会造成ResultSet长期存在的情况。建议不将其 作为返回值返回,在需要返回的情况下将数据 读出,转移到集合类中返回。
如下图所示:一般的工具类实例化数都为1
www.raisecom.com
性能测试——线程数过多
测试实例:
• 告警映射生成类问题 • 如上图所示,在对NNM5系统压力的一期测试中,发现 告警映射的类有大量生成问题(量级约为万) • 经阅读代码,其中的某些类中没有成员变量,应为工具 类型的类 • 建议阅读相关代码,进行修改
Thread Views 界面 Thread History标签
Thread Views 界面 Thread Monitor标签
www.raisecom.com
性能测试——线程数过多
测试实例:
• 资源模型缓存问题 • 资源模型缓存在使用线程时,采用了自建线程的方式, 在某个线程锁上发生了阻塞,导致系统线程数居高不下
www.raiFra Baidu bibliotekecom.com
Jprofiler配置(Eclipse)
Jprofiler可以作为插件, 在Eclipse中配置使用,免 去的配置的繁琐性。 如右图所示,选择主菜单 ,Session项,选择IDE Integrations 项
www.raisecom.com
Jprofiler配置(Eclipse)
Jprofiler简介
Jprofiler:
– JVM监控工具,可很好的监视CPU、线程和内存 – 可与Eclipse进行整合,也可单独监控某一进程 – 可监控远程计算机上的进程 – 观察每个对象的生存情况,提升模块性能 – 可观察GC情况、CPU使用情况、堆使用情况等
www.raisecom.com
www.raisecom.com
内存调优方向
健康系统内存表现:
不出现内存泄露 不会出现频繁的GC 是否出现频繁实例化对象 每次GC之后,Heap中的剩余内存量最好占Heap上限值 的35%—50%左右,且不出现迅速的增长 • GC不会消耗太多的时间,最好在0.5s以下(可通过 –XX:+PrintGCDetails查看GC细节) • 线程数量适当 • • • •
选择 Eclipse 3.5 (经测试, 如版本为 Eclipse 3.6 ,选择3.5 也可集成 ),点击出 现的按钮 ”Integrate”
www.raisecom.com
Jprofiler配置(Eclipse)
打开Eclipse,点击windows--customize perspective—Command Group Availability 在列表中将Profile这一项前面打勾
www.raisecom.com
性能测试——内存泄露
内存泄露 检验方式: 内存泄露需要进行时长测试,既将监控界面及系 统界面全部打开,进行长时间运行(如12小时) ,观察系统类的增长情况。 如果在Jprofiler的视图中,有如下两种情况出现, 可以基本判定为内存泄露:
www.raisecom.com
同上,选择 Mark current values(记录当前值), 经过系统模块测试,出现较大规模的红色部分( 增长部分),且无法GC(非始终增加)
www.raisecom.com
性能测试——系统内存占用大
堆视图如下:有增长,无法回落,但并非持续性 增长
www.raisecom.com
性能测试——系统内存占用大
www.raisecom.com
Memory View界面
www.raisecom.com
Thread View界面
www.raisecom.com
VM Telemetry View界面
www.raisecom.com
性能测试
NNM5系统性能测试主要问题:
– 内存泄露 – 内存占用过大,响应速率慢 – 线程数不断增加,出现死锁或空闲线程 – 某些工具类实例化数目过多,占用多余的内存 空间
例如我们想监控NNM5的 服务器端,需要在 NMS\PLATFORM\NNM5\se rver\run.xml中加入上述 字符串,如下图所示
www.raisecom.com
Jprofiler配置(应用程序)
www.raisecom.com
Jprofiler配置(应用程序)
经过上述步骤,Jprofiler在应用程序上的配 置就完成了。我们可以开启应用程序及 Jprofiler,进入监控界面:
Jprofiler配置(应用程序)
选择监控端口,一般采用默认的8849。 注:若需要监控两个程序,需要修改监控端口 www.raisecom.com
Jprofiler配置(应用程序)
得到配置命令行
www.raisecom.com
Jprofiler配置(应用程序)
这一步比较重要
拷贝上文中的配置字符串agentpath:C:\PROGRA~1\JPR OFI~1\bin\windows\jprofilerti .dll=port=8849
测试实例:
• MibNodes节点问题,如上文图中所示。 • SNMP模块在缓存MibNode节点信息是,将所有的值长 期持有在HashTable中 • 随着设备发现及同步的进行,该类的数量出现大规模增 加,并且在系统退出之前不会进行释放
解决方案:
• 编写缓存,将这种规模的数据进行了缓存及释放
www.raisecom.com
解决方案:
• 检验代码,修正发生阻塞的地方。 • 建议以后的模块在有类似的需求是,采用线程池的方式
www.raisecom.com
性能测试——工具类实例化多
工具类实例化多:
• 某些工具类未采用static方式,但系统实例化地方较多 ,导致实例化出来的类数量很多 • 该问题会浪费实例化时间以及空间
检验方式:
www.raisecom.com
其他的内存监控工具
如果电脑上安装了JDK1.6以上的版本,可以使用 Java自带的一个快捷内存监控工具: jvisualvm 其路径为: Java安装目录\ Java\jdk1.6.0_25\bin\ jvisualvm.exe 该软件可进行内存、线程及cpu的相关监控,其使 用界面较为简洁。
性能测试——内存泄露
1.如上文所示,堆视图:
打开方式:Jprofiler,VM Telemetry View 界面 Memory 标签页,Heap选项
www.raisecom.com
性能测试——内存泄露
2.打开Jprofiler的Memory views界面(初始界面)
打开Recorded Object标签,在界面上点击右键菜单,选择 Mark current values(记录当前值),经过时长测试, 出现较大规模的红色部分(增长部分),且无法GC
www.raisecom.com
性能测试——内存泄露
内存泄露 出现情况: • 应用第三方框架时,未调用某些类或方法的释 放方法。 例:拓扑模块中, com.raisecom.nms.topo.client.core.view.ui.TopoVi ewRefreshTimerTask。该方法未调用释放方法, 导致内存出现持续性上涨。
www.raisecom.com
Jprofiler配置(Eclipse)
经过如上配置,就将Jprofiler同Eclipse集成 完毕了,我们可以通过界面上的标志进行调 用(配置参数同debug configuration中)
各种需要的参数Jprofiler都会自动生成
www.raisecom.com
Jprofiler配置(应用程序)
开启Jprofiler会弹出上述菜单,选择application项 (也可以在StartCenter中创建一个新项目)
www.raisecom.com
Jprofiler配置(应用程序)
选择Generic application项
www.raisecom.com
Jprofiler配置(应用程序)
Jprofiler基本使用
Jprofiler基本使用主要涉及以下几个界面:
• Memory View界面:最经常使用,用于观察系统内存具 体情况——实例化的类数量、大小、引用关系 • Thread View界面:线程界面,用于监控线程的数量、每 个线程的具体运行状态及线程的引用模块 • VM Telemetry View界面:显示系统总体运行情况,包括 堆视图、非堆视图、CPU、线程数、GC情况、记录类生 成情况、类总数等内容
www.raisecom.com
Jprofiler安装
注: – 一个key在局域网中只能同时使用一个, 否则会把前一个使用的成员强行中断 – 建议每个组分配一个key,因为组内同时 使用Jprofiler进行调优的概率较低。可防 止在使用中被踢下去造成的工作进度损失
www.raisecom.com
www.raisecom.com
内存调优方向——推荐文档
选择合适的GC算法:
• • • • –XX:+UseSerialGC Serial –XX:+UseParallelGC Parallel –XX:+UseParallelOldGC Parallel compacting –XX:+UseConcMarkSweepGC Concurrent mark–sweep (CMS)
内部培训资料
Jprofiler内存监控及系统调优
李元乾
www.raisecom.com / www.raisecom.com
Jprofiler内存监控及系统调优
内存监控目的
1.发现内存泄露 2.发现主要占用内存的数据 3.帮助修正代码结构,系统结构,提高 系统的运行效率
www.raisecom.com