web网站怎么做压力测试

news2025/2/25 12:37:06

 Web网站性能体现在并发用户数已经网站的吞吐量和时延。

  最简单的压力测试工具就是ab "Apache Benchmark"

  下面将介绍ab的安装和使用:

  1. ab的安装

  ab的安装非常简单,安装了httpd,就自带ab。

  CentOS下的安装:

 yum install -y httpd

  Ubuntu下的安装:

 apt-get install apache2

安装好后,就可以使用ab了。

  2. ab使用前的准备工作

  由于ab是压力测试工具,我们需要把允许打开文件的数量调大。可以修改/etc/security/limits.conf

echo "* soft nofile 65535" >> /etc/security/limits.conf;echo "* hard nofile 65535" >> /etc/security/limits.conf

 

更改了这个配置后,需要重新启动VM。

  或者采用临时命令:

ulimit -n 65535

 

这样更改不需要重启机器。

  3. 运行ab,或wrk

  网上有很多ab和wrk使用的介绍,这里就不细讲了。一般打流量的命令是:

 ab -c 5000 -r -n 40000000 http://xx.xx.xx.xx/

 其中-c表示并发连接数;-n表示总共的请求数量;-r表示出现错误不退出,这个参数可以保证测试的连续性。注意http链接最后一定要是"/",否则报错。

wrk -t1 -c6000 -d2000s http://x.x.x.x/ 

4. 脚本

  为了保证测试的连续性,下面的小脚本可以检测ab测试程序是否在运行。如果有,表示正在测试,等待10s,继续检测;如果没有,表示ab已经测试结束,需要重新启动。具体脚本如下:

#!/bin/bash
  while true
  do
    flag=`ps -ef | grep "ab -c" | grep -v grep| wc -l`
    [ "$flag" = 1 ] && continue || ab -c 5000 -r -n 40000000 http://x.x.x.x/
    sleep 10
  done

  wrk的脚本如下:

#!/bin/bash
  while true
  do
  flag=`ps -ef | grep "wrk -t" | grep -v grep| wc -l`
  [ "$flag" = 1 ] && continue || /root/wrk-master/wrk -t1 -c6000 -d2000s http://x.x.x.x/
  sleep 10
  done

把此脚本后台运行。

  5. 时延测试

  在服务器压力上去后,服务器的带宽和时延的检测成为检测服务器能力的指标之一。

  带宽的检测,可以采用nload、Zabbix等工具。

  时延的检测,也可以采用Zabbix等带外方式。本文采用的是比较简单的time工具。

  由于time和一般的Shell命令不同,grep、awk等语句不能正常的抓取执行结果。我们一般采用把执行结果输出到文件,再检索文件的方式。并且time的重定向是stderr的定向。具体命令是:

