zoukankan      html  css  js  c++  java
  • Tomcat高并发配置优化

    用的JMeter在自己电脑上测试的。
    Ubuntu10.04(x64)内存2G,cpu E5400 主频2.7.
    jdk1.6.0_27(x64) , tomcat6.0.33(x64) , oracle 10g
    测试一个条件分页查询,数据库响应时间在0.5秒左右。
    之前测试第秒100个并发查询,持续1小时,响应时间先是保持在9秒左右,到后来越来越长。
    以这个配置测试时,200个并发,响应先是在4秒左右,之后越来越快,在1到2秒的时间内可以响应果。
    我的那项目并发最多也就100个,所以之后的就没有测试了,达标了就ok了。
    至于cpu和内存的消耗则没有记录下来,但是我的电脑还可以接受。客户那边是两个4核,64G内存,所以我也不用处理这个问题了。

    java 环境配置:

    export JAVA_OPTS="-server -Xms8g -Xmx8g -Xss128k -XX:ParallelGCThreads=20

    -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=8

    -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=31"

    sysctl.conf 的配置:
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_tw_buckets = 180000
    net.ipv4.tcp_sack = 1
    net.ipv4.tcp_window_scaling = 1
    net.ipv4.tcp_rmem = 4096 87380 4194304
    net.ipv4.tcp_wmem = 4096 16384 4194304
    net.ipv4.tcp_max_syn_backlog = 65536
    net.core.netdev_max_backlog = 32768
    net.core.somaxconn = 327680
    net.core.wmem_default = 8388608
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216

    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.tcp_syn_retries = 2
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_tw_recycle = 1
    #net.ipv4.tcp_tw_len = 1
    net.ipv4.ip_local_port_range = 1024 650000
    net.ipv4.tcp_keepalive_time = 5
    net.ipv4.tcp_keepalive_probes=2
    net.ipv4.tcp_keepalive_intvl=2

    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recyle = 1
    net.ipv4.tcp_max_syn_backlog=8192
    net.ipv4.tcp_no_metrics_save = 0
    net.ipv4.tcp_mem = 94500000 915000000 927000000
    net.ipv4.tcp_max_orphans = 3276800
    fs.file-max = 9553600
    net.ipv4.netfilter.ip_conntrack_max = 655360
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 60
    net.ipv4.tcp_max_tw_buckets = 60000
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2

    tomcat 的SERVER.XML 配置:
    server.conf 配置

    <Connector port="8188" protocol="HTTP/1.1"
    maxThreads="30000"
    minSpareThreads="512"
    maxSpareThreads="2048"
    enableLookups="false"
    redirectPort="8443" acceptCount="35000"
    debug="0"
    connectionTimeout="40000"
    disableUploadTimeout="true"
    URIEncoding="UTF-8" />


    参数说明:
    connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐
    患的。通常可设置为30000毫秒。
    keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。
    maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。
    一般设置在100~200之间)
    maxHttpHeaderSize - http 请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
    URIEncoding - 指定Tomcat 容器的URL 编码格式。
    acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中
    的请求数,超过这个数的请求将不予处理,默认为10个。

    disableUploadTimeout - 上传时是否使用超时机制
    enableLookups - 是否反查域名,取值为:true 或false。为了提高处理能力,应设置为
    false
    bufferSize - defines the size (in bytes) of the buffer to be provided for input
    streams created by this connector. By default, buffers of 2048 bytes are provided.
    maxSpareThreads - 最大空闲连接数,一旦创建的线程超过这个值,Tomcat 就会关闭不再
    需要的socket 线程The default value is 50.
    maxThreads - 最多同时处理的连接数,Tomcat 使用线程来处理接收的每个请求。这个值表
    示Tomcat 可创建的最大的线程数。minSpareThreads - 最小空闲线程数,Tomcat 初始化
    时创建的线程数.
    minProcessors - 最小空闲连接线程数,用于提高系统处理性能,默认值为10。
    maxProcessors - 最大连接线程数,即:并发处理的最大请求数,默认值为75。

    修改启动时内存参数
    window 下, 在catalina.bat 最前面:
    set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m
    一定加在catalina.bat 最前面。
    linux 下,在catalina.sh 最前面增加:
    JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m
    -Duser.timezone=Asia/Shanghai"
    注意:前后二者区别,有无set,有无双引号。

    <Connector port="8098" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   maxHttpHeaderSize="8192"
                   maxThreads="2000"
                   minSpareThreads="500"
                   acceptCount="2000"
                   enableLookups="false"
                   redirectPort="8443" />

  • 相关阅读:
    思考-少写代码
    app上传 那些事儿!
    vs2010 找不到本地服务器
    如何成为一名优秀得程序员
    python成功之路,Day2-判断和循环语句
    python成功之路,Day1-发展历史
    ES6学习笔记2-字符串扩展
    ES6学习笔记1-解构赋值
    数组的方法
    ES6
  • 原文地址:https://www.cnblogs.com/shengs/p/4673738.html
Copyright © 2011-2022 走看看