- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在测试从 BoneCP 到 HikariCP 的迁移。
基准测试 ( HikariCP Benchmark ) 的结果如下:
Benchmark (maxPoolSize) (pool) Mode Samples Score Score error Unitsc.z.h.b.ConnectionBench.cycleCnnection 32 hikari thrpt 16 1033,071 38,893 ops/msc.z.h.b.ConnectionBench.cycleCnnection 32 bone thrpt 16 1648,954 42,610 ops/msc.z.h.b.ConnectionBench.cycleCnnection 32 tomcat thrpt 16 592,838 21,709 ops/msc.z.h.b.ConnectionBench.cycleCnnection 32 c3p0 thrpt 16 125,857 3,666 ops/msc.z.h.b.ConnectionBench.cycleCnnection 32 vibur thrpt 16 831,693 9,299 ops/msc.z.h.b.StatementBench.cycleStatement 32 hikari thrpt 16 49983,959 4796,385 ops/msc.z.h.b.StatementBench.cycleStatement 32 bone thrpt 8 7022,146 526,111 ops/msc.z.h.b.StatementBench.cycleStatement 32 tomcat thrpt 16 28777,731 1011,316 ops/msc.z.h.b.StatementBench.cycleStatement 32 c3p0 thrpt 16 3367,641 137,937 ops/msc.z.h.b.StatementBench.cycleStatement 32 vibur thrpt 16 1739,060 45,451 ops/ms
我认为分数越高越好,所以:
这些主题或相关迁移到 HikariCP 的任何提示、建议等对我都非常有帮助。
非常感谢
首次更新:
@brettw,感谢您的建议,并祝贺您的出色工作。
我昨晚用 nohup ./benchmark.sh & 进行了完整的运行,并得到了这些结果:
Benchmark (maxPoolSize) (pool) Mode Samples Score Score error Unitsc.z.h.b.ConnectionBench.cycleCnnection 32 hikari thrpt 150 965,017 27,307 ops/msc.z.h.b.ConnectionBench.cycleCnnection 32 bone thrpt 150 1528,097 26,963 ops/msc.z.h.b.ConnectionBench.cycleCnnection 32 tomcat thrpt 150 473,702 8,068 ops/msc.z.h.b.ConnectionBench.cycleCnnection 32 c3p0 thrpt 150 108,527 1,591 ops/msc.z.h.b.ConnectionBench.cycleCnnection 32 vibur thrpt 150 740,603 14,556 ops/msc.z.h.b.StatementBench.cycleStatement 32 hikari thrpt 60 47998,292 3112,217 ops/msc.z.h.b.StatementBench.cycleStatement 32 bone thrpt 120 6210,647 110,100 ops/msc.z.h.b.StatementBench.cycleStatement 32 tomcat thrpt 150 25919,389 437,232 ops/msc.z.h.b.StatementBench.cycleStatement 32 c3p0 thrpt 150 3074,133 62,629 ops/msc.z.h.b.StatementBench.cycleStatement 32 vibur thrpt 150 1517,554 25,027 ops/ms
查看扩展输出,我在日志中看到此异常堆栈跟踪 6 次:
Iteration 15: [com.zaxxer.hikari.benchmark.StatementBench.cycleStatement-jmh-worker-7] INFO com.zaxxer.hikari.pool.HikariPool - HikariCP pool HikariPool-0 is shuttingdown.java.lang.IllegalStateException: Attempt to remove an object from the bag that was not borrowed or reserved at com.zaxxer.hikari.util.ConcurrentBag.remove(ConcurrentBag.java:207) at com.zaxxer.hikari.pool.HikariPool.closeConnection(HikariPool.java:394) at com.zaxxer.hikari.pool.HikariPool.releaseConnection(HikariPool.java:223) at com.zaxxer.hikari.proxy.ConnectionProxy.close(ConnectionProxy.java:216) at com.zaxxer.hikari.benchmark.StatementBench$ConnectionState.teardown(StatementBench.java:63) at com.zaxxer.hikari.benchmark.generated.StatementBench_cycleStatement.cycleStatement_Throughput(StatementBench_cycleStatement.java:100) at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.openjdk.jmh.runner.LoopBenchmarkHandler$BenchmarkTask.call(LoopBenchmarkHandler.java:204) at org.openjdk.jmh.runner.LoopBenchmarkHandler$BenchmarkTask.call(LoopBenchmarkHandler.java:186) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
最后,我回答您帖子中的其他主题:
再次感谢
第二次更新:关于迁移的问题变成了另一个关于虚拟化和基准测试的问题,这也很有趣也很有用。
现在,我必须专注于虚拟环境。当我有一点时间时,我将在真实且直接的环境中运行测试,并将结果带到这里。我打赌这些测试将显示 HikariCP 是最好的连接池。
@brettw,感谢您的支持和良好的态度。
最佳答案
这里是 HikariCP 的作者之一。有几件事需要检查。首先,看起来您使用了基准测试的“快速”模式,我们通常用它来快速“冒烟测试”更改。我建议完整运行。上面的结果看起来有点奇怪,至少在 cycleStatement 测试中是这样,因为所有池都应显示 16(在快速模式下)样本,但 BoneCP 仅显示 8 。完整运行需要相当多的时间,但如果您只想比较两个池,您可以大大缩短时间,如下所示:
./benchmark.sh -p pool=hikari,bone
其次,编辑基准测试的 pom.xml 文件,并确保它使用最新的 HikariCP 版本。现在应该是版本 2.2.5(非 SNAPSHOT),但是提交的 pom.xml 看起来仍然有 2.1.1-SNAPSHOT。
“分数误差”是样本中的一种标准偏差,如果机器上有其他消耗 CPU 的进程,它往往会变得更高。我建议在干净启动后、系统“稳定”一两分钟后运行基准测试,并确保测试期间没有运行无关的进程(浏览器等)。
我们对您的最新运行结果感兴趣,因为我们尚未看到 HikariCP 得分低于任何池子。您还可以告诉我们您在什么环境下运行吗? CPU 类型/内核、操作系统、Java 版本以及是否是虚拟机。谢谢。
更新:
8核的E5-2690怎么可能得分这么低呢?在我的台式机上 i7 Haswell 4 核 I get HikariCP scores 23130.760,骨骼分数为 10378.450,而 E5-2690 上的分数为 965.017 和 1528.097?
我想知道(并正在研究)VMWare Hypervisor 限制之类的东西是否正在发挥作用。我承认我远不是 VM Hypervisor 方面的专家。在基准测试中 HikariCP 肯定会惩罚你的 CPU。
更新2:
回复下面的评论。这个问题本身不是虚拟化。虚拟化非常棒,而且会持续下去。问题基本上归结为在虚拟化硬件上运行微基准测试是否准确或有意义。
我的理论是,一般来说,在真实硬件上进行更高基准测试的库在虚拟化硬件上也可能表现更好 - 即使无法使用相同的工具在那里进行测量。这就是为什么上面我建议运行宏基准测试工具,例如 JMeter反对预期的应用。尝试使用库 A (HikariCP) 和库 B (BoneCP)。这对于任何两个库都成立。
总而言之,运行利用硬件计数器等优势的微基准测试工具很可能会在虚拟化硬件上产生奇怪的结果。这可能是在 VMWare 论坛中提出的一个很好的话题。
关于使用哪个库,可以运行 JMeter 或类似的宏基准测试工具,也可以掷硬币。
关于jdbc - HikariCP:从 BoneCP 迁移并分析基准数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27155549/
我一直在使用 Databricks JDBC 驱动程序版本 2.6.22,并尝试升级到 2.6.27。但是,升级后我收到消息说我的 JDBC URL 在尝试连接时无效。这些 JDBC URL 与旧版本
似乎JDBC Spec没有详细说明数据源连接池中alive or idle connections的准确含义。它只是具体实现吗? DBCP2如何或 HikariCP实际检查连接状态? 下面没有事件事务
在“XPages 扩展库”一书中,第 12 章,第 409 页有一个 JDBC 连接文件的例子: org.apache.derby.jdbc.EmbeddedDriver jdbc:
谁能告诉我 jdbc 是如何工作的?它如何设法与 DBMS 通信?因为 DBMS 可能是用其他编程语言编写的。 最佳答案 与数据库的通信由 JDBC 驱动程序处理,这些驱动程序可以使用各种策略与数据库
我想知道是否有人可以帮助我解决这个问题。我在尝试使用 Spring JDBC 编写代码时遇到了一个问题。当我运行服务器时,我收到了标题中提到的消息。我google了一下,有人说你应该导入ojdbc.j
我只是想运行一个示例 hivejdbc 客户端程序,但它给我一个内存不足的错误。 import java.sql.SQLException; import java.sql.Connection; i
我需要将 Google Spreadsheet 与 JasperReports Server 一起使用,为此我需要一个用于 Google Spreadsheet 的 JDBC 连接器。 我找到了这个
我需要将大量行(最多 100,000 行)插入到 6 个不同的 DB2 表中。我正在使用 Java JDBC 来完成它。我想在单个数据库事务中完成所有操作,以便在遇到任何问题时可以回滚整个操作。在某处
再次为自己是 Jmeter 新手道歉——我对 JDBC 请求有点困惑——我在过去的 3 个小时里浏览了这个网站上的帖子——但我找不到任何相关的东西(除非我我错过了一些东西)。 我的环境:Jmeter
我们正在创建一个带有 MySQL 后端的 XPages 应用程序。应用程序将被多个客户使用。每个都有自己的 NSF 数据库和相应的 MySQL 数据库。每个客户都有自己的 MySQL 用户名。我们正在
昨天我遇到了一个大问题。在我当前的项目中,我使用 Oracle 的 JDBC 的 ojdbc6 实现进行连接,但我还需要处理例如 oracle 8 数据库,这对于这个 JAR 是完全不可能的。 你会说
这个问题在这里已经有了答案: Closing JDBC Connections in Pool (3 个答案) 关闭 2 年前。 假设我有以下代码 DataSource source = (Data
我有 Informix 数据库,时间戳字段定义为 YEAR TO SECOND。 当我使用 JDBC rs.getString(column) 显示此字段时,它使用带毫秒的格式,因此此字段如下所示:
看完本教程之后; https://www.youtube.com/watch?v=ZnI_rlrei1s 我正在尝试使用logstash和jdbc获取我的本地主机mysql(使用laravel val
有人给我小费。 { "type": "jdbc", "jdbc": { "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试从mysql表中将1600万个文档(47gb)索引为elasticsearch索引。我正在使用jparante's elasticsearch jdbc river执行此操作。但是,在创建河
我正在尝试使用JDBC河将我的MySQL数据库复制到我的ElasticSearch索引中。 但是,每当我启动服务器时,与MySQL表的count(*)相比,创建的文档数量就增加了一倍。我通过清空索引并
使用新的logstash jdbc 连接器: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html后续的
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我是一名优秀的程序员,十分优秀!