jolokia_Hawtio和Jolokia的Hibernate统计

jolokia

企业Java的很大一部分处理数据。 在企业设置中使用数据的所有不同方式中,仍然存在使用任何种类的O / R映射的行之有效且广泛教授的方法。 JPA标准使每个人都比较容易使用它,并且它也应该是可移植的。 但是,我们不要谈论迁移细节。 O / R映射的最大缺点是,开发人员往往会失去与数据库上发生的事情的联系,甚至无法获得针对该数据库发出的确切SQL语句的联系。 这是这些项目遇到性能问题的第一原因。 如果您在那里,则需要分析根本原因并深入分析问题。 我最近发现了Hibernate的一个不错的功能,它使这一工作变得相当容易。

可用的统计信息和获取方法。

Hibernate最多提供3.5.x版本的统计信息和指标API,可让您了解幕后发生的事情。 统计接口API中对所有可用计数器进行了描述,分为三类:

  • 与常规会话使用率有关的度量标准,例如打开的会话数,检索到的JDBC连接等。
  • 与实体,集合,查询和缓存整体相关的指标(也称为全局指标)。
  • 与特定实体,集合,查询或缓存区域有关的详细指标。

例如,您可以检查实体,集合和查询的高速缓存命中率,未命中率和放置率,以及查询所需的平均时间。 请注意,在Java中,毫秒数是近似值。 Hibernate与JVM精度有关,在某些平台上,这可能仅精确到10秒。

简单的获取器用于访问全局度量(即不绑定到特定实体,集合,缓存区域等)。 您可以通过名称,通过其HQL或SQL表示形式访问特定实体,集合或缓存区域的指标。 有关更多信息,请参考Statistics, EntityStatistics , CollectionStatistics , SecondLevelCacheStatistics和QueryStatistics API Javadoc。

您要做的就是为您感兴趣的会话工厂启用统计信息,并检索统计数据以对其进行分析。 那里有很多示例如何在Spring中使用此功能。 原因很简单:Spring附带了一个传奇的MBeanExporter,它将JMX MBeans公开为Java对象。 想一想:Hibernate Statistics提供了一种通过JMX公开它们的简便方法。 但是,如果您仅组合了一些RedHat魔术,就无需使用Spring!

基本上,您可以通过两种不同的方式在已配置的设置中启用统计信息。 最简单的方法是向持久性单元配置添加属性:

<property name="hibernate.generate_statistics" value="true"/>

但是也可以手动启用它们。 有关如何执行此操作的更多详细信息,请参见社区Wiki和Hibernate文档中的性能监控部分。

通过示例启用和公开统计信息

我创建了一个小示例独立的Hibernate应用程序,该应用程序具有两个实体和一个主要类,该类正在使用hibernate并初始化您需要了解的所有内容。 通过在GitHub上进行分叉,立即获得它 。 这是一些简单的演练:

有两个强制性实体(部门和雇员)和META-INF / persistence.xml。 这是基本设置。 这里没有太多魔术。 您可以在persistence.xml中查看在何处启用统计信息(可能)。 该示例在主类JpaTest中启用它们。 但是,让我们从头开始。 main方法按顺序执行以下步骤:

  1. 创建要使用的EntityManager。
  2. 注册我们需要的统计Mbean。
  3. 初始化Jolokia服务器以通过JSON for Hawtio公开JMX
  4. 对实体做些事情。

魔术始于第二个步骤,该步骤位于registerHibernateMBeans(EntityManager manager)方法中。 它动手了PlatformMBeanServer,注册了相关的Hibernate JMX Mbean,设置了我们感兴趣的Session Factory并启用了统计信息。 那很容易。 现在,您已经注册了属性“ statistics”的JMX MBean“ Hibernate”。 如果您可以通过JConsole或Mission Control或VisualVM访问服务器,则可以简单地连接到该进程并浏览统计信息:

JConsole中的Hibernate MBean

JConsole中的Hibernate MBean


在生产环境中,这通常是根本不可能的。 因此,您需要找到一种通过http / https进行访问的方法。 在这里,我发现可以方便地将Hawtio用作用于管理Java东西的模块化Web控制台。 简而言之,这是一个带有插件的网络控制台。 它有大量的插件 ,可以自定义和扩展以满足您的需求。 今天,我们正在看一个非常简单的插件JMX plugin 。 它为您提供了底层JMX度量标准数据的原始视图,从而允许访问MBean的整个JMX域树。 但是为了实现这一点,我们首先需要找到一种向Hawtio公开JMX功能的方法。 这是Jolokia出现的地方。其中有一个JVM代理 ,可以通过JSON公开JMX MBean。 您所需要做的就是像这样初始化并启动服务器:

