Mysql Tomcat C3p0系统性能调优个人总结(赞!)
来源:互联网 发布:qq音速网络连接 编辑:程序博客网 时间:2024/05/22 14:45
应用逻辑 就是用c3p0 到数据库查询数据并http返回Json数据
1 调优前的最初的测试结果 JMeter test result
No.
Type
Original
1000 data bigger
1
500Connection
250 query/S
63q/S
70q/S
2
1000 connections
255q/S
57q/S
65 q/S
这个数据是从程序的log 中打印出的 数据库select语句 中得出的结果(正确与否后面会有讨论)。
2 经过IOD系统打印 SQL query 的执行时间 和 tomcat 每个request 的 响应时间,找出 系统瓶颈 是因为一个 select语句 使用了 in:
SELECT* FROM infoobject_table where category = 'advertisement' and deleteflag=falseand (id in (select info_object_fk from timespan_table where vod_id = ? and deleteflag=false))Order By Rand() Limit
在 原来的小数据库中 数据较少 查询 时间 100ms 左右
在 1000个 video 的数据库中 查询的时间 达到 超过 1S
先注释掉 这个语句 ,想办法用优化的办法实现这个功能。
注释掉 这个 select 语句后得到的测试数据(还是计算从程序的log中打印出的 数据库select语句)Jmeter testresult
No.
Type
Original
1000 bigger
1
500Connection
250 query/S
CPU 100%
150q/S
2
1000 connections
255q/S
160q/S
160q/S
现在 的问题 是碰到 tomcat request 160q/S 再怎么调优 增加不了了,tomcat的内存 配置了4G 实际使用了不到 1个G ,CPU 8核心 利用率 只有10%。
3 发现前面的统计系统响应 性能有问题,很多时候sql 语句打印出来了,但是并没有执行完成, 因为c3p0 连接数只有15个,都在等待数据库连接,后来改变统计方式。
还有就是打印出 c3p0 的连接池的工作状态
- private void printDataConnections() {
- ComboPooledDataSource ds = (ComboPooledDataSource) DBConn.getDataSource();
- StringBuffer connectionBuffer = new StringBuffer();
- try {
- connectionBuffer.append("getMaxPoolSize=" + ds.getMaxPoolSize());// 最大连接数
- connectionBuffer.append("getMinPoolSize=" + ds.getMinPoolSize());// 最小连接数
- connectionBuffer.append("getNumBusyConnections=" + ds.getNumBusyConnections());// // 正在使用连接数
- connectionBuffer.append("getNumIdleConnections=" + ds.getNumIdleConnections());// 空闲连接数
- connectionBuffer.append("getNumConnections=" + ds.getNumConnections());//总连接数
- logger.info(" connectionBuffer=" + connectionBuffer.toString());
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
后来进行MySQL(默认100最大链接), tomcat(连接数default)tomcat 内存配置, c3p0(最大15个链接) 链接池优化。
Mysql: 在win7 c:/programdata/mysql/mysql server5.6/my.ini中配置
max_connections=1000
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections |1000 |
+-----------------+-------+
Tomcat: 配置连接数
- <Connector port="8080"protocol="HTTP/1.1"
- minSpareThreads="25"
- maxSpareThreads="75"
- enableLookups="false"
- disableUploadTimeout="true"
- connectionTimeout="20000"
- acceptCount="200"
- maxThreads="800"
- minThreads="600"
- maxProcessors="1000"
- minProcessors="1000"
- useURIValidationHack="false"
- redirectPort="8443"
- />
配置 tomcat 运行jvm 配置
set JAVA_OPTS=-server -Xms4400M-Xmx4400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M-XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection-XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly-Djava.awt.headless=true
应用 c3p0 连接池配置:
- <bean id="dataSource"
- class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close">
- <propertynamepropertyname="driverClass" value="com.mysql.jdbc.Driver" />
- <property name="jdbcUrl"value="jdbc:mysql://192.168.4.112:3306/iod1000?useUnicode=true&characterEncoding=utf-8"/>
- <propertynamepropertyname="checkoutTimeout" value="60000"/>
- <propertynamepropertyname="idleConnectionTestPeriod" value="30"/>
- <propertynamepropertyname="initialPoolSize" value="50"/>
- <property name="maxPoolSize"value="800"/>
- <property name="minPoolSize"value="50"/>
- <propertynamepropertyname="maxStatements" value="100"/>
- <propertynamepropertyname="properties">
- <props>
- <propkeypropkey="preferredTestQuery">SELECT 1</prop>
- <propkeypropkey="c3p0.maxIdleTime">25000</prop>
- <propkeypropkey="c3p0.testConnectionOnCheckout">true</prop>
- <propkeypropkey="user">root</prop>
- <prop key="password">iptv4Um8</prop>
- </props>
- </property>
- </bean>
查询配置了mysql 最大连接数 1000, 配置 c3p0 连接池 800 配置 tomcat 链接 800 测试结果:
CPU 8Core 12% usage
Memmory900M/2.4G 120q/S
这个时候碰到的问题就是 cpu 和 内存 都没有达到上限,但是查询的 性能却提升不上去了。
5 试用jconsole 查看tomcat 中的 线程状态,好多线程都是 blocked on Java.util.logging.console 原来是线程一直在等待写日志被block住了。
把写log的语句 全部注释掉。OK 系统终于飞起来了。
现在 能达到 250q/S。
需要检查的地方:
CPU
内存
mysql最大连接数
tomcat 连接数配置
tomcat JVM 配置 重要的是内存大小
数据库连接池配置:
程序内部的瓶颈。
- Mysql Tomcat C3p0系统性能调优个人总结(赞!)
- Mysql Tomcat C3p0 系统性能调优个人总结
- Mysql Tomcat C3p0 系统性能调优个人总结
- 系统性能调优-tomcat
- tomcat性能调优总结
- 系统性能调优总结
- 系统性能调优总结
- 系统性能调优总结
- 《java系统性能调优》--4.tomcat
- tomcat,mysql,linux服务器性能调优
- LAMP 系统性能调优 (之mysql)
- 优化系统性能--C3P0数据库连接池!!!
- Tomcat 7个人总结
- 【转】系统性能调优总结
- 系统性能调优吐血总结分享
- 系统性能调优思路总结
- 系统性能调优总结1
- 系统性能调优总结2
- KVC
- 直接在 PS 上使用 Google Font 字体:Fontea Photoshop 扩展工具推荐
- 数据库SQL优化大总结之 百万级数据库优化方案
- Linux之文件的操作(查看、创建、追加内容)
- Learning ArduPilot - UARTs and the Console
- Mysql Tomcat C3p0系统性能调优个人总结(赞!)
- 无语了,这让人森森感伤滴直男审美和手残!
- C++Builder6.0支持图片插入的TRichEdit增强
- swift 移动支付之【微信支付】开发步骤
- stm32地址空间
- 如何根据不同运营商情况或者数据状态默认不同的主页
- Webkit CSS实现
- 韩顺平Spring框架学习,学习笔记(六)
- Learning ArduPilot — RC Input and Output