- 浏览: 702274 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (239)
- 系统架构设计 (16)
- java collection framework (2)
- java分布式 (4)
- java多线程 (0)
- 故障处理及调优 (16)
- 软件开发过程及管理 (28)
- OS (5)
- 常用算法 (3)
- design pattern (8)
- transaction (7)
- java apps (48)
- corejava (7)
- java and DB (10)
- cache (0)
- webservice (14)
- web前端 (25)
- 报表 (4)
- 日志系统设计 (3)
- Oracle (4)
- mysql (11)
- xml (11)
- 数据源配置管理 (3)
- 企业数据存储 (4)
- php (2)
- 测试 (1)
最新评论
-
orangebook:
对于初学者来说,这样编写可能会误导,理解更烦锁。
观察者模式(发布-订阅) -
liudajiang:
呵呵 startThreads(rand ...
实践缩小Java synchronized 粒度 -
zengwenbo5566:
谢谢博主,学习了
解决getOutputStream() has already been called for this response -
u011335423:
大神厉害啊 可以了
解决getOutputStream() has already been called for this response -
xiang37:
...
解决getOutputStream() has already been called for this response
JConsole是JDK自带的东西,功能虽然没有一些商业软件那么强大,但是稳定性好,在大压力情况下也不会发生什么问题。而且提供了相对全面的系统监控功能,还是值得一用的。
JConsole
JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。如果要把一个应用以可管理的形式启动,可以在启动是设置com.sun.management.jmxremote。例如,启动一个可以在本地监控的J2SE的应用Java2Demo ,需输入以下命令:
JDK_HOME/bin/java -Dcom.sun.management.jmxremote -jar
JDK_HOME/demo/jfc/Java2D/Java2Demo.jar
JDK_HOME需要是一个含有JDK5.0的目录。要启动JConsole,运行JDK_HOME/bin/jconsole一个用于连接的对话框将会打开。对话框的Local标签列出了所有本地正在运行的JVM,还包含进程的ID等信息。
Figure 2: Local Tab.
JConsole可以以三种方式连接正在运行的JVM:
Local:使用JConsole连接一个正在本地系统运行的JVM,并且执行程序的和运行JConsole的需要是同一个用户。
JConsole使用文件系统的授权通过RMI连接器连接到平台的MBean服务器上。这种从本地连接的监控能力只有Sun的JDK具有
Remote:使用下面的URL通过RMI连接器连接到一个JMX代理:
service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi
hostName填入主机名称,portNum为JMX代理启动时指定的端口。
JConsole为建立连接,需要在环境变量中设置mx.remote.credentials来指定用户名和密码从而进行授权。
Advanced:使用一个特殊的URL连接JMX代理。一般情况使用自己定制的连接器而不是RMI提供的连接器来连接JMX代理,或者是一个使用JDK1.4的实现了JMX和JMX Rmote的应用。 当JConsole成功建立连接,它从连接上的JMX代理处获取信息,并且以下面几个标签页呈现信息。
Summary tab. 监控JVM和一些监控变量的信息。
Memory tab. 内存使用信息
Threads tab. 线程使用信息
Classes tab. 类调用信息
VM tab. JVM的信息
MBeans tab.所有MBeans的信息
MBeans tab展示了所有以一般形式注册到JVM上的MBeans。MBeans tab允许你获取所有的平台信息,包括那些不能从其他标签页获取到的信息。注意,其他标签页上的一些信息也在MBeans这里显示。另外,你可以使用 MBeans标签管理你自己的应用的MBeans
使用MBeans Tab监控和管理MBean
注册到JMX代理的平台或者应用的MBeans,可以通过MBeans标签获取。例如,内存的MBeans如下面定义
public interface MemoryMXBean { public MemoryUsage getHeapMemoryUsage(); public MemoryUsage getNonHeapMemoryUsage(); public int getObjectPendingFinalizationCount(); public boolean isVerbose(); public void setVerbose(boolean value); public void gc(); }
内存的MBean包括四个属性:
HeapMemoryUsage. 用于描述当前堆内存使用情况的只读属性
NonHeapMemoryUsage. 用于描述当前的非堆内存的使用情况的只读属性
ObjectPendingFinalizationCount.用于描述有多少对象被挂起以便回收。
Verbose.用于动态设置GC是否跟着详细的堆栈信息,为一个布尔变量,内存的MBean支持一个操作——GC,此操作可以发送进行实时的垃圾回收请求。
Figure 3: MBeans Tab.
左边的树形结构以名字的方式展示了所有MBeans的列表。一个MBean对象的名字由一个域的名字和一串关键字属性组成。例如,JVM的平台的MBeans是在“java.lang”域下的一组,而日志的MBeans则在"java.util.logging"域下。MBean对象的名字在javax.management.ObjectName 规范中定义。
当你在树中选中一个MBean,属性,方法,或者通知等一些信息会再右边显示出来。如果属性是可写的(属性被标志为蓝色),你可以进行设置。你可以操作在Operations tab中列出的操作。你也可以看到由MBean发送出来的通知:默认情况,如果你不订阅通知的话,JConsole不会收到MBean发生过来的通知。你可以点击"Subscribe"(订阅)按钮来堆通知进行定义,而使用"Unsubscribe"按钮来取消订阅
Figure 4: MBeans Notification.
监控内存
内存标签页通过读取内存系统、内存池、垃圾回收的MBean来获取对内存消耗、内存池、垃圾回收的情况的统计。
图:
上图展示了内存随时间变化的使用情况。有对堆的、非堆的以及特殊内存池的统计。内存池信息是否能被获取,取决与使用的Java虚拟机。下面列表展示了HotSpot虚拟机的内存池情况。
Eden Space (heap): 内存最初从这个线程池分配给大部分对象。
Survivor Space (heap):用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。
Tenured Generation (heap):用于保持已经在 survivor space内存池中存在了一段时间的对象。
Permanent Generation (non-heap): 保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的,
Code Cache (non-heap):HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)
详细信息区域给出一些当前线程的信息:
Used :已使用:当前的内存使用量。使用的内存包括所有对象(能被获取和不能被获取的)所占用的内存。
Committed :分配量:Java虚拟机保证能够获取到的内存量。分配内存(committedmemory)的量可能随时间改变。Java虚拟机可能释放部分这里的内存给系统,相应的分配的内存这时可能少于初始化时分配的给它的量。分配量总数大于或等于已使用的内存量。
Max :内存管理系统可以使用的最大内存量。这个值可以被改变或者不做设定。如果JVM试图增加使用的内存到大于分配量(committedmemory)的情况,内存分配可能失败,即便想使用的内存量小于或者等于最大值(如:系统虚拟内存比较低时)
Usage Threshold The usage threshold of a memory pool. This field will only beshown if the memory pool supports usage threshold.
GC time :垃圾回收使用的总时间和调用垃圾回收的次数。它可能有好几行,每行代表JVM使用的垃圾回收算法。(
右下角的棒状图表显示了被JVM的内存池消耗的内存。如果内存使用超过 usage threshold,则棒会变红。usagethreshold是用于支持内存检查的Memory Pool MBean的一个属性。MemoryPoolMXBean定义了一系列方法用于检查内存。
public interface MemoryPoolMXBean { .... // Usage threshold public long getUsageThreshold(); public void setUsageThreshold(long threshold); public boolean isUsageThresholdExceeded(); public boolean isUsageThresholdSupported(); // Collection usage threshold public long getCollectionUsageThreshold(); public void setCollectionUsageThreshold(long threshold); public boolean isCollectionUsageThresholdSupported(); public boolean isCollectionUsageThresholdExceeded(); }
每种内存池可能有两种内存初始话支持: usage threshold和collection usage threshold特殊的内存池可能两种都不支持。
Usage Threshold
usage threshold是内存池中一个可管理的属性。它使用低负荷的内存监控。设置usage threshold为正值则usage threshold检查内存池。设置usage threshold为零,则关闭检查。默认值由JVM设置。JVM一般让usage threshold在最合适的时候检查内存,典型的在GC的过程中和某些分配内存的时候。如果JVM发现当前的内存使用超过了usage threshold,它将会把UsageThresholdExceeded属性设置为true
有些内存池可能不支持usage threshold。你可以使用UsageThresholdSupported属性来判断一个内存池是否支持usage threshold。例 如,一个比较完善(generational garbage collector)的垃圾回收器(如HotSpot的虚拟机),most of the objects are allocated in the young generation,从eden内存池中产生。eden pool被设计成可以被装满;再eden pool中执行垃圾回收将会释放他
Collection Usage Threshold
Collection usage threshold是可进行垃圾回收的内存池的一个可配置属性。JVM堆一个内存池进行 垃圾回收以后,此内存池中的一些内存仍然被那些没有被回收的对象占用。collection usage threshold仅允许你在垃圾回收后对内存进行检查。如果JVM发现可用内存超出collection usage threshold,它将会设置CollectionUsageThresholdExceeded属性为true。
你可以使用CollectionUsageThresholdSupported属性来控制内存池释放支持 collection usage threshold.
usage threshold 和collection usage threshold是MBean标签中的一组。例如,在左边的树形结构中选择TenuredGen,设置tenured generation memory pool的usage threshold为6m。如下图所示
Figure 6: Setting Usage Threshold.
当 TenuredGen
memory pool的内存使用超过6MBytes时,代表 TenuredGen
memory pool的柱状图将会呈现红色来代表使用的内存超过了usage threshold。代表堆内存的柱状图也将变为红色。你可以选择柱状图或者在图表中指定内存池来查看某个指定内存池的信息。如果把鼠标房子柱状图上,将会显示出内存池的名字
Figure 7: Low Memory.
开启/关闭虚拟机的详细跟踪
如上所述,内存系统的MBean定义了一个叫做Verbose布尔变量,让你能动态的打开或关闭详细的GC跟踪。详细的GC跟踪,将会在JVM启动时显示。默认的HotSpot的GC详细输出为stdout
.
Figure 8: Setting Verbose GC. 死锁检查
线程标签页提供关于应用的线程运行信息
发表评论
-
java服务,cpu高,内存高,telnet不通排查及分析
2013-12-22 12:29 3107记录上周五的一个java服务的异常排查及分析过程,以备将来 ... -
QPS、PV和需要部署机器数量计算公式
2013-07-31 16:39 1723QPS = req/sec = 请求数/秒 【QPS ... -
java自带监视工具使用_jmap_jhat
2013-07-06 17:50 889jmap命令(Java Memory Map)1.介绍打 ... -
java自带监视工具使用_jps_jstack
2013-07-06 17:32 1872jps命令(Java Virtual Machin ... -
处理OutOfMemoryError: PermGen space
2013-07-06 12:15 1431前两天后台系统内存溢出错误,查看tomcat日志,看到如下 ... -
Heap OOM故障实例2_websphere应用部署
2013-03-20 18:21 2061根据用户需求,将公司 ... -
Heap OOM故障实例1
2013-02-25 15:43 1384故障描述: 线上系统运行过程中出现OOM异常,导致jvm ... -
TCP close_wait内幕
2012-09-07 14:41 1719最近遇到的一个关于socket.close的问题,在某个应用服 ... -
visualVM远程监视安装
2012-08-10 14:44 11031. 通过jstatd启动RMI服务 ... -
tomcat内存配置及项目实践
2010-04-29 16:07 1707最近在做一个数据请求 ... -
利用JProfiler对应用服务器内存泄漏问题诊断一例-2
2009-09-10 17:22 3186实施情况 采用的方案:某某软件商采用了新的会话登录信息 ... -
利用JProfiler对应用服务器内存泄漏问题诊断一例-1
2009-09-10 17:16 1583在中间件应用服务器� ... -
jconsole+tomcat配置说明-3-基于jdk1.5
2009-09-07 16:33 4519Figure 15: List of All Logger N ... -
jconsole+tomcat配置说明-2-基于jdk1.5
2009-09-07 16:18 1743Figure 9: Threads Tab. � ... -
监控和剖析数据库操作 -- P6Spy、SQL Profiler、IronTrack SQL 使用简
2008-12-31 16:37 1871俞 黎敏 (mailto:YuLimin@163. ...
相关推荐
Python等级考试青少年软件编程(python四级)等级考试试卷-编程题(2024年6月)-附答案提取方式是百度网盘分享地址
Python等级考试青少年软件编程(Python四级)等级考试试卷-编程题(2022年6月)-附答案提取方式是百度网盘分享地址
自动捆带机设备sw18可编辑全套技术资料100%好用.zip
环境说明: 开发语言:Java 服务器:tomcat7及以上 JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者。。。
基于扩展卡尔曼观测器的无模型预测电流控制 仿真中包含普基于ESO,与EKF两个观测器,可自行切对比
这是一个简单易用的卡密验证系统,主要功能包括: 卡密管理和验证,多模板支持,响应式设计,验证码保护,防刷机制,简洁的用户界面, 支持自定义模板,移动端优化,安全性保护,易于部署和维护。 # 系统要求 - PHP 7.0 或更高版本 - MySQL 5.6 或更高版本 # 安装步骤 1. 上传所有文件到网站根目录 2. 访问 `install.php` 进行安装 3. 按提示填写数据库信息 4. 设置管理员账号 5. 删除 `install.php` 文件
本数据选取了中国各地区2000-2020年第三产业具体数据和中国第三产业的有效值占比。其中第三产业选取了原始数据,线性插值,ARIMA填补数据测算;有效值占比包括行政区划代码、年份、地区、经度、纬度、三次产业全部法人单位数 、第一产业法人单位数、第二产业法人单位数、第三产业法人单位数 、第三产业法人单位所占比重、第三产业企业法人单位数、第三产业事业法人单位数、第三产业机关法人单位数、第三产业社会团体法人单位数等变量 。 内容包括有效值占比2009年后(原始数据) 、有效值占比全部年份(原始数据)、 有效值占比2009年后(线性插值) 、有效值占比全部年份(线性插值) 、有效值占比2009年后(ARIMA填补), 有效值占比全部年份(ARIMA填补)等数据分析。 本数据汇总形成各省第三产业发展情况数据,包括 三次产业全部法人单位数(个)、第三产业法人单位所占比重 、第三产业企业法人单位数、第三产业事业法人单位数重点数据,便于各省横向比较。
一款安卓自动化工具,通过无障碍服务实现自动化操作,无需Root。 包括悬浮窗录制、界面分析、控件操作等功能。可以使用JavaScript编写脚本,支持代码补全和格式化,甚至可以将脚本打包为APK文件,便于开发小工具应用。
python-25.火柴棒等式——小学游戏(没玩过)(哭).py
comsol 采动影响下考虑塑性变形煤层瓦斯抽采模型comsol流固耦合瓦斯抽采模型
Ribbon源码分析选型ppt分析
锂电池电芯处理生产线step全套技术资料100%好用.zip
是个干净清爽且快速的实用工具应用,用于帮您在无需使用您的实体电源键的情况下即可关闭您的手机屏幕(锁屏)。这可以帮您延长实体电源键的寿命来避免电源键过早损坏。 此应用使用了安卓系统的无障碍功能来实现无需 ROOT 权限即可进行锁屏。
扎带送料机sw18可编辑全套技术资料100%好用.zip
双三相永磁同步电机模型预测转矩控制,预测控制集可单电压矢量,可电压矢量。 图1为预测转矩控制框图 图2为转矩跟踪波形 图3为转速曲线 图4为xy谐波电流 支持定制,欢迎交流。
有效地处理图像中的照明不均衡问题。通过对图像进行同态滤波,可以在保留图像细节的同时,调整图像的亮度分布,使整体照明更加均匀。 对比度增强: 同态滤波可以调整图像的对比度,使得图像中的细节更加清晰可见。这有助于提高图像的可视化质量,并且在一些应用中能够更容易地分析和理解图像内容
微型激光切割机sw18可编辑全套技术资料100%好用.zip
MySQL工具使用C和C++连接MySQL数据库并进行常用的数据库操作。实现了简单的学生(或部队)信息管理系统,来源于大学时的数据库课程设计。如果觉得有用,欢迎大家star,同时也欢迎fork后贡献代码提交PR
本基于微信的设备故障报修管理系统有管理员,用户,维修员三个角色。 管理员功能有 个人中心,用户管理,维修员管理,实验室管理,经验分享管理,报修信息管理,维修报告管理,维修信息管理。用户和维修员都可以在微信小程序注册登录,用户主要查看经验分享,对实验室进行报修提交,查看维修结果和留言板,维修员发布经验分享,查看报修信息,对报修内容提交维修报告并且查看维修结果。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具
Gps跟踪你的体育运动,使用安卓手机中的gps跟踪你的体育运动 查看你的步伐 距离和时间 准确计算