当前位置: 首页 > news >正文

部标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类保持长连接,并收发数据,比较简单两个类。源代码如下:

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();} }}

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;}@Overridepublic 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 blocke.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

相关文章:

  • 面试题-Elasticsearch集群架构和调优手段(超全面)
  • 谷粒商城——缓存——SpringCache
  • 计算机网络——网络基础1
  • 在django中使用kindeditor出现转圈问题
  • Leetcode 3.26
  • 图像处理与视觉感知---期末复习重点(4)
  • 【前端】-【性能优化常识】
  • Midjourney AI绘图工具介绍及使用
  • GIMP - GNU 图像处理程序 - 工具栏窗口 (Toolbox) 显示
  • checkpoint 大模型、VAE、LoRA、Embedding、Controlnet这些是什么模型
  • excel创建和部分使用
  • leetcode88-Merge Sorted Array
  • Intellij IDEA构建Android开发环境
  • 业务服务:xss攻击
  • QT_day5:使用定时器实现闹钟
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CODING 缺陷管理功能正式开始公测
  • java2019面试题北京
  • Java应用性能调优
  • Markdown 语法简单说明
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PhantomJS 安装
  • PHP变量
  • Python_OOP
  • Vue--数据传输
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​io --- 处理流的核心工具​
  • ​secrets --- 生成管理密码的安全随机数​
  • !$boo在php中什么意思,php前戏
  • #define与typedef区别
  • #数学建模# 线性规划问题的Matlab求解
  • $refs 、$nextTic、动态组件、name的使用
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (70min)字节暑假实习二面(已挂)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (黑马C++)L06 重载与继承
  • (强烈推荐)移动端音视频从零到上手(上)
  • (原創) 物件導向與老子思想 (OO)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)socket Aio demo
  • (转)visual stdio 书签功能介绍
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .NET CLR基本术语
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net多线程总结
  • .NET上SQLite的连接
  • .net中调用windows performance记录性能信息