在性能测试上, 我们经常要用各种参数调节。为了不每次都需要帮助调整参数, 我总结了多年运营的一些经验。 参数并不能带来本质上的变化,提升一定的性能和响应时间还是有帮助的。 当然每个人有不同的看法, 求同存异原则, 请多多留言.

 Java虚拟机部分

请参考:   Java虚拟机参数配置

OS部分

  • 注意检查 ulimit -n , 需要把每个进程的文件打开数量设置为10240.
  • 注意使用 free -m, 查看系统启动运行后, 应该避免大量的swap.  在linux2.6 下, 通过参数缓解: /proc/sys/vm/swappiness 为10

Apache部分

Listen 80
ServerRoot /usr/alibaba/httpd
ServerName leon
DocumentRoot /usr/alibaba/httpd/htdocs
AddDefaultCharset GB2312
User leon
Group leon
##保持连接需要打开
KeepAlive On
##每个保持连接的可以请求的最大数量
##一般来说web应用设置100就够了, 像search服务器, 可以把这是值设置到足够大
MaxKeepAliveRequests 100
##一般,web服务中, 设置为25。 像search服务器, 可以设置到180
KeepAliveTimeout 180
##这个值比较重要,是为了防止内存泄漏做能对服务器起到保护作用。泄漏严重可以把这个值调小
MaxRequestsPerChild 10000
##目前多内核机器上, 必须设置work模式, 参数含义不解释了, 基本如此配置就可以了.
<IfModule worker.c>
##启动5个apache服务进程
StartServers 5
MaxClients 1024
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 64
ThreadLimit 128
ServerLimit 16
</IfModule>
ErrorLog logs/error_log
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory> 
##如果是高TPS的测试, 需要权衡网络IO/CPU的关系,特别是小数据量的测试下, 可能导致CPU被压缩程序吃完
SetOutputFilter DEFLATE
<Location />
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</Location>
  

mod-jk部分

LoadModule jk_module /usr/alibaba/httpd/modules/mod_jk.so
JkLogFile "|/usr/local/sbin/cronolog /home/admin/output/logs/jk_logs/mod_jk.log.%w"
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
##重要: 不对URL做任何解释和修改. 特别是encoding方面相关的解码
JkOptions +ForwardURICompatUnparsed
JkOptions +ForwardDirectories
JkMountCopy All
JkShmFile /home/admin/output/jk.shm
JkMount /* localnode
JkWorkerProperty worker.list=localnode
JkWorkerProperty worker.localnode.port=7011
JkWorkerProperty worker.localnode.host=localhost
JkWorkerProperty worker.localnode.type=ajp13
JkWorkerProperty worker.localnode.lbfactor=1
JkWorkerProperty worker.localnode.socket_keepalive=True
JkWorkerProperty worker.localnode.socket_timeout=20
JkWorkerProperty worker.localnode.connection_pool_minsize=25
##这参数必须和TOMCAT的连接参数设置一致, 否则可能导致一段时间运行后无法连接tomcat
JkWorkerProperty worker.localnode.connection_pool_timeout=600

tomcat server.xml部分


<!-- A HTTP/1.1 Connector on port 8080 -->
<Connector port="7001" address="${jboss.bind.address}" maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true" URIEncoding="GBK" enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"/>
 <!-- A AJP 1.3 Connector on port 7011 -->
 <Connector port="7011" address="${jboss.bind.address}" backlog="256" maxThreads="250" emptySessionPath="true"
enableLookups="false" connectionTimeout="600000" disableUploadTimeout="true" protocol="AJP/1.3" URIEncoding="GBK"/>