之前經(jīng)常有人問平臺能支持多少設(shè)備同時在線,由于事情多沒時間做。最近剛好有機會做下壓力測試。在不間斷的連續(xù)壓測三天,最終結(jié)果為13.6萬TCP連接,30秒上報頻率。
一、測試目的
測試平臺同時接入設(shè)備數(shù)量與并發(fā)處理能力。
二、準(zhǔn)備環(huán)境
一臺主服務(wù)器用于部署車輛定位平臺,是常見的8核16G內(nèi)存300G硬盤,操作系統(tǒng)為centos 7.9,基礎(chǔ)軟件mysql8.0、redis3.2、jdk1.8,還有車輛定位平臺軟件。
三臺壓力測試服務(wù)器,同內(nèi)網(wǎng)服務(wù)器。兩臺為8核16G,一臺為2核4G。操作系統(tǒng)均為centos 7.9。
一臺8核16G的服務(wù)器模擬6.3萬個終端設(shè)備。
一臺8核16G的服務(wù)器模擬5.3萬個終端設(shè)備。
一臺2核4G的服務(wù)器模擬2萬個終端設(shè)備,該服務(wù)器由于配置原因模擬2萬已是極限。
共模擬13.6萬個終端設(shè)備,外加2臺真實設(shè)備。
5.3萬的壓力服務(wù)器還有加壓1萬的空間,但加壓后報異常:java.net.NoRouteToHostException: Cannot assign requested address (Address not available)。
三、編寫壓力測試程序
壓力程序由java編寫,用Socket類保持長連接,并收發(fā)數(shù)據(jù),比較簡單兩個類。源代碼如下:
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;
}
@Override
public void run() {
try {
System.out.println("連接服務(wù)器->"+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();
}
}
}
}
四、參數(shù)調(diào)優(yōu)
1、測試端放開端口區(qū)間,以下是臨時設(shè)置,沒放開只能模擬1萬多個終端
sysctl -w net.ipv4.ip_local_port_range=“1024 64000”
2、測試端開啟允許最大線程,以下是臨時設(shè)置,沒放開只能模擬3.2萬個終端
sysctl kernel.pid_max
sysctl -w kernel.pid_max=65535
3、服務(wù)端,放開文件句柄數(shù),目標(biāo)為10萬連接,沒放開服務(wù)器報錯:Too many open files
/etc/security/limits.conf
root soft nofile 200001
root hard nofile 200002
4、車輛定位的JT808網(wǎng)關(guān)解析線程設(shè)置為16,默認(rèn)為2
五、測試結(jié)果
連續(xù)壓測幾天后接入2個真實設(shè)備操作業(yè)務(wù),數(shù)據(jù)上報及指令下發(fā)都正常。各項服務(wù)器指標(biāo)如下:
六、附地址:
演示地址
http://gps.lingx.com/
賬號:admin
密碼:123456文章來源:http://www.zghlxwxcb.cn/news/detail-848393.html
終端設(shè)備接入
IP:47.100.112.218
端口:8808文章來源地址http://www.zghlxwxcb.cn/news/detail-848393.html
到了這里,關(guān)于部標(biāo)JT808車輛定位監(jiān)控平臺單服務(wù)器13.6萬接入壓力測試記錄(附源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!