dataSource踩过的坑-spring dataSource配置

1、在前面restTemplate的坑过后,问题又来了,因为数据量并发上去,数据库压力很大。cpu相对于之前的压力一直飙升不下。

在Linux服务器中定位问题

ps -ef | grep 服务名 查看pid

查看整个JVM内存状态

jmap -heap [pid]

要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起

查看JVM堆中对象详细占用情况

jmap -histo [pid]

导出整个JVM 中内存信息

jmap -dump:format=b,file=文件名 [pid]

dump 这一步很关键

jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP 文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况

jhat -J-Xmx1024M [file]

执行后等待console 中输入start HTTP server on port 7000 即可使用浏览器访问 IP:7000

eclipse Memory Analyzer

Eclipse 提供的一个用于分析JVM 堆Dump文件的插件。借助这个插件可查看对象的内存占用状况,引用关系,分析内存泄露等。

采集下来的文件需要为bin类型,在分析的过程中,使用了Windows的电脑打开,直接报错,仔细查看了后,怀疑是内存溢出,直接放到mac打开,则等了十来分钟才能打开。具体的操作待我详细的整理后再提供参考。

当定位到问题后,发现是配置链接数过多。默认的database已经吃不下这么多链接数。

当时的配置为:

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="${DB.JDBC.DRIVER}" />

<property name="url" value="${DB.JDBC.URL}" />

<property name="username" value="${DB.USERNAME}" />

<property name="password" value="${DB.PASSWORD}" />

</bean>

查看了源码也是没有相关链接数的配置

因此选择了阿里的druid修改,代码量改动控制在最小范围内。

maven 引用

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.0.29</version>

</dependency>

<bean id="dataSource"

class="com.alibaba.druid.pool.DruidDataSource">

<!-- 配置初始化大小、最小、最大 -->

<property name="initialSize" value="${DB.JDBC.INITIALSIZE}" />

<property name="minIdle" value="${DB.JDBC.MINLDLE}" />

<property name="maxActive" value="${DB.JDBC.MAXACTIVE}" />

<property name="driverClassName" value="${DB.JDBC.DRIVER}" />

<property name="url" value="${DB.JDBC.URL}" />

<property name="username" value="${DB.USERNAME}" />

<property name="password" value="${DB.PASSWORD}" />

</bean>

而且druid也配置了一些监控的事项,具体可以参考wiki

https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

当配置完成后,上线。发现cpu效率提高了50%以上且内存也降低了50%。

有图有真相

由此总结,将测试环境上的demo代码放到生产,需要对相应项目的承压能力以及配置信息进行评估,在合理的条件下进行压测,以便后续遇到不必要的八阿哥缠绕。

这个坑又顺利的抗过去了啦。

原文地址:https://www.cnblogs.com/jimw/p/9054084.html

时间: 2024-10-26 08:50:40

dataSource踩过的坑-spring dataSource配置的相关文章

Spring常见的十大错误,78%的老程序员都踩过这些坑!

首先我们来看一下,Spring常见错误有那些 太过关注底 内部结构 "泄露" 缺乏关注点分离 缺乏异常处理或处理不当 多线程处理不当 不使用基于注解的验证 (依旧)使用基于xml的配置 忽略 profile 无法接受依赖项注入 缺乏测试,或测试不当 接下来就一一介绍这些常见的错误1. 错误一:太过关注底层我们正在解决这个常见错误,是因为 "非我所创" 综合症在软件开发领域很是常见.症状包括经常重写一些常见的代码,很多开发人员都有这种症状.虽然理解特定库的内部结构及其

spring boot配置信息详解

# REDIS (Redis 配置)# 连接工厂使用的数据库索引spring.redis.database= 0# Redis服务器主机spring.redis.host= localhost# 登录redis服务器的密码spring.redis.password= # 给定时间池可以分配的最大连接数 使用负值为无限制spring.redis.pool.max-active= 8# 池中“空闲”连接的最大数量 使用负值来表示无限数量的空闲连接spring.redis.pool.max-idle=

[转] Spring Boot配置多个DataSource

[From]  https://www.liaoxuefeng.com/article/001484212576147b1f07dc0ab9147a1a97662a0bd270c20000 Spring Boot配置多个DataSource 廖雪峰 / 编程 / 1-13 10:11 / 阅读: 14041 使用Spring Boot时,默认情况下,配置DataSource非常容易.Spring Boot会自动为我们配置好一个DataSource. 如果在application.yml中指定了s

记一次 Spring 事务配置踩坑记

记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条件会不满足,会查询不到数据.结果事与愿违,后一次的查询,居然查到了数据. void saveXxx(){  xxService.getXxx(); // 查到一条数据 data1  xxService.insert(); // 插入一条数据 t1  xxService.getXxx(); // 查到

初学spring boot踩过的坑

一.搭建spring boot环境 maven工程 pom文件内容 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-

【瞎折腾系列】Spring DataSource 【结论:没弄好】

本来想弄个多数据源,但是技术不高,嗯,宣布失败... 嗯,结论是失败了... 求高手给我讲讲这些东西啊,感激不尽啊~~~ 以下的折腾也是基于之前配置的Spring Mybatis框架. 想弄多数据源,首先想到的就是从datasource入手. spring-database.xml改成了两个datasource: <bean id="dataSourceA" class="com.alibaba.druid.pool.DruidDataSource">

Spring Boot 使用 spring.datasource.data 的时候找不到数据文件

对需要导入使用 SQL 文件,已经放置到了 resources\data-trans.sql 下面了. 但是在配置的时候配置: spring.datasource.data=data-trans.sql 显示这个数据库 SQL 文件找不到. 错误的信息为: Property spring.datasource.data with value 'ServletContext resource [/data-trans.sql]' is invalid: The specified resource

1.MySQL5.7.19 安装配置踩过的坑

这篇文章主要是分享 安装MySQL时遇到的一些问题,以及解决方法. 第一步:下载MySQL 下载地址:https://dev.mysql.com/downloads/mysql/5.1.html#downloads 我下载的是5.7.19版本,下载地址里面也只有解压版,下载后再进行环境变量的配置就可以. 2.解压并安装Mysql5.7.19 (1)将下载的包解压到指定的路径,自己可以指定路径,我直接解压到了D盘,解压到了                         D:\mysq的目录下.则

windows下mysql免安装版配置(踩过的坑)简记

下载 从官网(https://dev.mysql.com/downloads/mysql/)下载 这里的免安装版本的,相对来说干净,但是需要自己来配置很多东西. 配置 首先是注册windows的服务. 用管理员权限打开终端,cd到mysql目录bin,执行命令mysqld --initialize 这条命令会初始化数据库和服务,没有data目录(mysql根目录)的话会自动创建出来. 踩过的坑一 下载解压后直接找到mysql的安装目录,运行mysql -u root 提示ERROR 2003 (