使用JMX监控Tomcat

监控应用服务器使用JMX监控Tomcat
前言:做了一个监控应用服务器的项目(支持Tocmat、WebSphere、WebLogic各版本), 过程也算是磕磕绊绊,由于网上缺少相关资料,或者深陷于知识的海洋难以寻觅到有效的资料,因而走过不少弯路,遇过不少困难。为了留下点印记,给后来人留下 点经验之谈,助之少走弯路,故将这些经验整理出来,与大家分享。水平有限,难免疏漏,还望指正。如有疑问,欢迎留言,或者加入Q群参与讨 论:35526521。

一、激活Tomcat的JMX远程配置

要通过JMX远程监控Tomcat,首先需要激活Tomcat的JMX远程配置。

① 先修改Tomcat的启动脚本,windows下为bin/catalina.bat(linux下为catalina.sh),添加以下内容,8999是jmxremote使用的端口号,第二个false表示不需要鉴权:
Xml代码 收藏代码
set JMX_REMOTE_CONFIG=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
set CATALINA_OPTS=%CATALINA_OPTS% %JMX_REMOTE_CONFIG%

要注意以上语句的位置不能太后面,可以加在【if "%OS%" == "Windows_NT" setlocal】一句后的大段的注释后面。

参考官方说明:
http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html#Enabling_JMX_Remote


② 上面的配置是不需要鉴权的,如果需要鉴权则添加的内容为:
Xml代码 收藏代码
set JMX_REMOTE_CONFIG=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
set CATALINA_OPTS=%CATALINA_OPTS% %JMX_REMOTE_CONFIG%

③ 然后复制并修改授权文件
$JAVA_HOME/jre/lib/management下有jmxremote.access和jmxremote.password的模板文件,将两个文件复制到$CATALINA_BASE/conf目录下
◆ 修改$CATALINA_BASE/conf/jmxremote.access 添加内容:
monitorRole readonly
controlRole readwrite
◆ 修改$CATALINA_BASE/conf/jmxremote.password 添加内容:
monitorRole chenfeng
controlRole chenfeng


注意: 如果进行了以上步骤导致Tomcat启动不了,那么很可能是密码文件的权限问题

需要修改jmxremote.password文件的访问权限,只有运行Tomcat的用户才能拥有访问权限 :
Windows的NTFS文件系统下,选中文件,点右键 -->“属性”-->“安全”--> 点“高级”--> 点“更改权限”--> 去掉“从父项继承....”--> 弹出窗口中选“删除”,这样就删除了所有访问权限。再选“添加”--> “高级”--> “立即查找”,选中你的用户(或用户组,如果选用户不行那就选用户组),例administrator,点“确定",“确定"。来到权限项目窗口,勾选“完全控制”,点“确定”,OK了。

官方的提示:
The password file should be read-only and only accessible by the operating system user Tomcat is running as.

④ 重新启动Tomcat,在Windows命令行输入“netstat -a”查看配置的端口号是否已打开,如果打开,说明上面的配置成功了。

⑤ 使用jconsole测试JMX。
运行$JAVA_HOME/bin目录下的jconsole.exe,打开J2SE监视和管理控制台,然后建立连接,如果是本地的Tomcat则直接选择然后点击连接,如果是远程的,则进入远程选项卡,填写地址、端口号、用户名、口令即可连接。。Mbean属性页中给出了相应的数据,Catalina中是tomcat的,java.lang是jvm的。对于加粗的黑体属性值,需双击一下才可看内容。


二、使用JMX监控Tomcat示例代码
Java代码 收藏代码
String jmxURL = "service:jmx:rmi:///jndi/rmi://192.168.10.93:8999/jmxrmi";
JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);

Map map = new HashMap();
// 用户名密码,在jmxremote.password文件中查看
String[] credentials = new String[] { "monitorRole", "tomcat" };
map.put("jmx.remote.credentials", credentials);
JMXConnector connector = JMXConnectorFactory.connect(serviceURL, map);
MBeanServerConnection mbsc = connector.getMBeanServerConnection();

// 端口最好是动态取得
ObjectName threadObjName = new ObjectName("Catalina:type=ThreadPool,name=http-8080");
MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName);

