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,有无双引号。

时间: 2024-10-02 03:06:18

Tomcat高并发配置优化的相关文章

【MySQL优化】MySQL 高并发配置优化基础知识

[MySQL优化]MySQL 高并发配置优化基础知识 MySQL的优化分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化. 一.服务器硬件对MySQL性能的影响 ① 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变. MySQL每秒钟都在进行大量.复杂的查询操作,对磁盘的读写量可想而知.所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量 在100万P

tomcat高并发配置

最近在项目中负责Tomcat高并发优化方案写一写新得. 优化1)tomcat默认的并发是75,可以启用线程池根据生产环境硬件设定线程池大小. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="40"/>      并在使用时引用线程池. 并发在150左右      优化2)t

tomcat 高并发配置 与优化

公司的一个服务器使用Tomcat6默认配置,在后台一阵全点击服务器就报废了,查了一下就要是PERMSIZE默认值过小造成(16-64) TOMCAT_HOME/bin/catalina.sh 添加一行:JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m" 问题解决(可能为调用JAR包过多原因)下面是网上看到一些设置 JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX

Tomcat + Mysql高并发配置优化

1.Tomcat优化配置 (1)更改Tomcat的catalina.bat 将java变成server模式,增大jvm的内存,在文件开始位置增加 setJAVA_OPTS=-server -Xms1024m -Xmx2048m -Xss512K -XX:PermSize=128m-XX:MaxPermSize=256m setCATALINA_OPTS=-server -Xms512m -Xmx512m 如下图: Xms:初始内存 Xmx:最大内存 (3)更改Tomcat的Server.xml

GNU Linux高并发性能优化方案

/*********************************************************** * Author : Samson * Date : 07/14/2015 * Test platform: * gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 * GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu) * Nginx version: * Nginx 1.6.2 * Nginx 1.8.0

秒杀系统实现高并发的优化

一:先上代码,看着代码学习效率更好:https://github.com/3218870799/Seckill 二:高并发问题就是指在同一个时间点,有大量用户同时访问URL地址,比如淘宝双11都会产生高并发. 三:高并发带来的后果 服务端??导致站点服务器.DB服务器资源被占满崩溃.??数据的存储和更新结果和理想的设计不一致. 用户角度??尼玛,网站这么卡,刷新了还这样,垃圾网站,不玩了 四:阻碍服务速度的原因 1:事物行级锁的等待:java的事务管理机制会限制在一次commit之前,下一个用户

Linux高并发内核优化-TougheRadius

linux 内核优化 默认情况下,linux系统有一些限制,并不能直接支持高并发性能,需要做一些内核优化. 1.把以下内容加入 /etc/sysctl.conf 1 net.ipv4.ip_forward=1 2 net.ipv4.tcp_syncookies = 1 3 net.ipv4.tcp_tw_reuse = 1 4 net.ipv4.tcp_tw_recycle = 1 5 net.ipv4.tcp_fin_timeout = 30 6 net.ipv4.tcp_keepalive_

【高并发】优化加锁方式时竟然死锁了!!

写在前面 今天,在优化程序的加锁方式时,竟然出现了死锁!!到底是为什么呢?!经过仔细的分析之后,终于找到了原因. 为何需要优化加锁方式? 在<[高并发]高并发环境下诡异的加锁问题(你加的锁未必安全)>一文中,我们在转账类TansferAccount中使用TansferAccount.class对象对程序加锁,如下所示. public class TansferAccount{ private Integer balance; public void transfer(TansferAccoun

Tomcat 8/9 基于APR库的高并发性能优化

一.知识点扫盲 什么是APR?Apache Portable Runtime(APR)项目的任务是创建和维护软件库,为底层平台特定的实现提供可预测且一致的接口.主要目标是提供一个API,软件开发人员可以对其进行编码,并确保可预测的行为,如果不是相同的行为,无论其软件构建的平台如何,都可以减轻他们编写特殊情况的需要,以便解决或采取行动.平台特定缺陷或功能的优势. 二.tomcat的三种模式 Tomcat的运行模式有3种,即BIO.NIO和APR.1.BIO(blocking I/O)即阻塞式I/O