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

系统信息

应用逻辑 就是用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: 在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 配置 重要的是内存大小

数据库连接池配置:

程序内部的瓶颈。

 

时间: 2024-10-10 12:30:12

Mysql Tomcat C3p0 系统性能调优个人总结的相关文章

LAMP 系统性能调优之内核调优措施

LAMP 系统性能调优之内核调优措施 2011-03-18 11:21 Sean A. Walberg 网络转载 字号:T | T 在对系统的 Apache.PHP 和 MySQL 组件进行调优之前,应该花一些时间确保底层 Linux 组件的运行正常.这点是非常重要的! AD:2014WOT全球软件技术峰会北京站 课程视频发布 LAMP LAMP的一些快速的内核调优措施 大多数 Linux 发布版都定义了适当的缓冲区和其他 Transmission Control Protocol(TCP)参数

linux 系统性能调优 相关命令汇总

linux 系统性能调优 相关命令汇总: 1. ps:查看系统中当前有哪些进程在运行 常用命令有ps aux  | grep  -i  mysql http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html 2. top:动态显示各个程序对cpu,内存的占用,以及负载的情况 http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html 3. io的总体负载,进程的io

MySQL性能诊断与调优

[MySQL性能诊断与调优] LAMP 系统性能调优,第 3 部分: MySQL 服务器调优 http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-3.html LoadRunner监控MySQL http://www.docin.com/p-92272846.html Advanced MySQL Performance Optimization http://www.mysqlperformanceblog.com/files/pres

Linux操作系统性能调优的方法

Linux操作系统性能调优的方法 2013-03-18 15:35 HonestQiao ChinaUnix 字号:T | T Linux是一套免费使用和自由传播的类Unix操作系统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性能.本文分享了几种技巧对Linux操作系统进行性能的优化. AD:2014WOT全球软件技术峰会北京站 课程视频发布 按照传统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性能.

Perf Event :Linux下的系统性能调优工具

Perf Event :Linux下的系统性能调优工具 2011-05-27 10:35 刘 明 IBMDW 字号:T | T Perf Event 是一款随 Linux 内核代码一同发布和维护的性能诊断工具,由内核社区维护和发展.Perf 不仅可以用于应用程序的性能统计分析,也可以应用于内核代码的性能统计和分析.得益于其优秀的体系结构设计,越来越多的新功能被加入 Perf,使其已经成为一个多功能的性能统计工具集 .本文将介绍 Perf 在应用程序开发上的应用. AD:2014WOT全球软件技术

LAMP 系统性能调优之网络文件系统调优

LAMP 系统性能调优之网络文件系统调优 2011-03-21 09:35 Sean A. Walberg 网络转载 字号:T | T 使用LAMP系统的用户,都想把自己LAMP性能提高运行的速度提高,那它有一点可以调优: 网络文件系统 ,我们知道网络文件系统是网络共享磁盘的一个系统,我们来进行调优下! AD:2014WOT全球软件技术峰会北京站 课程视频发布 图-LAMP LAMP网络文件系统调优 网络文件系统(NFS)是一种通过网络共享磁盘的方法.NFS 可以帮助确保每个主机具有相同数据的拷

Android系统性能调优工具介绍

经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优工具介绍 在软件开发过程中,想必很多读者都遇到过系统性能问题.而解决系统性能问题的几个主要步骤是: 测评:对系统进行大量有针对性的测试,以得到合适的测试数据. 分析系统瓶颈:分析测试数据,找到其中的hotspot(热点,即bottleneck). 性能优化:对hotspot相关的代码进行优化. 由上述步骤可知,性能优化的目标对象是hotspot.如果找到的hotspot并非真正的热点,则性能优化的结果必然是事倍

《java系统性能调优》--1.发现瓶颈

性能啊!性能! 之所以想写写性能调优,也是有感于我们的项目,我们采用一些手段使得系统性能上升了一个台阶,总是需要把这点经验沉淀一下.随着工作的深入,关于系统性能的事肯定还有很多,也算是通过这个系列文章做做笔记.优化可能包括应用级别的优化,也可能包括代码级别的优化. "要进行优化,先得找到性能瓶颈!" 忘记是从哪里看到了这句话,但总算切中要害. 但在找性能瓶颈之前,我们总要先对系统性能有一个概念. 如何在不购买新硬件的条件下完成更多的工作?何时才真正需要添加硬件(更多的内存,更快的磁盘.

mysql监控、性能调优及三范式理解

原文:mysql监控.性能调优及三范式理解 1监控 工具:sp on mysql     sp系列可监控各种数据库 2调优 2.1 DB层操作与调优 2.1.1.开启慢查询 在My.cnf文件中添加如下内容(如果不知道my.cnf的路径可使用find / -name my.cnf进行查找): 在mysqld下添加 Log_slow_queries = ON  作用:开启慢查询服务 Log-slow-queries = /var/log/slowqueries.log 作用:慢查询日志存储路径.