Mysql Tomcat C3p0系统性能调优个人总结_MySQL

php中文网
发布: 2016-06-01 13:01:10
原创
2085人浏览过

系统信息

应用逻辑 就是用c3p0 到数据库查询数据并http返回Json数据

 

造物云营销设计
造物云营销设计

造物云是一个在线3D营销设计平台,0基础也能做电商设计

造物云营销设计 97
查看详情 造物云营销设计

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: 在system/programdata/mysql/my.ini中配置

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"> 
        <propertyname="driverClass" value="com.mysql.jdbc.Driver" /> 
        <property name="jdbcUrl"value="jdbc:mysql://192.168.4.112:3306/iod1000?useUnicode=true&characterEncoding=utf-8"/> 
      <propertyname="checkoutTimeout" value="60000"/>
     <propertyname="idleConnectionTestPeriod" value="30"/>
     <propertyname="initialPoolSize" value="50"/>
     <property name="maxPoolSize"value="800"/>
     <property name="minPoolSize"value="50"/>
     <propertyname="maxStatements" value="100"/>
    <propertyname="properties"> 
        <props>          
            <propkey="preferredTestQuery">SELECT 1</prop>   
            <propkey="c3p0.maxIdleTime">25000</prop>   
            <propkey="c3p0.testConnectionOnCheckout">true</prop> 
            <propkey="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 配置 重要的是内存大小

数据库连接池配置:

程序内部的瓶颈。

 

 

 

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号