-
tomcat优化之增加Tomcat最大连接数
2019-06-13 16:51:54我在做完一个XXX项目后,测试时发现并发数量增加到一定程度就会很卡,于是我想到了是不是tomcat最大连接数设置有限制.果不其然,配置文件中最大值才500,于是我更改了最大连接数,根据业务我修改了连接数为1500,完美的...使用场景
项目测试时发现并发数量增加到一定程度就会很卡,于是我想到了是不是tomcat最大连接数设置有限制.果不其然,配置文件中最大值才500,于是我更改了最大连接数,根据业务我修改了连接数为1500,完美的解决了这个问题;
修改方法在conf/service.xml中默认值
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="1500" minSpareThreads="30" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
修改maxthreads=1500的值即可
-
Tomcat下WebSocket最大连接数测试
2017-04-28 17:37:05WebSocket现在很常用,想要测试tomcat的最大连接数,今天试了一个可行的办法和配置(之前是用全公司的设备一起来测试的,真机环境的测试收到网络的影响很大,其实真实环境应用中,网络才是websocket的最大瓶颈) ...WebSocket现在很常用,想要测试tomcat的最大连接数,今天试了一个可行的办法和配置(之前是用全公司的设备一起来测试的,真机环境的测试收到网络的影响很大,其实真实环境应用中,网络才是websocket的最大瓶颈)
废话不多说~
1.Tomcat需要设置的地方(很多人从网上找的配置试了不可行):
1.1修改catalina.sh或者catalina.bat文件,加上这句话(JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m")。
1.2修改conf下server.xml,
<Connector port="8180" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" acceptCount="4000"
maxThreads="500" maxConnections="4000" enableLookups="false" redirectPort="8443" />
上面的设置1.1影响最终你的最大连接数,1.2的maxConnections就是最大连接数,有时候觉得设置无效,请把1.1的内存一起调大!
2.通过Java来测试最大连接数:
package com.jh.order;
import java.NET.URI;
import javax.websocket.ClientEndpoint;
import javax.websocket.ContainerProvider;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
@ClientEndpoint
public class WebSocketTest {
private String deviceId;
private Session session;
public WebSocketTest () {
}
public WebSocketTest (String deviceId) {
this.deviceId = deviceId;
}
protected boolean start() {
WebSocketContainer Container = ContainerProvider.getWebSocketContainer();
String uri = "ws://192.168.12.161/orderapp/recommend?role=1&group=recommend&dldm="+ deviceId;
System.out.println("Connecting to " + uri);
try {
session = container.connectToServer(WebSocketTest.class, URI.create(uri));
System.out.println("count: " + deviceId);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public static void main(String[] args) {
for (int i = 1; i< 50000; i++) {
WebSocketTest wSocketTest = new WebSocketTest(String.valueOf(i));
if (!wSocketTest.start()) {
System.out.println("测试结束!");
break;
}
}
}
} -
java socket 最大连接数_Tomcat下WebSocket最大连接数测试
2021-02-13 01:18:20packagecom.chat.demo;/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additional informat...packagecom.chat.demo;/** Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
*http://www.apache.org/licenses/LICENSE-2.0*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.*/
importjava.io.IOException;importjava.util.Set;importjava.util.concurrent.CopyOnWriteArraySet;importjava.util.concurrent.atomic.AtomicInteger;importjavax.websocket.OnClose;importjavax.websocket.OnError;importjavax.websocket.OnMessage;importjavax.websocket.OnOpen;importjavax.websocket.Session;importjavax.websocket.server.ServerEndpoint;//import org.apache.juli.logging.Log;//import org.apache.juli.logging.LogFactory;//import util.HTMLFilter;
@ServerEndpoint(value= "/websocket/chat")public classChatAnnotation {//private static final Log log = LogFactory.getLog(ChatAnnotation.class);
private static final String GUEST_PREFIX = "Guest";private static final AtomicInteger connectionIds = new AtomicInteger(0);private static final Set connections =
new CopyOnWriteArraySet();private finalString nickname;privateSession session;publicChatAnnotation() {
nickname= GUEST_PREFIX +connectionIds.getAndIncrement();
}
@OnOpenpublic voidstart(Session session) {this.session =session;
connections.add(this);
String message= String.format("* %s %s", nickname, "has joined.");
broadcast(message);
}
@OnClosepublic voidend() {
connections.remove(this);
String message= String.format("* %s %s",
nickname,"has disconnected.");
broadcast(message);
}
@OnMessagepublic voidincoming(String message) {//Never trust the client
String filteredMessage = String.format("%s: %s",
nickname, message.toString());
broadcast(filteredMessage);
}
@OnErrorpublic void onError(Throwable t) throwsThrowable {
System.out.println("Chat Error: " +t.toString());
}private static voidbroadcast(String msg) {for(ChatAnnotation client : connections) {try{synchronized(client) {
client.session.getBasicRemote().sendText(msg);
}
}catch(IOException e) {//log.debug("Chat Error: Failed to send message to client", e);
connections.remove(client);try{
client.session.close();
}catch(IOException e1) {//Ignore
}
String message= String.format("* %s %s",
client.nickname,"has been disconnected.");
broadcast(message);
}
}
}
}
-
springboot tomcat最大线程数与最大连接数
2020-10-18 17:57:22# tomcat最大连接数,默认为10000(网上的说法) server.tomcat.max-connections=300 如何理解上面两个参数 为了方便理解,我这里使用了springboot编写了一个简单了的服务,包含一个模拟登录的接口,并使用jmeter...首先看看springboot内置的tomcat,该如何配置这两个参数
# 在配置文件中添加如下内容 # tomcat最大线程数,默认为200 server.tomcat.max-threads=200 # tomcat最大连接数,默认为10000(网上的说法) server.tomcat.max-connections=300
如何理解上面两个参数
为了方便理解,我这里使用了springboot编写了一个简单了的服务,包含一个模拟登录的接口,并使用jmeter进行测试,不了解jmeter如何使用的朋友可以翻看我的历史文章。部分代码如下
// java 代码 @RestController @RequestMapping("/user") public class UserController { @Autowired private UsersRepository usersRepository; @PostMapping("/login") public String login(Users user) throws InterruptedException { // 这里将线程挂起3秒,方便观察结果 Thread.sleep(3000); Users checkUser = usersRepository.findByName(user.getName()); if(checkUser == null) return "用户不存在"; if(!checkUser.getPassword().equals(user.getPassword())) return "密码错误"; System.out.println("用户:" + checkUser.getName() + ",登录成功"); return "登录成功"; } }
接下来,设置jmeter中的线程数,分别测试以下场景返回的结果
注意:我在java代码中添加将线程挂起3秒的语句,实际的响应时间应该减去3秒
场景1:并发请求数 <= tomcat最大线程数200
结论:可以看到200个请求,平均响应时间为(3156-3000)=156ms,最小响应时间为23ms,最大响应时间为336ms,响应结果正常。
场景2:并发数 >tomcat最大线程数200,以下我将jmeter线程数设置为201,再来看看结果
看了下,平均值,最小值好像没什么异常,但是最大值却去到了5606毫秒,接近6S的时间。为什么会有个接近6S的最大值,原因很简单,因为tomcat最大的线程数为200,201的并发请求量,超出了并发处理的数量200,多出来的1个请求,需要等待某个处理中的请求处理完成。
这里我翻看了jmeter中大部分的http请求,验证了我的想法。大部分的http请求,响应时间都是3000多毫秒,只有最后一个响应的请求,响应的时间为5606毫秒,截图如下
场景3:请求数超过最大连接数300,这里将jmeter并发线程数设置为600
可以看到有大量的没有正常响应的http请求,原因很简单,因为超过了tomcat设置的最大连接数,服务器拒绝了该次请求的连接
-
java websocket高并发测试_Tomcat下WebSocket最大连接数测试调优
2021-03-12 22:58:59默认情况下,Tomcat的WebSocket最大连接数为200。WebSocket后台代码package com.chat.demo;/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the ... -
tomcat默认最大连接数与调整
2020-02-15 22:19:40一般来说我们都是用tomcat默认的配置做基础的本地开发,测试及生产肯定不用tomcat啦,正式一点的企业肯定换大型容器了,当然不排除还是用tomcat或者它的集群的,言归正传,tomcat的连接数相关配置及修改干货如下: ... -
Tomcat修改service.xml性能调优 增加最大并发连接数
2016-03-21 09:31:48由于在性能测试时遇到返回值较多(返回值过多需要限制,单请求一页招架10000条数据,有问题的),导致tomcat把带宽吃完,...转载自:Tomcat修改service.xml性能调优 增加最大并发连接数详细配置:<Connector executor -
java nio 最大连接数_nio netty grpc-最大并发连接数
2021-02-28 06:58:41什么是并发tcp/ip连接套接字通道什么是最大并发有多少tcp/ip 连接如何测试并发与多线程的关系服务器端阻塞和非阻塞1.阻塞慢 一个一个的处理 //tomcat2.非阻塞快 同时处理单线程和多线程1.单线程优点 速度快 空间少... -
【性能测试】ulimit -a 命令,高并发socket最大连接数限制的设定
2019-05-08 18:44:22之前测试websocket接口遇到过连接数限制,当时初次了解这个命令,现在简单总结下 top:性能监控 https://jingyan.baidu.com/article/4d58d5412917cb9dd4e9c0ed.html 虚拟内存调优: ... tomcat同步异步... -
Java数据库连接-JNDI方式- 配置Tomcat6.0 连接池
2014-03-19 10:20:466. JNDI方式 - 配置Tomcat6.0 连接池...我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量,使用情况,为系统开发,测试及性能调整提供依 -
Java数据库连接-JNDI方式- 配置Tomcat6.0 连接池 配置相关
2015-11-10 10:29:32JNDI方式 - 配置Tomcat6.0...我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量,使用情况,为系统开发,测试及性能调整提供依据。 -
jmeter对tomcat性能测试
2019-09-29 16:29:49主要对tomcat的参数做一些记录(jmeter和tomcat在同一个计算机,可能引起测试...#最大线程数server.tomcat.maxThreads =10000 #这个参数是指在同一时间,tomcat能够接受的最大连接数,一般这个值要大于maxThreads+ac... -
[小结]Java数据库连接 - JNDI方式 - 配置Tomcat6.0 连接池
2011-08-17 11:48:536. JNDI方式 - 配置Tomcat6.0 ...我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量,使用情况,为系统开发,测试及性能调... -
性能测试之Tomcat优化
2016-02-16 16:08:161.Tomcat最大连接数等配置 Tomcat的server.xml中Context元素的以下参数都是什么意思? maxThreads="150" 表示最多同时处理150个连接 minSpareThreads="25" 表示即使没有人使用也开这么多空... -
史上最强Tomcat8性能优化
2019-10-25 15:33:32文章目录授人以鱼不如授人以渔目的服务器资源Tomcat配置优化Linux环境安装运行Tomcat8AJP连接执行器(线程池)3种运行模式部署测试用的web项目...测试报告调整Tomcat参数进行优化禁用AJP连接设置线程池最大线程数为150... -
优化之SpringBoot 内置tomcat 调优测试
2021-01-13 23:37:48我们可以看到默认设置中,Tomcat的最大线程数是200,最大连接数是10000。 这个不同SpringBoot 版本可能有所细微差别。本文测试基于Springboot 2.0.7.RELEASE 默认配置 /** * Maximum amount of worker threads... -
tomcat 连接池参数研究
2011-04-14 17:49:00maxActive 属性 表示并发情况下最大可从连接池中获取的连接数。如果数据库不是单独,供一个应用使用,通过设置maxActive参数可以避免某个应用无限制的获取连接对其他应用造成影响,如果一个数据库只是用来... -
tomcat下小博士压力测试
2008-11-22 11:45:20初步判断是tomcat的最大连接数设置的问题 重新设置tomcat server.xml acceptCount=200后,最大线程可开到150 没有任何错误 acceptCount 指定放在队列里的请求数 [code="java"]package ... -
性能测试时,tomcat配置优化
2017-07-03 14:59:00性能测试时,tomcat配置优化,Tomcat连接数设置(建议的设置,可根据服务器的实际性能进行更改) 在tomcat配置文件server.xml中的配置中,和连接数相关的参数有: 1 maxThreads:Tomcat使用线程来处理接收的每个请求... -
nio netty grpc-最大并发连接数.md
2019-02-13 07:25:29什么是最大并发 有多少tcp/ip 连接 如何测试 并发与多线程的关系 服务器端 阻塞和非阻塞 1.阻塞 慢 一个一个的处理 //tomcat 2.非阻塞 快 同时处理 单线程和多线程 1.单线程 优点 速度快 空间少 缺点 存在并发问题 2... -
测试服务器最大链接数_LoaRunner性能测试系统学习教程:链接器配置(6)
2020-12-11 11:23:25上期我们讲到LoaRunner性能测试Tomcat配置,这期我们讲LoaRunner性能测试链接器配置。连接器配置接连器元素是Tomcat用于连接外部程序的,其允许Catalina接受请求,传送到Web应用程序,将生成的动态信息通过连接器... -
批处理多开Tomcat
2018-04-28 09:44:30最近在进行并发裸机测试,想测试下tomcat能承载的高并发支持...我修改了tomcat最大连接数但是还是会出现当并发达到200时出现链接被拒绝的情况从而使用到Nginx做tomcat集群处理,让tomcat能够分摊压力,修改了tomc...