// tomcat的线程数对应的属性值
String attrName = "currentThreadCount";
MBeanAttributeInfo[] mbAttributes = mbInfo.getAttributes();
System.out.println("currentThreadCount:" + mbsc.getAttribute(threadObjName, attrName));





三、完整的示例代码文件
Java代码 收藏代码
import java.lang.management.MemoryUsage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class JMXTest {

/**
* @param args
*/
public static void main(String[] args) {
try {

String jmxURL = "service:jmx:rmi:///jndi/rmi://127.0.0.1:8999/jmxrmi";

JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);

Map map = new HashMap();
String[] credentials = new String[] { "monitorRole", "tomcat" };
map.put("jmx.remote.credentials", credentials);
JMXConnector connector = JMXConnectorFactory.connect(serviceURL,
map);
MBeanServerConnection mbsc = connector.getMBeanServerConnection();

// 端口最好是动态取得
ObjectName threadObjName = new ObjectName(
"Catalina:type=ThreadPool,name=http-8080");
MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName);

String attrName = "currentThreadCount";// tomcat的线程数对应的属性值
MBeanAttributeInfo[] mbAttributes = mbInfo.getAttributes();
System.out.println("currentThreadCount:"
+ mbsc.getAttribute(threadObjName, attrName));

// heap
for (int j = 0; j < mbsc.getDomains().length; j++) {
System.out.println("###########" + mbsc.getDomains()[j]);
}
Set MBeanset = mbsc.queryMBeans(null, null);
System.out.println("MBeanset.size() : " + MBeanset.size());
Iterator MBeansetIterator = MBeanset.iterator();
while (MBeansetIterator.hasNext()) {
ObjectInstance objectInstance = (ObjectInstance) MBeansetIterator
.next();
ObjectName objectName = objectInstance.getObjectName();
String canonicalName = objectName.getCanonicalName();
System.out.println("canonicalName : " + canonicalName);
if (canonicalName
.equals("Catalina:host=localhost,type=Cluster")) {
// Get details of cluster MBeans
System.out.println("Cluster MBeans Details:");
System.out
.println("=========================================");
// getMBeansDetails(canonicalName);
String canonicalKeyPropList = objectName
.getCanonicalKeyPropertyListString();
}
}
// ------------------------- system ----------------------
ObjectName runtimeObjName = new ObjectName("java.lang:type=Runtime");
System.out.println("厂商:"
+ (String) mbsc.getAttribute(runtimeObjName, "VmVendor"));
System.out.println("程序:"
+ (String) mbsc.getAttribute(runtimeObjName, "VmName"));
System.out.println("版本:"
+ (String) mbsc.getAttribute(runtimeObjName, "VmVersion"));
Date starttime = new Date((Long) mbsc.getAttribute(runtimeObjName,
"StartTime"));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("启动时间:" + df.format(starttime));

Long timespan = (Long) mbsc.getAttribute(runtimeObjName, "Uptime");
System.out.println("连续工作时间:" + JMXTest.formatTimeSpan(timespan));
// ------------------------ JVM -------------------------
// 堆使用率
ObjectName heapObjName = new ObjectName("java.lang:type=Memory");
MemoryUsage heapMemoryUsage = MemoryUsage
.from((CompositeDataSupport) mbsc.getAttribute(heapObjName,
"HeapMemoryUsage"));
long maxMemory = heapMemoryUsage.getMax();// 堆最大
long commitMemory = heapMemoryUsage.getCommitted();// 堆当前分配
long usedMemory = heapMemoryUsage.getUsed();
System.out.println("heap:" + (double) usedMemory * 100
/ commitMemory + "%");// 堆使用率

MemoryUsage nonheapMemoryUsage = MemoryUsage
.from((CompositeDataSupport) mbsc.getAttribute(heapObjName,
"NonHeapMemoryUsage"));
long noncommitMemory = nonheapMemoryUsage.getCommitted();
long nonusedMemory = heapMemoryUsage.getUsed();
System.out.println("nonheap:" + (double) nonusedMemory * 100
/ noncommitMemory + "%");

ObjectName permObjName = new ObjectName(
"java.lang:type=MemoryPool,name=Perm Gen");
MemoryUsage permGenUsage = MemoryUsage
.from((CompositeDataSupport) mbsc.getAttribute(permObjName,
"Usage"));
long committed = permGenUsage.getCommitted();// 持久堆大小
long used = heapMemoryUsage.getUsed();//
System.out.println("perm gen:" + (double) used * 100 / committed
+ "%");// 持久堆使用率

// -------------------- Session ---------------
ObjectName managerObjName = new ObjectName(
"Catalina:type=Manager,*");
Set<ObjectName> s = mbsc.queryNames(managerObjName, null);
for (ObjectName obj : s) {
System.out.println("应用名:" + obj.getKeyProperty("path"));
ObjectName objname = new ObjectName(obj.getCanonicalName());
System.out.println("最大会话数:"
+ mbsc.getAttribute(objname, "maxActiveSessions"));
System.out.println("会话数:"
+ mbsc.getAttribute(objname, "activeSessions"));
System.out.println("活动会话数:"
+ mbsc.getAttribute(objname, "sessionCounter"));
}

// ----------------- Thread Pool ----------------
ObjectName threadpoolObjName = new ObjectName(
"Catalina:type=ThreadPool,*");
Set<ObjectName> s2 = mbsc.queryNames(threadpoolObjName, null);
for (ObjectName obj : s2) {
System.out.println("端口名:" + obj.getKeyProperty("name"));
ObjectName objname = new ObjectName(obj.getCanonicalName());
System.out.println("最大线程数:"
+ mbsc.getAttribute(objname, "maxThreads"));
System.out.println("当前线程数:"
+ mbsc.getAttribute(objname, "currentThreadCount"));
System.out.println("繁忙线程数:"
+ mbsc.getAttribute(objname, "currentThreadsBusy"));
}

} catch (Exception e) {
e.printStackTrace();
}
}

