hibernate性能消耗太狠了。果断减肥引发的连串意外惊喜

近期在云服务器上新部署了一个项目

硬件配置 CPU: 2核 内存: 4096 MB (I/O优化)

开始是调试测试在用 没发觉,今天我看了下监控

cpu使用率达到了60-70% 而且一直持续

我怀疑是java 环境没配置。

重新配置了一下。还是不行

最后把hibernate项目先停掉。留mybatis项目来跑看看

马上cpu消耗掉下来了。

我的天啊。接下来来给这个后台项目减肥了。

接下来优化hibernate配置看看cpu消耗会不会有好转

优化一,把spring及连接池的包都更新到最新版

然后把quartz框架 还有一些不相关的jar包 maven引用都去掉了

这时看下cpu耗时

少了很多。比第一次测好多了

优化了java程序,在java7下还是很高

所以果断换装 java8+tomcat8

奇迹出现了

突然想起上次跟51的大神交流有一个日本人开发的高性能数据库连接池

于是找大神要来了名字,maven引入

com.zaxxer

HikariCP

2.4.5

compile

HikariCP 是一个高性能的 JDBC 连接池组件。下图是性能的比较测试结果:

使用方法:

?

1

2

3

4

5

6

7

8

9

10

HikariConfig config = new HikariConfig();

config.setMaximumPoolSize(100);

config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");

config.addDataSourceProperty("serverName", "localhost");

config.addDataSourceProperty("port", "3306");

config.addDataSourceProperty("databaseName", "mydb");

config.addDataSourceProperty("user", "bart");

config.addDataSourceProperty("password", "51mp50n");

HikariDataSource ds = new HikariDataSource(config);

或者:

?

1

2

3

4

5

6

7

8

9

10

11

/**

connectionTestQuery=SELECT 1

dataSourceClassName=org.postgresql.ds.PGSimpleDataSource

dataSource.user=test

dataSource.password=test

dataSource.databaseName=mydb

dataSource.serverName=localhost

*/

HikariConfig config = new HikariConfig("some/path/hikari.properties");

HikariDataSource ds = new HikariDataSource(config);

spring 下引入方式:

class="com.zaxxer.hikari.HikariDataSource" destroy-method="shutdown">

true

250

2048

true

destroy-method="shutdown">

spring boot 可以采用以下方式获取数据源

private DataSource dataSource() {

...

final HikariDataSource ds = new HikariDataSource();

ds.setMaximumPoolSize(100);

ds.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");

ds.addDataSourceProperty("url", url);

ds.addDataSourceProperty("user", username);

ds.addDataSourceProperty("password", password);

ds.addDataSourceProperty("cachePrepStmts", true);

ds.addDataSourceProperty("prepStmtCacheSize", 250);

ds.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);

ds.addDataSourceProperty("useServerPrepStmts", true);

return ds;

}

下面我们来证实一下是不是吹的。

把druid 换掉。上一张jprofiler测试的加载时间图,druid耗时排前三

我们来看看HiKaricp的效果

哇。相比上张druid是不是好很多。

牛啊。果断所有的项目连接池都换装HiKaricp

未完。。待续