一般项目常用性能调优方法(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shan9liang/article/details/50152393


JVM 参数调优

1.      使用64JDK 1.6+ & Tomcat 6+

2.      jvm内存优化

编辑tomcat/bin/目录下catalina.batlinuxcatalina.sh,配置类似,请自行百度),在文件开头加上以下代码(注意先搜索一下,不要重复设置)

3.   set JAVA_OPTS=-Xms512m -Xmx4096m -XX:PermSize=128m-XX:MaxPermSize=256m

以上设置的含义为:
堆内存最小512M,最大4G,非堆内存最小128M,最大256M,对于系统规模小、访问量不大的项目可酌情将-Xmx4096m设置为-Xmx2048m(2G)

深度优化
对于访问量较大,集成比较复杂的系统,需要利用JDK中的内存分析工具,分析内存的变化情况(一般是在生产环境中分析实际内存使用情况),并酌情修改内存参数,
如将堆内存的最大值设置为-Xmx8000m,一般最大值不超过系统内存的2/3

常用的分析工具有JDK bin目录中的jconsole.exe jvisualvm.exe


HTTP 连接数调优

编辑tomcat/conf/目录下server.xml,在访问端口对应的<Connector>中增加和连接数相关的属性:
minSpareThreads:最小空闲连接线程数,默认值10
maxSpareThreads(Tomcat6之前的版本有一个maxSpareThreads参数,但是在7中已经移除了):最大空闲连接线程数,
maxThreads:最大连接线程数,并发处理的最大请求数,默认值200
acceptCount:等待队列,指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值为100
connectionTimeout:请求超时时间,默认是20秒
推荐配置tomcat7:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="800" minSpareThreads="50" acceptCount="800"
connectionTimeout="30000" redirectPort="8443" />
注:并发能力问题涉及整个系统物理环境、架构和业务逻辑,要根据情况动态调整,web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右

其他属性配置参考官方文档


数据库调优

连接数调优

对于Oracle数据库,默认最大连接数为150,可通过下面的SQL来查询和修改(DB2 9.7+、MS SQL SERVER 2008+默认不限制连接数)

select count(*) from v$process --当前的连接数

select value from v$parameter where name = 'processes' --数据库允许的最大连接数
--修改最大连接数,一般设置为1500-3000,重启数据库服务后生效:
alter system set processes = 1500 scope = spfile;

索引

索引是什么?请百度
索引的性能提高测试,参考http://www.cnblogs.com/xwdreamer/archive/2012/05/03/2480449.html
建立索引的一般规则:
1. 为查询条件中的字段建立索引,通常这些字段应该为状态值等字典字段或日期字段
2. 仅左like('xx%')查询会使用索引,其他like('%xx%'或'%xx')查询不会使用索引
3. 索引并不是越多越好,索引会降低插入和更新的速度,因为当insert或Update的时候要更新索引
4. 巧用唯一索引,确保数据的唯一性

分区分表

什么是分区、分表,请自行百度。
1. 只有针对大表,分区分表才有意义;一般大表是指记录数在百万级的,至少也是几十万;否则请考虑其他优化方式
2. 相对而言,优先考虑分区,因为分表需要修改代码逻辑
3. 常用的分区一般为范围分区和列表分区

连接池调优

无论是JNDI数据源,还是DBCP连接池,都有一些链接池参数,这些参数的设置参考如下:
<property name="minPoolSize" value="10"/><!--连接池中保留的最小连接数。-->
<property name="maxPoolSize" value="100"/>  <!--连接池中保留的最大连接数。Default: 15,一般为300以内-->
<property name="initialPoolSize" value="10"/>  <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。过大则启动过慢 -->
<property name="maxIdleTime" value="60"/><!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="acquireIncrement" value="5"/><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3,此数严禁过大 -->
展开阅读全文

没有更多推荐了,返回首页