nebula-bench 使用问题

  • nebula 版本:v2-nightly
  • 部署方式:k8s
  • 是否为线上版本:Y
    跟据 nebula-bench 文档的指引,完成了数据导入
    然后配置了 jmx 但无法正常完成测试 看日志貌似是少了 com.vesoft.LdbcGoStep 这个包 但是我对 java 不了解,目前环境中仅安装了 jdk 请问该如何导入这个包进行测试
    下附错误日志和 go_step.jmx
2021-07-13 15:56:45,499 ERROR o.a.j.p.j.s.JavaSampler: StandardJMeterEngine@4c6daf0-Java Request        Exception initialising: 
java.lang.ClassNotFoundException: com.vesoft.LdbcGoStep
        at java.net.URLClassLoader.findClass(URLClassLoader.java:471) ~[?:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
        at java.lang.Class.forName0(Native Method) ~[?:?]
        at java.lang.Class.forName(Class.java:398) ~[?:?]
        at org.apache.jmeter.protocol.java.sampler.JavaSampler.initClass(JavaSampler.java:121) [ApacheJMeter_java.jar:5.4.1]
        at org.apache.jmeter.protocol.java.sampler.JavaSampler.testStarted(JavaSampler.java:270) [ApacheJMeter_java.jar:5.4.1]
        at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:205) [ApacheJMeter_core.jar:5.4.1]
        at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:382) [ApacheJMeter_core.jar:5.4.1]
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.2">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">stoptestnow</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <stringProp name="LoopController.loops">-1</stringProp>
        </elementProp>
	<stringProp name="ThreadGroup.num_threads">{nums}</stringProp>
        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
        <boolProp name="ThreadGroup.scheduler">true</boolProp>
	<stringProp name="ThreadGroup.duration">{duration}</stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
        <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
      </ThreadGroup>
      <hashTree>
        <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request" enabled="true">
          <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
           <collectionProp name="Arguments.arguments">
	       <elementProp name="hosts" elementType="Argument">
                <stringProp name="Argument.name">hosts</stringProp>
                <stringProp name="Argument.value">{7.53.19.56:9669}</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
	</elementProp>
 <elementProp name="maxconn" elementType="Argument">
                <stringProp name="Argument.name">maxconn</stringProp>
                <stringProp name="Argument.value">100</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
	</elementProp>
 <elementProp name="user" elementType="Argument">
                <stringProp name="Argument.name">user</stringProp>
                <stringProp name="Argument.value">root</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>	
              <elementProp name="pwd" elementType="Argument">
                <stringProp name="Argument.name">pwd</stringProp>
                <stringProp name="Argument.value">nebula</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>
              <elementProp name="var2" elementType="Argument">
                <stringProp name="Argument.name">space</stringProp>
                <stringProp name="Argument.value">bench</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>

	      <elementProp name="person" elementType="Argument">
                <stringProp name="Argument.name">person</stringProp>
		<stringProp name="Argument.value">${person}</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>
              <elementProp name="nGQL" elementType="Argument">
                <stringProp name="Argument.name">nGQL</stringProp>
                <stringProp name="Argument.value">GO 3 STEP FROM "replace" OVER knows</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>
      </collectionProp>

          </elementProp>
          <stringProp name="classname">com.vesoft.LdbcGoStep</stringProp>
        </JavaSampler>
        <hashTree>
          <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV Data Set Config" enabled="true">
            <stringProp name="delimiter">|</stringProp>
            <stringProp name="fileEncoding"></stringProp>
            <stringProp name="filename">/home/luosanjun/nebula-bench/target/data/test_data/social_network/dynamic/person.csv</stringProp>
            <boolProp name="ignoreFirstLine">false</boolProp>
            <boolProp name="quotedData">false</boolProp>
            <boolProp name="recycle">true</boolProp>
            <stringProp name="shareMode">shareMode.all</stringProp>
            <boolProp name="stopThread">false</boolProp>
            <stringProp name="variableNames">var1,person,var3,var4,var5,var6,var7,var8</stringProp>
          </CSVDataSet>`
          <hashTree/>
        </hashTree>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

因为 Jmeter 是 Java 的技术栈,还要编译 Java, 最近我刚更新了使用 K6 来压测。
可以参考一下这个 PR,https://github.com/vesoft-inc/nebula-bench/pull/21

也可以手动直接用二进制来压测,Release v0.0.1 · HarrisChu/xk6-nebula · GitHub

3 个赞

直接用 release 中的二进制 配置文件参考仓库中 example 下的 js 仅修改了 graphd 地址 person.csv 在 js 同一目录下


看起来无事发生

什么意思,这个是你没有设置 vu 和 duration,默认只跑了一次 query。

命令行加一下参数就可以跑跑试试了。比如

./k6 run nebula-test.js -vu 3 -d 30s
1 个赞

目前测试完全可用了,但是 nebula-bench 使用的数据集是只有 ldbc 中的 person 吗?

数据集是 LDBC 的 social_network,导入到 nebula 也是所有的点和边,你可以 show tags 和 show edges 查看。

不过自动化压测现在没有很多场景,你可以自己用 k6 压一下。

该话题在最后一个回复创建后7天后自动关闭。不再允许新的回复。

浙ICP备20010487号