JolokiaServerConfig config = new JolokiaServerConfig(new HashMap<String, String>());
JolokiaServer jolokiaServer = new JolokiaServer(config, true);
jolokiaServer.start();

现在,您可以尝试使用Hawtio控制台了。 查看快速入门 ,看看有什么可能。 对于本示例,我仅使用Google Chrome扩展程序,您只需下载并拖动到Chrome中的扩展程序页面即可。 看起来像:

Chrome中的Hawtio扩展

Chrome中的Hawtio扩展


如果您配置“ localhost”,“ 8778”和路径“ jolokia”,那么您都将开始浏览结果。 单击“连接”后,您可以浏览仪表板或切换到JMX视图并导航到Hibernate MBean:

使用Hawtio浏览JMX MBean

使用Hawtio浏览JMX MBean


来自DevNation 2014的Stan Lewis对Hawtio进行了更全面的介绍,等待您观看:

这是一个简短的例子。 继续阅读GitHub源代码,并随意研究Hawtio:

  • 阅读入门指南,以了解如何在您自己的环境中下载和安装Hawtio。
  • 阅读有关如何在各种环境中配置Hawtio的信息 ,例如配置安全性以及Hawtio的存储位置。
  • 了解如何在WildFly上配置Hawtio 。
  • 我们更喜欢使用问题跟踪器来处理想法和问题 ,但是如果您只想谈论Hawtio的所有事情,请加入我们的邮件列表 。
  • 在GitHub上找到Hawtio源代码 。

翻译自: https://www.javacodegeeks.com/2014/08/hibernate-statistics-with-hawtio-and-jolokia.html

jolokia

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python主循环方法mainloop_python gobject.mainloop吞噬信号事件

没有人感兴趣,所以让我尝试. 只是在同一页面上&#xff1a; import signal from gi.repository import GObject GObject.threads_init() mainloop GObject.MainLoop() signal.signal(signal.SIGINT, lambda n, f: mainloop.quit()) mainloop.run() 此代码有效&#xff1a; imp…

JVM垃圾收集和优化

总览 在对系统进行性能相关问题的故障排除时&#xff0c;内存优化是一个需要深入分析每个系统在内存中存储的内容&#xff0c;存储时间和访问模式的地方。 这篇文章是要在背景信息上进行注释&#xff0c;并在此工作中要注意一些要点&#xff0c;这些工作要专门针对基于Java的实…

redis desktop manager连不上redis_Redis安装教程

Ⅰ 简介Redis 是一个开源&#xff08;BSD许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构&#xff0c;如字符串&#xff08;strings&#xff09;&#xff0c;散列&#xff08;hashes&#…

python打开方式错误_浅谈python 调用open()打开文件时路径出错的原因

昨晚搞鼓了一下python的open&#xff08;&#xff09;打开文件 代码如下 def main(): infile open("C:\Users\Spirit\Desktop\bc.txt",r) data infile.read() print(data) main() 然而结果总报错invaild argument 或者cant found such file *** 查找问题后 发现是由…

c++如何将int数组中的值取出*号运算符_如何用动态规划巧妙解决 “双十一” 购物时的凑单问题?羊毛薅起来!!!...

点击上方“程序员大白”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达今年过去的 “双十一” &#xff0c;你有薅到羊毛吗&#xff1f;每年的双十一&#xff0c;会有各种促销活动&#xff0c;比如 “满 300元减 80 元”。假如你女朋友的购物车中有 n 个(n &…

mysql sql 去除重复行_mysql – sql自连接表删除重复行

我有下表&#xff1a;╔════════╦════════════╗║ USERID ║ LANGUAGEID ║╠════════╬════════════╣║ 1 ║ 2 ║║ 1 ║ 7 ║║ 1 ║ 8 ║║ 2 ║ 10 ║║ 2 ║ 3 ║╚════════╩════════════╝现在我想为每…

python操作界面_Python使用PyQt5的Designer工具创建UI界面

一、Designer-UI编辑器 Designer是pyqt5-tools带的工具&#xff0c;默认可以在Python安装目录下找到的。我的之前项目导入过pyqt5-tools&#xff0c;所以我直接全盘搜索到了。打开designer后&#xff0c;我们可以编辑我们想要的UI界面&#xff0c;下面是我编辑的测试界面&#…

python统计词频_Python统计四六级考试的词频

Python统计四六级考试的词频此文首发于公众号 「Python知识圈」&#xff0c; 欢迎直接去公众号查看阅读文本大概需要 4.6 分钟。今天是教师节&#xff0c;先祝天下所有老师教师节快乐&#xff0c;感谢您在我学生时代对我的谆谆教诲。现在是开学之初&#xff0c;风华正茂的青年才…

易语言 字段重复_使对易失性字段的操作原子化

