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

打印 上一主题 下一主题

主题 1036|帖子 1036|积分 3108

之前经常有人问平台能支持多少装备同时在线,由于事情多没时间做。近来刚好有机会做下压力测试。在不中断的连续压测三天,最终效果为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类保持长毗连,并收发数据,比较简朴两个类。源代码如下:
  1. public class TestApp {
  2.         public static void main(String[] args) {
  3.                 String ip=args[0];
  4.                 String port=args[1];
  5.                 String maxThread=args[2];
  6.                 String startIndex="0";
  7.                 if(args.length>=4)startIndex=args[3];
  8.                 try {
  9.                         int sindex=Integer.parseInt(startIndex);
  10.                         int eindex=sindex+Integer.parseInt(maxThread);
  11.                         for(int i=sindex;i<eindex;i++) {
  12.                                 System.out.println("启动线程"+i);
  13.                                 new Thread(new SendJT808Thread(Utils.leftAdd0(String.valueOf(i), 14),ip,Integer.parseInt(port))).start();
  14.                         }
  15.                
  16.                 } catch (Exception e) {
  17.                         e.printStackTrace();
  18.                 }
  19.         }
  20. }
复制代码
  1. public class SendJT808Thread implements Runnable {
  2.         private String tid="";
  3.         private String ip;
  4.         private int port;
  5.         private Socket socket;
  6.         public SendLhcxThread(String tid,String ip,int port) {
  7.                 this.tid=tid;
  8.                 this.ip=ip;
  9.                 this.port=port;
  10.         }
  11.        
  12.         @Override
  13.         public void run() {
  14.                
  15.                 try {
  16.                         System.out.println("连接服务器->"+ip+":"+port);
  17.                         socket=new Socket(ip,port);
  18.                         while(true) {
  19.                                 Thread.currentThread().sleep(30*1000);
  20.                                 String time=Utils.getTime();
  21.                                 String temp="这里生成JT808的0x0200报文";
  22.                                 socket.getOutputStream().write(Utils.hexToBytes(temp));
  23.                                 int len=socket.getInputStream().available();
  24.                                 socket.getInputStream().skip(len);
  25.                         }
  26.                 } catch (Exception e) {
  27.                         e.printStackTrace();
  28.                 }finally {
  29.                         try {
  30.                                 if(socket!=null)
  31.                                 socket.close();
  32.                         } catch (IOException e) {
  33.                                 // TODO Auto-generated catch block
  34.                                 e.printStackTrace();
  35.                         }
  36.                 }
  37.         }
  38. }
复制代码
四、参数调优

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表