浅谈Apache性能调优
做了很多WEB系统性能测试,都知道了解测试环境,服务器硬件配置,web服务器参数配置是我们开始测试前首先要做的事情。
针对并发数量来说,不同数量级的用户并发,需求的服务器和web服务参数肯定是不同的。
对于很多像我们这些做性能测试的人员,测试结果的正确性经常会被怀疑,甚至有时候也会被自己怀疑。
是什么原因导致呢?
我觉得,是因为我们对Web系统不够熟悉,对Apache不够熟悉,或者你熟悉但都是理论上的,所以不够自信。
因此,经常看到测试人在测试过程中,认为并发用户数量跑完就看有没有报错,是否全部都成功,然后把结果存下来,发给开发认为就完事了。
但是往往你把开发人员的知识面评估过高,因为他们可能看到你的报告更是一头雾水,对于报告中的结果更是无从下手。
————
那么想想做性能测试的目的是什么?
在固定环境下找出系统并发处理数据的能力,持续处理数据能力,找到系统性能存在瓶颈的地方,给予优化,使应用平台能够最大化提高数据处理能力,以满足大量用户并发请求的能力。
当我们了解了测试环境,就可以对apache服务启动参数进行一定优化。
根据需要并发用户数量、请求接收数据量、以及当前被测试服务器硬件配置的情况,给予分配Apache所需要的内存和连接数等。
1.
编辑tomcat安装目录下的conf目录下的server.xml文件
在tomcat配置文件server.xml中的<Connector
/>配置中,和连接数相关的参数有:
maxThreads="150"
表示最多同时处理150个连接,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。
minSpareThreads="25"
表示即使没有人使用也开这么多空线程等待
maxSpareThreads="75"
表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的。
(一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。)
acceptCount="100" 当同时连接的人数达到maxThreads时,还可以接收排队的连接数量,超过这个连接的则直接返回拒绝连接。(指定当任何能够使用的处理请求的线程数都被使用时,能够放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。
)
其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。tomcat5中的配置示例:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" acceptCount="100"/>
2.
修改启动时内存参数
window下,
在catalina.bat最前面:
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms1024m -Xmx1024m;-Duser.timezone=GMT+08;
linux下,在catalina.sh最前面增加,下面是我服务器配置(测试1500人并发可用):
export JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m -Xss256k -Duser.timezone=Asia/Shanghai"export JAVA_OPTS="$JAVA_OPTS -XX:PermSize=256m -XX:MaxPermSize=256m"export JAVA_OPTS="$JAVA_OPTS -XX:NewSize=64m -XX:MaxNewSize=64m"export JAVA_OPTS="$JAVA_OPTS -Dhttp.keepAlive=false"export JAVA_OPTS="$JAVA_OPTS -Dnetworkaddress.cache.ttl=0 -Dnetworkaddress.cache.negative.ttl=0"export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=0 -Dsun.net.inetaddr.negative.ttl=0 -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;
系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。
-Xms此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
(参数详解可以访问:http://unixboy.iteye.com/blog/174173)
3.
线程池配置
使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力。
使用方式:首先打开/conf/server.xml,增加
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"maxThreads="1000" minSpareThreads="50" maxIdleTime="60000" />
最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。
然后,修改<Connector
...>节点,增加executor属性,如:
<Connector executor="tomcatThreadPool"port="80"protocol="HTTP/1.1"maxThreads="600"minSpareThreads="100"maxSpareThreads="300"connectionTimeout="60000"keepAliveTimeout="15000"maxKeepAliveRequests="1"redirectPort="443"....../>
maxThreads:Tomcat可创建的最大的线程数,每一个线程处理一个请求;
minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数;
maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程;
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。
connnectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
enableLookups:是否允许DNS查询
注意:可以多个connector公用1个线程池。
4.
调整连接相关Connector的参数:
<Connector executor="tomcatThreadPool"port="8080" protocol="HTTP/1.1"connectionTimeout="20000"keepAliveTimeout="20000"maxKeepAliveRequests="1"redirectPort="443"maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="1000" disableUploadTimeout="true"/>
(参数详解可以访问:http://blog.chinaunix.net/uid-12115233-id-3358004.html)
尾话:
说上面这些内容,除了介绍Apache服务性能参数调优内容外,主要是想说,性能测试人员在做性能测试的时候,应先根据自己经验对环境参数进行检查调整后,再进行做测试。(另除了对Apache参数需要配置外,Oracle、Mysql等大数据量数据库连接也都需要)
查找系统性能问题所在原因,应先从硬件本身和服务配置先进行,排除了这两个问题最后再从代码找问题,这样提高处理问题效率,开发人员也不会去质疑你的结果。
浅谈Apache性能调优的更多相关文章
- 浅谈Nginx性能调优
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Linux系统参数优化 下文中提到的一些配置,需要较新的 ...
- Apache 性能调优-参考篇
1 内存 适当选用适合大小的内存,保证谷峰负载时,有足够的内存使用 2 使用ab测试apache性能 ab -n 1000 -c 10 http://www.test.com 使用ab的缺点: ...
- 性能测试 Apache参数配置与性能调优
Apache性能调优 by:授客 QQ:1033553122 环境: Apache 2.4 1.选择合适的MPM(Multi -Processing Modules, 多处理模块) Unix/Linu ...
- 浅谈Spark应用程序的性能调优
浅谈Spark应用程序的性能调优 :http://geek.csdn.net/news/detail/51819 下面列出的这些API会导致Shuffle操作,是数据倾斜可能发生的关键点所在 1. g ...
- Apache Pulsar 在 BIGO 的性能调优实战(上)
背景 在人工智能技术的支持下,BIGO 基于视频的产品和服务受到广泛欢迎,在 150 多个国家/地区拥有用户,其中包括 Bigo Live(直播)和 Likee(短视频).Bigo Live 在 15 ...
- Advacned Puppet: Puppet Master性能调优
本文是Advanced Puppet系列的第一篇:Puppet master性能调优,谈一谈如何优化和提高C/S架构下master端的性能. 故事情节往往惊人地类似:你是一名使用Puppet管理线上业 ...
- ElasticSearch中的JVM性能调优
ElasticSearch中的JVM性能调优 前一段时间被人问了个问题:在使用ES的过程中有没有做过什么JVM调优措施? 在我搭建ES集群过程中,参照important-settings官方文档来的, ...
- JVM性能调优(4) —— 性能调优工具
前序文章: JVM性能调优(1) -- JVM内存模型和类加载运行机制 JVM性能调优(2) -- 垃圾回收器和回收策略 JVM性能调优(3) -- 内存分配和垃圾回收调优 一.JDK工具 先来看看有 ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...
随机推荐
- zepto和jquery的区别,zepto的不同使用8条小结 会JS就会zepto
1. Zepto 对象 不能自定义事件 例如执行: $({}).bind('cust', function(){}); 结果: TypeError: Object has no method 'ad ...
- [转]Apache Maven 入门篇 ( 上 )
原文地址:Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这 ...
- .NET: 防止多个应用程序同时开
用到了Mutex这个类,直接看代码~ using System; using System.Collections.Generic; using System.Linq; using System.W ...
- HDU 3686 Traffic Real Time Query System(双连通分量缩点+LCA)(2010 Asia Hangzhou Regional Contest)
Problem Description City C is really a nightmare of all drivers for its traffic jams. To solve the t ...
- bean在容器上的生命周期
初始化两种方法: 1,使用init-method属性指定那个方法在bean依赖关系设置好后自动执行. 2,实现initializingBean接口 实现 ...
- C# 控制台程序如何防止启动多个实例
==================================================================================================== ...
- 夺命雷公狗---DEDECMS----30dedecms数据dede_archives主表进行查询l操作
在plus目录下编写一个test2.php的文件,取出dede_archives的所有信息 <?php //编写test2.php这个文件,主要是为了实现可以取出dede_archives表的所 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON color_fuses2
zw版[转发·台湾nvp系列Delphi例程]HALCON color_fuses2 procedure TForm1.Button1Click(Sender: TObject);var w, h : ...
- Qt源码包中的一段代码
之所以单独拣出来是因为Qt的开发者们给普通开发者提供了高效编程的商业代码例子: bool QWidget::testAttribute_helper(Qt::WidgetAttribute attri ...
- Java图像文件的读写
读取bmp文件到BufferedImage中File file2 = new File("c:\\testimages\\tttt" + ".bmp");// ...