(time -p curl http://x.x.x.x > /dev/null) &>> out.txt

 

 然后再采用grep real out.txt来获取时延。

  6. 时延脚本

  可以通过下面的脚本收集时延:

#!/bin/bash
  while true
    do
    (time -p curl http://x.x.x.x > /dev/null) &> out.txt
    grep real out.txt | awk '{print $0 "\t" strftime()}' >> delay.txt
    sleep 10
  done

 

 7. 服务器端查看同时在线人数的命令

  netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'

  结果如下:

TIME_WAIT t 32502
  FIN_WAIT1 t 4171
  FIN_WAIT2 t 267
  ESTABLISHED t 993
  SYN_RECV t 610
  CLOSING t 274
  LAST_ACK t 1

 或者用下面的命令:

  netstat -s | grep "connections established"
  4288 connections established

8. 通过curl统计时延插入数据库

  #!/bin/bash
  while true
  do
    (time -p curl http://x.x.x.x > /dev/null) &> out.txt
    grep real out.txt | awk '{print $0 "\t" strftime()}' >> delay.txt
    time=$(TZ=Asia/Shanghai date "+%Y-%m-%d %H:%M:%S")
    webDelay=`grep real out.txt | awk '{print $2}'`
    hostn=`hostname`
    mysql -hxxxx -uxxxx -pxxxx -e "use delay; insert into delay2 (delay, time, host) values($webDelay,'$time','$hostn');"
  sleep 20
  done

 8.1 通过python脚本把时延插入数据库

#!/usr/bin/env python
  import StringIO
  import pycurl
  import sys
  import os
  import time
  import MySQLdb
  import socket
  def getHTTPTime(url):
      crl = pycurl.Curl()
      #crl.setopt(pycurl.VERBOSE,1)
      crl.setopt(pycurl.FOLLOWLOCATION, 1)
      crl.setopt(pycurl.MAXREDIRS, 5)
      crl.fp = StringIO.StringIO()
      crl.setopt(pycurl.URL, url)
      crl.setopt(crl.WRITEFUNCTION, crl.fp.write)
      p = crl.perform()
      time = crl.getinfo(pycurl.TOTAL_TIME)
      return time
  url = "http://xx.xx.xx.xx/"
  myhost = socket.gethostname()
  host="xxx.mysqldb.chinacloudapi.cn"
  user="xxx"
  passwd="xxxxxx"
  db="delay"
  port=3306
  try:
    conn=MySQLdb.connect(host=host,user=user,passwd=passwd,port=port)
    conn.select_db(db)
    conn.select_db(db)
    cur=conn.cursor()
    while True:
      curtime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
      mytime = float(getHTTPTime(url))
      T = []
      T.append(mytime)
      T.append(curtime)
      T.append(myhost)
      cur.execute('insert into delay10  (delay, time, host) values(%s,%s,%s)',T);
      conn.commit()
      #aa=cur.execute('select id,delay,time from delay10')
      #print aa
      #for data in cur.fetchall():
      #  print data
      time.sleep(60)
  except MySQLdb.Error,e:
    print "Mysql Error %d: %s" % (e.args[0], e.args[1])

 9. 通过paping检测时延,并插入数据库

 #!/bin/bash
  while true
  do
    getDelay=`/root/paping -p 80 -c 1 x.x.x.x | grep time= | awk '{print $4}' | awk 'BEGIN{FS="="} {print $2}'`
    time=$(TZ=Asia/Shanghai date "+%Y-%m-%d %H:%M:%S")
    #webDelay=`echo ${a%ms*}`
    [ $getDelay ] && webDelay=$getDelay || webDelay=1000
    hostn=`hostname`
    mysql -hhwdelay.mysqldb.chinacloudapi.cn -uhwdelay%hengwei -pabc@123456 -e "use delay; insert into delay4 (delay, time, host) values('$webDelay','$time','$hostn');"
  sleep 20
  done

10. php页面反应实际时延情况:

 <?php
      echo "xxx时延测试</br>";
      echo "大于1秒钟时延的统计";
      $mysql_server_name="xxxxxx"; //数据库服务器名称
      $mysql_username="xxxxx"; // 连接数据库用户名
      $mysql_password="xxxxx"; // 连接数据库密码
      $mysql_database="delay"; // 数据库的名字
      // 连接到数据库
      $conn=mysql_connect($mysql_server_name, $mysql_username,
                          $mysql_password);
       // 从表中提取信息的sql语句
      $strsql="select * from delay2 where delay > 1 order by id desc";
      // 执行sql查询
      $result=mysql_db_query($mysql_database, $strsql, $conn);
      // 获取查询结果
      $row=mysql_fetch_row($result);
      echo '<font face="verdana">';
      echo '<table border="1" cellpadding="1" cellspacing="2">';
      // 显示字段名称
      echo "</b><tr></b>";
      for ($i=0; $i<mysql_num_fields($result); $i++)
      {
        echo '<td bgcolor="#FF0000"><b>'.
        mysql_field_name($result, $i);
        echo "</b></td></b>";
      }
      echo "</tr></b>";
      // 定位到第一条记录
      mysql_data_seek($result, 0);
      // 循环取出记录
      while ($row=mysql_fetch_row($result))
      {
        echo "<tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++ )
        {
          echo '<td bgcolor="#00FF00">';
          echo $row[$i];
          echo '</td>';
        }
        echo "</tr></b>";
      }
      echo "</table></b>";
      echo "</font>";
      // 释放资源
      mysql_free_result($result);
      // 关闭连接
      mysql_close($conn);
  ?>

11. 多监测点合并网页:

<!DOCTYPE html>
  <html>
    <head>
      <title>HWTEST.html</title>
      
      <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"/>
      <meta http-equiv="description" content="this is my page"/>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
      <link rel="stylesheet" type="text/css" href="./test.css">
    </head>
    <body>
    <!-- Logo div -->
    <div class="logo">
     <h1>xxx时延测试比较页面</h1> 
    </div>
    <!-- Adv div -->
    <div class="ad">
      <div class="stuad">
      <h4>Azure上海VM检测Azure北京VM时延</br></h4>
      <h4>大于1秒钟时延的统计</h4>
      <?php
        $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
        $mysql_username="xxx"; // 连接数据库用户名
        $mysql_password="xxx"; // 连接数据库密码
        $mysql_database="delay"; // 数据库的名字
        // 连接到数据库
        $conn=mysql_connect($mysql_server_name, $mysql_username,
                            $mysql_password);
         // 从表中提取信息的sql语句
        $strsql="select id,delay,time from delay2 where delay > 1 order by id desc";
        //$strsql="select * from delay2 where delay > 1 order by id desc";
        // 执行sql查询
        $result=mysql_db_query($mysql_database, $strsql, $conn);
        // 获取查询结果
        $row=mysql_fetch_row($result);
        echo '<font face="verdana">';
  //    echo '<table border="1" cellpadding="1" cellspacing="2">';
        echo '<table border="1" cellpadding="1" cellspacing="2" align="center">';
        // 显示字段名称
        echo "</b><tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++)
        {
          echo '<td bgcolor="#FF0000"><b>'.
          mysql_field_name($result, $i);
          echo "</b></td></b>";
        }
        echo "</tr></b>";
        // 定位到第一条记录
        mysql_data_seek($result, 0);
        // 循环取出记录
        while ($row=mysql_fetch_row($result))
        {
          echo "<tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++ )
          {
            echo '<td bgcolor="#00FF00">';
            echo $row[$i];
            echo '</td>';
          }
          echo "</tr></b>";
        }
        echo "</table></b>";
        echo "</font>";
        // 释放资源
        mysql_free_result($result);
        // 关闭连接
        mysql_close($conn);
    ?>
      </div>
      <div class="ad2">
      <h4>家中采用curl检测页面时延</br></h4>
      <h4>大于1秒钟时延的统计</h4>
      <?php
        $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
        $mysql_username="xxx"; // 连接数据库用户名
        $mysql_password="xxx"; // 连接数据库密码
        $mysql_database="delay"; // 数据库的名字
        // 连接到数据库
        $conn=mysql_connect($mysql_server_name, $mysql_username,
                            $mysql_password);
         
         // 从表中提取信息的sql语句
        $strsql="select id,delay,time from delay3 where delay > 1 order by id desc";
        // 执行sql查询
        $result=mysql_db_query($mysql_database, $strsql, $conn);
        // 获取查询结果
        $row=mysql_fetch_row($result);
        echo '<font face="verdana">';
  //    echo '<table border="1" cellpadding="1" cellspacing="2">';
        echo '<table border="1" cellpadding="1" cellspacing="2" align="center" >';
        // 显示字段名称
        echo "</b><tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++)
        {
          echo '<td bgcolor="#FF0000"><b>'.
          mysql_field_name($result, $i);
          echo "</b></td></b>";
        }
        echo "</tr></b>";
        // 定位到第一条记录
        mysql_data_seek($result, 0);
        // 循环取出记录
        while ($row=mysql_fetch_row($result))
        {
          echo "<tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++ )
          {
            echo '<td bgcolor="#00FF00">';
            echo $row[$i];
            echo '</td>';
          }
          echo "</tr></b>";
        }
        echo "</table></b>";
        echo "</font>";
        // 释放资源
        mysql_free_result($result);
        // 关闭连接
        mysql_close($conn);
    ?>
     
      </div>
      <div class="house">
      <h4>家中采用paping测试</br></h4>
      <h4>大于100ms时延的统计</h4>
      <?php
        $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
        $mysql_username="xxx"; // 连接数据库用户名
        $mysql_password="xxx"; // 连接数据库密码
        $mysql_database="delay"; // 数据库的名字
        // 连接到数据库
        $conn=mysql_connect($mysql_server_name, $mysql_username,
                            $mysql_password);
         
         // 从表中提取信息的sql语句
        $strsql="select id,delay,time from delay4 where delay > 100 order by id desc";
        // 执行sql查询
        $result=mysql_db_query($mysql_database, $strsql, $conn);
        // 获取查询结果
        $row=mysql_fetch_row($result);
        echo '<font face="verdana">';
  //    echo '<table border="1" cellpadding="1" cellspacing="2">';
        echo '<table border="1" cellpadding="1" cellspacing="2" align="center" >';
        // 显示字段名称
        echo "</b><tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++)
        {
          echo '<td bgcolor="#FF0000"><b>'.
          mysql_field_name($result, $i);
          echo "</b></td></b>";
        }
        echo "</tr></b>";
        // 定位到第一条记录
        mysql_data_seek($result, 0);
        // 循环取出记录
        while ($row=mysql_fetch_row($result))
        {
          echo "<tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++ )
          {
            echo '<td bgcolor="#00FF00">';
            echo $row[$i];
            echo '</td>';
          }
          echo "</tr></b>";
        }
        echo "</table></b>";
        echo "</font>";
        // 释放资源
        mysql_free_result($result);
        // 关闭连接
        mysql_close($conn);
    ?>
      </div>
    </div>
   
    </body>
  </html>

 CSS文件:

body{
  width:950px;
  margin: 0 auto;
  background-color: white;
  border: 1px solid red;
  font-size: 16px;
  }
  .logo{
  width: 950px;
  height: 68px;
  background-color: yellow;
  float: left;
  margin-top: 5px;
  text-align: center;
  }
  .ad{
  width: 950px;
  /*height: 212px;*/
  /*background-color: pink;*/
  margin-top: 5px;
  float: left;
  }
  .stuad{
  width: 310px;
  /*height: 196px;*/
  float: left;
  background-color: #ADFEDC;
  margin: 4px 0 0 4px;
  text-align: center;
  }
  .ad2{
  width: 310px;
  /*height: 196px;*/
  float: left;
  background-color: #D2A2CC;
  margin: 4px 0 0 4px;
  text-align: center;
  }
  .house{
  width: 310px;
  /*height: 196px;*/
  float: left;
  background-color: #FC7E8C;
  margin: 4px 0 0 4px;
  text-align: center;
  }

 12. 检测程序是否运行的脚本

#!/bin/bash
  while true
  do
  cflag=`ps -ef | grep delay.sh | grep -v grep | wc -l`
  pflag=`ps -ef | grep mypachk.sh | grep -v grep | wc -l`
  echo $cflag  $pflag
  #[ "$flag" = 1 ] && continue || /root/delay.sh &
  [ "$cflag" = 0 ] && /root/delay.sh  || echo "curl is ok" >> record.txt
  [ "$pflag" = 0 ] && /root/mypachk.sh  || echo "paping is ok" >> record.txt
  sleep 600
  done

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker 常用指令(启动,关闭,查看运行状态)

文章目录 docker 常用指令启动 docker关闭 docker查看 docker的运行状态 docker 常用指令 启动 docker systemctl start docker关闭 docker systemctl stop docker查看 docker的运行状态 systemctl status docker如下图所示&#xff1a; 表示docker正在运行中

云呐智能生产线安装与运维是做什么的?需要学哪些内容?

能生产线安装与运维主要负责智能化生产线的组装、接线、调试、辅助生产和运维等工作。  智能生产线安装与运维工作的核心在于保证智能生产线的高效运转和持续优化。具体来说&#xff0c;这个领域的工作人员需要掌握机械、电工电子技术、工业机器人等基础知识和技能&#xff0…

如何进行Appium实现移动端UI自动化测试?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学…

亚信安慧AntDB助力全链路实时化

实时数据平台&#xff0c;快速实现企业全链路实时化 引入数据仓库、数据挖掘、HTAP等先进理念&#xff0c;通过实时数据应用平台来装载庞大的信息量&#xff0c;进行实时分析处理&#xff0c;克服数据处理过程中的困难&#xff0c;是当下各企事业单位、互联网、金融&#xff0c…

学习pybind11:Hello World例子

首先要明白pybind11是干啥的&#xff0c;对于一个C/C库&#xff0c;可以用pybind11封装它的接口为Python接口&#xff0c;这样得到一个python库&#xff0c;就可以把功能强大的库丢给使用python的boys & girls使用了~ 因此&#xff0c;使用pybind11做封装&#xff0c;是我…

Golang 实现 websocket 通讯(一个服务器,两个客户端)

运行客户端时首先要输入自己的名字&#xff0c;两个客户端输入的名字不能一样。 先上运行结果&#xff1a; 服务器端&#xff1a; 客户端1&#xff1a; 客户端2&#xff1a; 话不多说&#xff0c;直接上代码&#xff1a; 服务器端&#xff1a; package mainimport ("f…

计算机网络-后退N帧协议(弊端 滑动窗口 运行中的GBN 滑动窗口长度习题 GBN协议性能分析 )

文章目录 停等协议的弊端后退N帧协议中的滑动窗口GBN发送方必须响应的三件事GBN接受方要做的事运行中的GBN滑动窗口长度GBN协议重点总结习题1习题2GBN协议性能分析小结 停等协议的弊端 信道利用率低&#xff1a;在停等协议中&#xff0c;发送方在发送完一帧后必须等待接收方确…

教师编制取消?什么时候执行?

有关教师编制取消的传闻在教育界和社交媒体上闹得沸沸扬扬。许多老师、家长、学生都对此表示了极大的关注。教师编制真的会取消吗&#xff1f;如果取消&#xff0c;又将在何时执行&#xff1f; 教师编制&#xff0c;作为一种职业保障和身份&#xff0c;在很长一段时间内被视为教…

利用 ChatGPT 提升个人工作、生活品质

利用 ChatGPT 提升个人工作、生活品质和个人智慧是一个多方面而又切实可行的方法。 以下是一些具体的建议&#xff1a; 获取信息和知识&#xff1a; ChatGPT 可以回答各种问题并提供相关信息和知识。你可以利用它来查询工作中遇到的问题、学习新的知识领域或是获取日常生活中的…

Python进阶:Pandas -- 清理重复数据

Python进阶&#xff1a;Pandas – 清理重复数据 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅和支持…

11.vue学习笔记(组件生命周期+生命周期应用+动态组件+组件保持存活)

文章目录 1.组件生命周期2.生命周期应用2.1通过ref获取元素DOM结构2.2.模拟网络请求渲染数据 3.动态组件3.1.A&#xff0c;B两个组件 4.组件保持存活&#xff08;销毁期&#xff09; 1.组件生命周期 每个Vue组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置…

Swagger3 使用详解

Swagger3 使用详解 一、简介1 引入依赖2 开启注解3 增加一个测试接口4 启动服务报错1.5 重新启动6 打开地址&#xff1a;http://localhost:8093/swagger-ui/index.html 二、Swagger的注解1.注解Api和ApiOperation2.注解ApiModel和ApiModelProperty3.注解ApiImplicitParams和Api…

五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等

hello&#xff0c;我是贝格前端工场&#xff0c;本次介绍跨平台开发的框架&#xff0c;欢迎大家评论、点赞。 一、什么是跨平台桌面应用开发框架 跨平台桌面应用开发框架是一种工具或框架&#xff0c;它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的…

开源大模型LLM大爆发,数据竞赛已开启!如何使用FuseLLM实现大语言模型的知识融合?

开源大模型LLM大爆发&#xff0c;数据竞赛已开启&#xff01;如何使用FuseLLM实现大语言模型的知识融合&#xff1f; 现在大多数人都知道LLM是什么&#xff0c;以及可以做什么。 人们讨论着它的优缺点&#xff0c;畅想着它的未来&#xff0c; 向往着真正的AGI&#xff0c;又有…

蓝桥杯备赛第一篇(数论)

数论 1.判断质数 注意i 的终止条件本来是 i < s q r t ( n u m ) i<sqrt(num)i<sqrt(num),但是计算开方太慢了&#xff0c;所以用 i ∗ i < n u m &#xff0c;但是i ∗ i 容易爆int&#xff0c;所以最终改成 i < n u m / i &#xff0c;后面的其他 代码也会…

5000字深度好文!WMS仓库管理系统的应用场景有哪些?

WMS仓库管理系统提供了全面的仓库管理功能&#xff0c;从物料管理到日常库存调整&#xff0c;从仓库拣选到成品出库。那么仓库管理系统都有哪些功能呢&#xff1f;仓库管理系统的应用场景有哪些呢&#xff1f;企业又该如何使用仓库管理系统呢&#xff1f; 这篇就结合图示零代码…

「优选算法刷题」:矩阵区域和

一、题目 给你一个 m x n 的矩阵 mat 和一个整数 k &#xff0c;请你返回一个矩阵 answer &#xff0c;其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和&#xff1a; i - k < r < i k, j - k < c < j k 且(r, c) 在矩阵内。 示例 1&#xff1…

大数据构建知识图谱:从技术到实战的完整指南

文章目录 大数据构建知识图谱&#xff1a;从技术到实战的完整指南一、概述二、知识图谱的基础理论定义与分类核心组成历史与发展 三、知识获取与预处理数据源选择数据清洗实体识别 四、知识表示方法知识表示模型RDFOWL属性图模型 本体构建关系提取与表示 五、知识图谱构建技术图…

unity shaderGraph实例-物体线框显示

文章目录 本项目基于URP实现一&#xff0c;读取UV网格&#xff0c;由自定义shader实现效果优缺点效果展示模型准备整体结构各区域内容区域1区域2区域3区域4shader属性颜色属性材质属性后处理 实现二&#xff0c;直接使用纹理&#xff0c;使用默认shader实现优缺点贴图准备材质准…

开源大数据集群部署(十二)Ranger 集成 hive

作者&#xff1a;櫰木 1、解压安装 在hd1.dtstack.com主机上执行&#xff08;一般选择hiveserver2节点&#xff09; 解压ranger-2.3.0-hive-plugin.tar.gz [roothd1.dtstack.com software]#tar -zxvf ranger-2.3.0-hive-plugin.tar.gz修改install.properties配置 [roothd1…