部标JT808车辆定位监控平台单服务器13.6万接入压力测试记录(附源码)

之前经常有人问平台能支持多少设备同时在线,由于事情多没时间做。最近刚好有机会做下压力测试。在不间断的连续压测三天,最终结果为13.6万TCP连接,30秒上报频率。

一、测试目的

测试平台同时接入设备数量与并发处理能力。

二、准备环境

一台主服务器用于部署车辆定位平台,是常见的8核16G内存300G硬盘,操作系统为centos 7.9,基础软件mysql8.0、redis3.2、jdk1.8,还有车辆定位平台软件。

三台压力测试服务器,同内网服务器。两台为8核16G,一台为2核4G。操作系统均为centos 7.9。

一台8核16G的服务器模拟6.3万个终端设备。

一台8核16G的服务器模拟5.3万个终端设备。

一台2核4G的服务器模拟2万个终端设备,该服务器由于配置原因模拟2万已是极限。

共模拟13.6万个终端设备,外加2台真实设备。

5.3万的压力服务器还有加压1万的空间,但加压后报异常:java.net.NoRouteToHostException: Cannot assign requested address (Address not available)。

三、编写压力测试程序

压力程序由java编写,用Socket类保持长连接,并收发数据,比较简单两个类。源代码如下:

java 复制代码
public class TestApp {

	public static void main(String[] args) {
		String ip=args[0];
		String port=args[1];
		String maxThread=args[2];
		String startIndex="0";
		if(args.length>=4)startIndex=args[3];
		try {
			int sindex=Integer.parseInt(startIndex);
			int eindex=sindex+Integer.parseInt(maxThread);
			for(int i=sindex;i<eindex;i++) {
				System.out.println("启动线程"+i);
				new Thread(new SendJT808Thread(Utils.leftAdd0(String.valueOf(i), 14),ip,Integer.parseInt(port))).start();
			}
		
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

}
java 复制代码
public class SendJT808Thread implements Runnable {
	private String tid="";
	private String ip;
	private int port;
	private Socket socket;
	public SendLhcxThread(String tid,String ip,int port) {
		this.tid=tid;
		this.ip=ip;
		this.port=port;
	}
	
	@Override
	public void run() {
		
		try {
			System.out.println("连接服务器->"+ip+":"+port);
			socket=new Socket(ip,port);
			while(true) {
				Thread.currentThread().sleep(30*1000);
				String time=Utils.getTime();
				String temp="这里生成JT808的0x0200报文";
				socket.getOutputStream().write(Utils.hexToBytes(temp));
				int len=socket.getInputStream().available();
				socket.getInputStream().skip(len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(socket!=null)
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

四、参数调优

1、测试端放开端口区间,以下是临时设置,没放开只能模拟1万多个终端

sysctl -w net.ipv4.ip_local_port_range="1024 64000"

2、测试端开启允许最大线程,以下是临时设置,没放开只能模拟3.2万个终端

sysctl kernel.pid_max

sysctl -w kernel.pid_max=65535

3、服务端,放开文件句柄数,目标为10万连接,没放开服务器报错:Too many open files

/etc/security/limits.conf

root soft nofile 200001

root hard nofile 200002

4、车辆定位的JT808网关解析线程设置为16,默认为2

五、测试结果

连续压测几天后接入2个真实设备操作业务,数据上报及指令下发都正常。各项服务器指标如下:



六、附地址:

演示地址

http://gps.lingx.com/

账号:admin

密码:123456

终端设备接入

IP:47.100.112.218

端口:8808

相关推荐
韩楚风18 分钟前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学22 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
唐家小妹25 分钟前
介绍一款开源的 Modern GUI PySide6 / PyQt6的使用
python·pyqt
Pythonliu744 分钟前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
羊小猪~~1 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm
我是哈哈hh1 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
郭二哈1 小时前
C++——模板进阶、继承
java·服务器·c++
Marst Code1 小时前
(Django)初步使用
后端·python·django
挥剑决浮云 -1 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
985小水博一枚呀2 小时前
【对于Python爬虫的理解】数据挖掘、信息聚合、价格监控、新闻爬取等,附代码。
爬虫·python·深度学习·数据挖掘