public static String formatTimeSpan(long span) {
long minseconds = span % 1000;

span = span / 1000;
long seconds = span % 60;

span = span / 60;
long mins = span % 60;

span = span / 60;
long hours = span % 24;

span = span / 24;
long days = span;
return (new Formatter()).format("%1$d天 %2$02d:%3$02d:%4$02d.%5$03d",
days, hours, mins, seconds, minseconds).toString();
}
}






3
顶0
踩 分享到:
Eclipse启动Tomcat报错: Bad version num ... | JDK5和JDK6对JMX的ObjectName模式支持的不 ...
2012-06-07 22:19浏览 4224评论(20)收藏分类:行业应用相关推荐
评论
20 楼 xiaoyao3857 2013-11-13 引用
上面的大段评论似乎帮助不大,我的是tomcat8,用的无验证链接,按上面的配置成功了,谢谢!
19 楼 yunzhu 2013-11-06 引用
qiangww123 写道
您好,请问按照这种方式能不能获取tomcat连接池的相关信息呢?

当然可以
18 楼 qiangww123 2013-11-05 引用
您好,请问按照这种方式能不能获取tomcat连接池的相关信息呢?
17 楼 yunzhu 2013-05-23 引用
darouwan 写道
yunzhu 写道
darouwan 写道
yunzhu 写道
darouwan 写道
yunzhu 写道
darouwan 写道
楼主是jz的吗??? 对了 我怎么都无法配置jmx在tomcat上, tomcat可以启动, 但是jmx的端口无法打开. 怎么回事呢?

你说的江宁那家公司吗?不是的,那时候是HB的,给JZ做项目的。

是不是你的JMXRemote的配置根本没有生效,是【set CATALINA_OPTS=%CATALINA_OPTS% %JMX_REMOTE_CONFIG%】这句没有执行吧,注意放在bat里面哪个位置了。


恩 江宁的那家. set CATALINA_OPTS=%CATALINA_OPTS% %JMX_REMOTE_CONFIG% 也添加了, 放在if "%OS%" == "Windows_NT" setlocal之下, if not ""%1"" == ""run"" goto mainEntry之上的位置, tomcat版本是7.0. 现在的问题是, 启动没有任何问题, netstat -a查看, 端口没有打开, 但jconsole里面 手动输入127.0.0.1:8999访问, 可以连接上.写Java程序获取, 又获取不到, 错误是javax.management.InstanceNotFoundException: Catalina:type=ThreadPool,name=http-8080, 应该是MBean没获取到~这个可能是怎么回事呢
那个项目是叫monitorAppServer吗?
【然后复制并修改授权文件】这段内容的步骤都成功实施了吗?

