CentOS7+Tomcat8+websocket最大连接数的问题

如何治疗颈椎病 2016-07-25 03:11:37
CentOS7.0 +Tomcat7 +websocket 最大连接数测试。

设置tomcat启动参数 (2G)
JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=256M -XX:MaxPermSize=256m -Xss256k -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=2 -Djava.awt.headless=true"

本地测试websocket连接数 到7-800个就连不上上了,要么很久才能连上那么一个。需要再连上很困难。持续增加会导致tomcat自动关闭。
异常原因:


1. 问题分析 本地windows系统连接限制。
在另外一台电脑上执行连接代码,一个都连不上。直接报错。不是本地系统问题。
2. Nginx反向代理设置问题
直接使用ip+端口号码连接,结果还是一样,到7-800个就不行。
3. 修改启动参数 (2G改成4G)
JAVA_OPTS="-server –Xms4g –Xmx4g –Xmn1024m -XX:PermSize=256M -XX:MaxPermSize=256m -Xss256k -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=2 -Djava.awt.headless=true"

连接websocket最大个数在1300左右 就不行了。
异常原因



4. 修改tomcat配置文件 server.xml
  <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" maxThreads="600" maxConnections="5000" acceptCount="2000"
redirectPort="8443" />

测试结果还是一样。2G 内存700-800左右连接。
持续增加会导致tomcat自动关闭。
5. 系统打开文件句柄

[root@iZ94n26lu8iZ bin]# ulimit -n
1000000

[root@iZ94n26lu8iZ bin]# cat /proc/sys/fs/file-max
794576


vim /etc/security/limits.conf

* soft nofile 1024000
* hard nofile 1024000
root hard nofile 1000000
root soft nofile 1000000


6.

连接wesocket测试代码


...全文
1434 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiaoxiqincai2 2016-09-20
  • 打赏
  • 举报
回复
设置 ulimit -n 6000, 默认情况下是1024,所以连不上去。。。。
Intboy 2016-07-26
  • 打赏
  • 举报
回复
tomcat没这么强悍吧
  • 打赏
  • 举报
回复
路由器最大连接数只有1500,醉了。洗洗睡吧。和服务器配置没有关系。
  • 打赏
  • 举报
回复
路由器最大连接数只有1500,醉了。洗洗睡吧。和服务器配置没有关系。
引用 5 楼 xj90314 的回复:
一个tomcat好像1000个是极限了吧?加上服务器一些原因 7-8百最大 是正常的。
不是的,tomcat 可以支撑5000+ ,以前有测试过。 最近是因为本地路由器限制了最多只能发1500的socket连接。所以导致连不上的问题。不是因为Tomcat服务器的问题。
xiejin90314 2016-07-26
  • 打赏
  • 举报
回复
一个tomcat好像1000个是极限了吧?加上服务器一些原因 7-8百最大 是正常的。
  • 打赏
  • 举报
回复
JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=256M -XX:MaxPermSize=256m -Xss256k -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=2 -Dorg.apache.tomcat.websocket.executorMaxSize=10000 -Djava.awt.headless=true" 启动参数里面加了个这个。连接数达到1400 还是不行,要求能达到1W以上
  • 打赏
  • 举报
回复
protected void start() {
		WebSocketContainer container = ContainerProvider
				.getWebSocketContainer();

		Date now = new Date();		
		String uri = "ws://*******/websocket?device_id="
				+ deviceId
				+ "&api_id=55×tamp="
				+ now.getTime() + "&sign=55";
		System.out.println("Connecting to " + uri);
		try {
			session = container
					.connectToServer(MyClient.class, URI.create(uri));
			System.out.println("count: " + (++count));
		} catch (Exception e) {
			e.printStackTrace();

			writeLog(e.getMessage());

			// System.exit(-1);
		}
	}

public static void main(String args[]) {
		List<App> clientList = new Vector<App>(CLIENT_COUNT);
		try {
			for (; true;) {
				App client = new App();
				client.start();
				clientList.add(client);
				if (clientList.size() >= CLIENT_COUNT) {
					break;
				}
				sleep(200);
			}
		} catch (Exception e) {
			e.printStackTrace();

			writeLog(e.getMessage());

			// System.exit(-1);
		}
}

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