易语言 字段重复总览 易失性字段的预期行为是&#xff0c;它们在多线程应用程序中的行为应与在单线程应用程序中的行为相同。 禁止它们表现相同的方式&#xff0c;但是不能保证它们表现相同的方式。 Java 5.0中的解决方案是使用AtomicXxxx类&#xff0c;但是这些类在内存&…

python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例

本篇文章适用于Python小白的教程篇&#xff0c;如果有哪里不足欢迎指出来&#xff0c;希望对你帮助。 本篇文章用到的模块&#xff1a; requests,re,os,jieba,glob,json,lxml,pyecharts,heapq,collection 首先 本文我们的目的 抓取周杰伦的所有歌曲&#xff0c; 歌词&#xff0…

qt4 连接mysql_Qt4访问mysql 数据库的简单教程

编译问题&#xff1a;1、系统中安装有VC&#xff0c;所以头文件冲突手工修改makefile删除所有-I 加载VC头文件的项目2、mysql cannot find -llibmysql指定libmysql.a的路径-LQt 4 访问 mysql 数据库的简单教程云帆 2006/5/18因为目前无法使用linux&#xff0c; 所以 Qt 4.1.2 是…

python多个函数_什么是在Python中使用多个构造函数的干净的、pythonic的方法?

其实None对于“魔法”价值观来说要好得多&#xff1a;class Cheese(): def __init__(self, num_holes None): if num_holes is None: ... 现在&#xff0c;如果您想完全自由地添加更多参数&#xff1a;class Cheese(): def __init__(self, *args, **kwargs): #args -- tuple o…

Java 8和Java 14之间的新功能

从版本9开始&#xff0c;Java每6个月就会有新功能&#xff0c;因此很难跟踪这些新更改。 互联网上的大多数信息都描述了最近两个Java版本之间的变化。 但是&#xff0c;如果您的情况与我相似&#xff0c;则说明您使用的不是Java的最新版本&#xff0c;而是使用了较旧的Java版本…

mysql中如何卸载插件_Eclipse中如何卸载插件

很久没用Eclipse了&#xff0c;今天打开的时候&#xff0c;突然报Android开发插件需要更新。打开插件管理页面&#xff0c;更新Android插件&#xff0c;又提示和旧版本有冲突&#xff0c;心想只能卸载了重新安装了。找了半天没找到在哪下载&#xff0c;把Eclipse目录下的plugin…

python io_NumPy IO

NumPy IO Numpy 可以读写磁盘上的文本数据或二进制数据。 NumPy 为 ndarray 对象引入了一个简单的文件格式&#xff1a;npy。 npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。 常用的 IO 函数有&#xff1a; load() 和 save() 函数是读写文件数组数据的两个…

Java 14:instanceof的模式匹配

Java 14引入了pattern Matching for instanceof &#xff08;另一种预览语言功能&#xff09; &#xff0c;从而消除了在使用instanceof时进行强制转换的需要。 例如&#xff0c;考虑以下代码&#xff1a; if (obj instanceof String) { String s (String) obj; System.out.pr…

centos7 mysql启动后端口_centos7 修改mysql5.7默认端口后启动异常

关闭selinux的方法有两种&#xff1a;临时关闭和永久关闭。查看selinux的状态&#xff1a;sestatus[root162-219-29-3 ~]# sestatusSELinux status: enabledSELinuxfs mount: /sys/fs/selinuxSELinux root directory: /etc/selinuxLoaded policy name: targetedCurrent mode: e…

computed怎么使用_Vuex 基本使用

简单介绍iPhone X 是 iPhone, Vuex 并不是 Vue.我们查看官方文档可以知道&#xff1a;Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。怎么理解呢&#xff1f;就拿我两位数的资产的银行卡来说吧&#xff0c;基本的存钱取钱&#xff0c;就是状态管理。怎么用我们将以一个简…

自然数 素数 质数_在Java中获取素数的无限列表

自然数 素数 质数一个常见的问题是确定数字的素因式分解。 蛮力方法是审判部门&#xff08; 维基百科 &#xff0c; 可汗学院 &#xff09;&#xff0c;但是如果必须考虑多个数字&#xff0c;这需要大量的浪费工作。 一种广泛使用的解决方案是Eratosthenes筛&#xff08; 维基…

mysql 大数据 join_MySQL JOIN算法原理

MySQL的JOIN相关操作&#xff0c;是通过“嵌套循环连接算法&#xff0c;NLJ”或者该算法的优化变体“块嵌套循环连接算法&#xff0c;BNLJ”来实现的。##### 嵌套循环连接算法两个表join时&#xff0c;可以简单理解为两层for循环&#xff0c;外层循环一般称作驱动表&#xff0c…