你先试试这段代码呢:
Java代码 收藏代码
ObjectName runtimeObjName = new ObjectName("java.lang:type=Runtime");
System.out.println("厂商:" + (String) mbsc.getAttribute(runtimeObjName,VmVendor"));


Catalina:type=ThreadPool,name=http-8080
注意你的Tomcat的threadPool的名字是不是http-8080,这个是会变的。


谢谢 找到问题所在了, 是线程池名称的问题, 我这里在jmxproxy看到2个thread pool, 一个叫http-bio-8080, 一个叫ajp-bio-8009, 不知道这2个有什么区别? 我把代码里面获取线程池信息的名字分别改成这2个名字, 也没有成功获取, 这可能是怎么回事呢?

估计是你的MBean对象名字符串有问题,仔细检查下。

那是两个连接器:
第一个连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。  
第二个连接器监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

它们的名字是会根据tomcat的配置而变化的,所以不能写死,可以通过星号*匹配,JMX是支持型号匹配的。
参考这里:
http://yunzhu.iteye.com/blog/1553183


学习了~!~我现在已经改成星号 , 这样写了 ObjectName threadObjName = new ObjectName( "Catalina:type=ThreadPool,name=*"); 继续报错~难道是type不叫ThreadPool? 还是*两边必须加双引号? 我用转移字符加上引号, 不过也没效果\"*\"这样写的

关于ObjectName支持的模式,直接看JDK文档当中关于ObjectName类的说明。
可以直接获取所有MBean,然后看看连接池的名字到底是啥。
16 楼 darouwan 2013-05-23 引用
yunzhu 写道
darouwan 写道
yunzhu 写道
darouwan 写道
yunzhu 写道
darouwan 写道
楼主是jz的吗??? 对了 我怎么都无法配置jmx在tomcat上, tomcat可以启动, 但是jmx的端口无法打开. 怎么回事呢?

你说的江宁那家公司吗?不是的,那时候是HB的,给JZ做项目的。

是不是你的JMXRemote的配置根本没有生效,是【set CATALINA_OPTS=%CATALINA_OPTS% %JMX_REMOTE_CONFIG%】这句没有执行吧,注意放在bat里面哪个位置了。


恩 江宁的那家. set CATALINA_OPTS=%CATALINA_OPTS% %JMX_REMOTE_CONFIG% 也添加了, 放在if "%OS%" == "Windows_NT" setlocal之下, if not ""%1"" == ""run"" goto mainEntry之上的位置, tomcat版本是7.0. 现在的问题是, 启动没有任何问题, netstat -a查看, 端口没有打开, 但jconsole里面 手动输入127.0.0.1:8999访问, 可以连接上.写Java程序获取, 又获取不到, 错误是javax.management.InstanceNotFoundException: Catalina:type=ThreadPool,name=http-8080, 应该是MBean没获取到~这个可能是怎么回事呢
那个项目是叫monitorAppServer吗?
【然后复制并修改授权文件】这段内容的步骤都成功实施了吗?

你先试试这段代码呢:
Java代码 收藏代码
ObjectName runtimeObjName = new ObjectName("java.lang:type=Runtime");
System.out.println("厂商:" + (String) mbsc.getAttribute(runtimeObjName,VmVendor"));


Catalina:type=ThreadPool,name=http-8080
注意你的Tomcat的threadPool的名字是不是http-8080,这个是会变的。


谢谢 找到问题所在了, 是线程池名称的问题, 我这里在jmxproxy看到2个thread pool, 一个叫http-bio-8080, 一个叫ajp-bio-8009, 不知道这2个有什么区别? 我把代码里面获取线程池信息的名字分别改成这2个名字, 也没有成功获取, 这可能是怎么回事呢?

估计是你的MBean对象名字符串有问题,仔细检查下。

那是两个连接器:
第一个连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。  
第二个连接器监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

它们的名字是会根据tomcat的配置而变化的,所以不能写死,可以通过星号*匹配,JMX是支持型号匹配的。
参考这里:
http://yunzhu.iteye.com/blog/1553183


学习了~!~我现在已经改成星号 , 这样写了 ObjectName threadObjName = new ObjectName( "Catalina:type=ThreadPool,name=*"); 继续报错~难道是type不叫ThreadPool? 还是*两边必须加双引号? 我用转移字符加上引号, 不过也没效果\"*\"这样写的
华为铁三角(AR、SR、FR)的考核指标设计 以和为核心,通过和实现协同。考核维度分为和,并随市场阶段动态调整权重。 阅读详情

相关推荐

【通过STM32CubeMx配置LWIP+FreeRTOS并通过Socket实现TCP_Client/Sever】

生成KEIL工程之后,勾选上use MicroLIB,代码上暂时无需做其他修改,编译下载。由于使用了FreeRTOS,因此系统的TimeBase Source修改成TIM1。在CubeMx上面选择NUCLEO-F429ZI开发板,并采用默认配置。打开电脑命令行,去ping这设置好的IP,能够实现Ping通。使能LWIP,并且先禁用DHCP,设置好静态IP。修改defaultTask的栈大小。Platform选择LAN8742。修改堆栈大小,生成工程。使能FreeRTOS。

qq_42617357的博客 6111

详解tomcat中的jmx监控

一文详解jmx监控在tomcat中的使用和源码实现。

BugMan的博客 5374

手把手教你用RoboTwin训练RDT模型:从环境配置到实战微调(避坑指南)

本文提供了一份详尽的避坑指南,手把手教你如何在RoboTwin开源仿真环境中,从零开始配置环境、采集数据并完成RDT视觉语言动作模型的实战微调。文章涵盖了环境搭建、数据流水线构建、模型配置与训练等关键步骤,旨在帮助研究者和开发者高效利用仿真数据,低成本探索具身智能应用。

weixin_29094979的博客 131

Tomcat开启JMX监控

Tomcat系统运行过程出现错误,需要打开JMX,添加对JVM的监控。Tomcat运行在CentOS中。

dongdong2980的博客 3万+

Homebrew高效升级与国内镜像源配置全攻略

本文详细介绍了如何通过配置国内镜像源(如清华、中科大、阿里云)来高效升级Homebrew,解决国内开发者访问GitHub仓库速度慢的问题。文章提供了从基础配置到永久生效的完整教程,包括常见问题解决和进阶技巧,帮助开发者大幅提升软件包管理效率。

weixin_28835551的博客 416

Plot3d 网格数据格式

PLOT3D是一个计算机图形程序,旨在可视化计算流体力学的网格和解决方案。PLOT3D文件可以是ASCII, 也可是Fortran unformatted 或 C binary形式。PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件)。网格文件中可加入所谓的IBlank参数。

weixin_62592231的博客 3720

Java之——使用JMX监控Tomcat

转载请注明出处:http://blog.youkuaiyun.com/l1028386804/article/details/51547408 2016年5月的最后一天,今天我将和大家分享Java中如何使用JMX来监控Tomcat的各种状态。好了,不多说了,我们直接进入主题 一、激活Tomcat的JMX远程配置 要通过JMX远程监控Tomcat,首先需要激活Tomcat的JMX远程配置。 ① 修改脚本 ...

varyall的专栏 969

YOLO11多个点组合创新:GC10-DET缺陷检测 | DCNv4结合SPPF+11Detect创新性结合

DCNv4结合SPPF+11Detect创新性结合,原始mAP50为0.633 提升至0.651

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1290

zabbix使用JMX监控tomcat

JMX 全称是Java Management Extensions,即Java管理扩展。Java程序会开放一些端口,用来获取运行状况。 从Zabbix2.0开始,内置了监控JMX的功能,叫做"Zabbix Java Gateway ",在Zabbix Serve上会启动名为"Zabbix Java Gateway "的进程,当需要获取JMX数据时,Zabbix Server会"问 "JMX Gat...

z228059的博客 430

彻底解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

renkai721的专栏 24万+

Doris数据过期策略:自动清理历史数据

在数据的世界里,就像我们的房间会堆满各种东西一样,数据库也会积累大量的数据。随着时间的推移,很多历史数据可能不再经常被使用,但它们却占据着宝贵的存储空间。Doris是一款强大的数据库,为了让它能更高效地运行,合理地管理数据,我们就需要一种方法来自动清理那些不再需要的历史数据。本文的目的就是详细介绍Doris的数据过期策略,让大家知道如何利用这个策略来实现自动清理历史数据。范围涵盖了从基本概念到实际操作的各个方面。本文会先介绍一些和Doris数据过期策略相关的术语,让大家对一些专业词汇有个基本的了解。

软件工程实践的博客 555

zabbix 使用JMX 监控tomcat

使用zabbix 监控tomcat等支持jmx 的应用

nieming92的专栏 2327

188、LLC谐振变换器的样机调试实战(EMI测试)

本文分享了LLC谐振变换器EMI调试的实战经验。作者通过300W电源案例,指出LLC的EMI问题主要来自谐振腔共模电流和死区振铃,并提出三板斧解决方案:优化功率回路布局、合理选择共模电感、正确配置X/Y电容。文章详细分析了谐振电容位置、MOSFET走线、变压器屏蔽等关键设计要点,并列举示波器探头、滤波器接地等常见误区。最后强调EMI调试70%依赖布局优化,建议预扫测试、数据记录并保留6dB余量。全文以实际案例贯穿,为LLC电源EMI设计提供了实用指导。

Jack010169的博客 54

使用JMX监控Tomcat JVM

Java中如何使用JMX来监控Tomcat的各种状态

Java高手真经 1510

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Zabbix使用JMX监控tomcat

1.安装tomcat和jdk [root@server2 ~]# ls apache-tomcat-8.5.24.tar.gz jdk-8u121-linux-x64.rpm zabbix-agent-4.0.5-1.el7.x86_64.rpm [root@server2 ~]# rpm -ivh jdk-8u121-linux-x64.rpm [root@server2 ~]# tar ...

Sparks _Fly 327

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java jmx 监控tomcat_监控Zabbix使用JMX监控Tomcat

1.在zabix服务端安装Java工具(服务器已安装zabbix)[root@db02 ~]# rpm -ivhhttp://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-java-gateway-2.4.7-1.el6.x86_64.rpm[root@db02 ~]# vim /etc/zabbix/zabbix_server.confJavaG...

weixin_30533109的博客 160

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

zabbix使用jmx监控tomcat

Java gateway简介 从Zabbix 2.0版本开始,以Zabbix守护进程的形式原生支持监控JMX程序出现了,它被称为Zabbix Java gateway。Zabbix gateway 是用Java语言写成。要查得一台主机特定的JMX计数器值,Zabbix server向Zabbix Java gateway发送请求,后者使用JMX管理API 去请求远程的有关应用。应用不需要额外安装软...

xiaochenwj1995的博客 856

【四】Zabbix监控Tomcat-不使用JMX

使用了JMX监控tomcat,出现各种问题,主要是和监控环境有关,一台服务器上多个tomcat项目,网上搜到一篇不错的监控 http://blog.youkuaiyun.com/nisan892541/article/details/47727967 环境:Centos6.9 ,192.168.199.111  监控的Tomcat项目:tomcat-web,tomcat-app 安装zabbix-ag

Sakura.Gaara 1737

如何使用JMX实时监控Tomcat性能?冰河为你整理好了,yyds

今天是2021年的最后一天,今天和大家分享Java中如何使用JMX来监控Tomcat的各种状态。

冰河的专栏 2422

zabbix——使用JMX监控tomcat(java类应用)

一、zabbix使用JMX监控tomcat 实验过程如下所示: server2 将做实验所需的安装包发送给虚拟机: 第一步:安装jdk和tomcat root@server2 ~]# cd /mnt [root@server2 mnt]# ls [root@server2 mnt]# rpm -ivh jdk-8u121-linux-x64.rpm [root@server2 mnt]# ...

试试看吧。 391

linux下使用JMX监控tomcat

1、JMX: JMX(Java Management Extensions)Java管理扩展,是一个为应用程序植入管理功能的框架,是一套标准的代理跟服务。总而言之,它可以使得基于java语言开发的程序能被管理,并且是可扩展的。现在,IBM、jboss、hibernate、tomcat等各种应用都号称实现了JMX规范。   1)应用场景: 用来管理应用程序的配置项,可以在运行期动态改

赶路人儿 4017
上一篇: 新浪博客那样用户自己提交二级域名并自动解析是怎么实现的?
下一篇: Java创建WebService服务及客户端实现
maxabe
博客等级 码龄18年 8粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值