Giter Club home page Giter Club logo

performance-tests's Introduction

ThingsBoard Builds Server Status

performance-tests

ThingsBoard performance tests

Project that is able to stress test ThingsBoard server with a huge number of MQTT messages published simultaneously from different devices.

Prerequisites

Running

To run test against ThingsBoard first create plain text file to set up test configuration (in our example configuration file name is .env):

touch .env

Edit this .env file:

nano .env

and put next content into the text file (modify it according to your test goals):

REST_URL=http://IP_ADDRESS_OF_TB_INSTANCE:8080
# IP_ADDRESS_OF_TB_INSTANCE is your local IP address if you run ThingsBoard on your dev machine in docker
# Port should be modified as well if needed 
[email protected]
REST_PASSWORD=tenant
REST_POOL_SIZE=4

MQTT_HOST=IP_ADDRESS_OF_TB_INSTANCE
# IP_ADDRESS_OF_TB_INSTANCE is your local IP address if you run ThingsBoard on your dev machine in docker
MQTT_PORT=1883

MQTT_SSL_ENABLED=false
MQTT_SSL_KEY_STORE=mqttclient.jks
MQTT_SSL_KEY_STORE_PASSWORD=

# Test API to use - device or gateway. In case device data is send directly to devices, in case gateway - over MQTT gateway API
TEST_API=gateway

# Device API to use - MQTT or HTTP. HTTP applicable only in case TEST_API=device
DEVICE_API=MQTT

DEVICE_START_IDX=0
DEVICE_END_IDX=10
DEVICE_CREATE_ON_START=true
DEVICE_DELETE_ON_COMPLETE=true

GATEWAY_START_IDX=0
GATEWAY_END_IDX=3
GATEWAY_CREATE_ON_START=true
GATEWAY_DELETE_ON_COMPLETE=true

WARMUP_ENABLED=true

# Type of the payload to send: DEFAULT, SMART_TRACKER, SMART_METER
# RANDOM - TODO: add description
# SMART_TRACKER - sample payload: {"latitude": 42.222222, "longitude": 73.333333, "speed": 55.5, "fuel": 92, "batteryLevel": 81}
# SMART_METER - sample payload: {"pulseCounter": 1234567, "leakage": false, "batteryLevel": 81}
TEST_PAYLOAD_TYPE=SMART_METER

TEST_ENABLED=true

# true - send data to devices by device ids, false - select random devices from the list  
TEST_SEQUENTIAL=false

MESSAGES_PER_SECOND=1000
DURATION_IN_SECONDS=300

UPDATE_ROOT_RULE_CHAIN=false
REVERT_ROOT_RULE_CHAIN=false
RULE_CHAIN_NAME=root_rule_chain_ce.json

Where:

  • REST_URL - Rest URL of the TB instance. Default: http://localhost:8080
  • REST_USERNAME - Login of the user. Default: [email protected]
  • REST_PASSWORD - Password of the user. Default: tenant
  • MQTT_HOST - URL of the ThingsBoard MQTT broker. Default: localhost
  • MQTT_PORT - Port of the ThingsBoard MQTT broker. Default: 1883
  • DEVICE_API - Use MQTT, HTTP or LWM2M Device API for send messages. Default: MQTT
  • DEVICE_START_IDX - First index of the device that is going to be used in the test. Token of the device is going to be index of this device during test
  • DEVICE_END_IDX - Last index of the device that is going to be used in the test
  • DEVICE_CREATE_ON_START - Create devices before test
  • DEVICE_DELETE_ON_COMPLETE - Delete devices after test, there were created on start of the test
  • MESSAGES_PER_SECOND - Number of the messages to be published per second to ThingsBoard
  • DURATION_IN_SECONDS - Number of seconds run of the test
  • MQTT_SSL_ENABLED - Enable/disable ssl for MQTT. Default: false
  • MQTT_SSL_KEY_STORE - MQTT key store file location
  • MQTT_SSL_KEY_STORE_PASSWORD - MQTT key store file password

Once params are configured to run test simple type from the folder where configuration file is located:

docker run -it --env-file .env --name tb-perf-test thingsboard/tb-ce-performance-test:latest

Simply run test on the same machine (service, IDE, Docker)

docker run -it --rm --network host --pull always --log-driver none --name tb-perf-test thingsboard/tb-ce-performance-test:latest

Simply run test somewhere else

docker run -it --rm --network host --name tb-perf-test \
           --pull always --log-driver none \
           --env REST_URL=http://127.0.0.1:8080 \
           --env MQTT_HOST=127.0.0.1 \
           --env [email protected] \
           --env REST_PASSWORD=tenant \
           --env DEVICE_END_IDX=1111 \
           --env MESSAGES_PER_SECOND=1000 \
           --env DURATION_IN_SECONDS=86400 \
           --env ALARMS_PER_SECOND=1 \
           --env DEVICE_CREATE_ON_START=true \
           --env TEST_PAYLOAD_TYPE=SMART_METER \
           thingsboard/tb-ce-performance-test:latest

performance-tests's People

Contributors

ashvayka avatar ikulikov avatar mp-loki avatar nickas21 avatar shvaykad avatar smatvienko-tb avatar volodymyr-babak avatar yevhenbondarenko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

performance-tests's Issues

Error while launching the docker image

See below the error while I run :
docker run -it --env-file .env --rm --name tb-perf-test thingsboard/tb-performance-test

19:14:19.266 [main] WARN o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: or
g.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRestClientService': Invocation of init method failed; nested exception is o
rg.springframework.web.client.HttpClientErrorException: 401 null
19:14:19.270 [main] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat]
19:14:19.288 [main] INFO o.s.b.a.l.AutoConfigurationReportLoggingInitializer -

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
19:14:19.296 [main] ERROR o.s.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRestClientService': Invocation of init method failed; nested exception is
org.springframework.web.client.HttpClientErrorException: 401 null
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:137)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.j
ava:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)

What could be the reason for the failure?

Getting error during docker run

My .env
`REST_URL=localhost:8080
REST_USERNAME=[email protected]
REST_PASSWORD=tenant

MQTT_HOST=localhost
MQTT_PORT=1883
MQTT_SSL_ENABLED=false

TEST_API=device
DEVICE_API=HTTP

DEVICE_START_IDX=0
DEVICE_END_IDX=10
DEVICE_CREATE_ON_START=true
DEVICE_DELETE_ON_COMPLETE=true

GATEWAY_START_IDX=0
GATEWAY_END_IDX=3
GATEWAY_CREATE_ON_START=true
GATEWAY_DELETE_ON_COMPLETE=true

WARMUP_ENABLED=true

TEST_PAYLOAD_TYPE=SMART_METER
TEST_ENABLED=true
TEST_SEQUENTIAL=false

MESSAGES_PER_SECOND=100
DURATION_IN_SECONDS=300`

Getting below error

`docker run -it --rm --env-file .env --network host --name tb-perf-test thingsboard/tb-ce-performance-test:latest
Starting ThingsBoard Performance Test...
03:25:41,198 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
03:25:41,199 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/usr/share/tb-ce-performance-tests/conf/logback.xml]
03:25:41,644 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
03:25:41,674 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
03:25:41,685 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
03:25:41,878 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - This appender no longer admits a layout as a sub-component, set an encoder instead.
03:25:41,878 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
03:25:41,878 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
03:25:41,883 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.thingsboard] to INFO
03:25:41,883 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.microsoft.azure.servicebus.primitives.CoreMessageReceiver] to OFF
03:25:41,883 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
03:25:41,883 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
03:25:41,885 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
03:25:41,887 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@61a485d2 - Registering current configuration as safe fallback point

. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' |
| .__|| ||| |_, | / / / /
=========|
|==============|/=////
:: Spring Boot :: (v2.6.1)

03:25:43.190 [main] INFO o.t.tools.PerformanceTestApplication - Starting PerformanceTestApplication v3.3.3 using Java 11.0.12 on sky with PID 7 (/usr/share/tb-ce-performance-tests/bin/tb-ce-performance-tests.jar started by thingsboard in /usr/share/tb-ce-performance-tests/bin)
03:25:43.196 [main] INFO o.t.tools.PerformanceTestApplication - No active profile set, falling back to default profiles: default
03:25:44.824 [main] ERROR o.s.boot.SpringApplication - Application run failed
java.lang.IllegalStateException: Error processing condition on org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration.metricsRepositoryMethodInvocationListener
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60)
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:193)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:153)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:129)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:343)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)
at org.thingsboard.tools.PerformanceTestApplication.main(PerformanceTestApplication.java:33)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:467)
Caused by: java.lang.IllegalStateException: @ConditionalOnMissingBean did not specify a bean using type, name or annotation and the attempt to deduce the bean's type failed
at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.validate(OnBeanCondition.java:487)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.(OnBeanCondition.java:436)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchOutcome(OnBeanCondition.java:142)
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47)
... 24 common frames omitted
Caused by: org.springframework.boot.autoconfigure.condition.OnBeanCondition$BeanTypeDeductionException: Failed to deduce bean type for org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration.metricsRepositoryMethodInvocationListener
at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.deducedBeanTypeForBeanMethod(OnBeanCondition.java:517)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.deducedBeanType(OnBeanCondition.java:506)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.(OnBeanCondition.java:429)
... 26 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/data/repository/core/support/RepositoryMethodInvocationListener
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at org.springframework.boot.autoconfigure.condition.FilteringSpringBootCondition.resolve(FilteringSpringBootCondition.java:108)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.getReturnType(OnBeanCondition.java:525)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.deducedBeanTypeForBeanMethod(OnBeanCondition.java:513)
... 28 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.data.repository.core.support.RepositoryMethodInvocationListener
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 44 common frames omitted
03:25:44.838 [main] WARN o.s.boot.SpringApplication - Unable to close ApplicationContext
java.lang.IllegalStateException: Failed to introspect Class [org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@5f4da5c3]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:358)
at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:414)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.lambda$getTypeForFactoryMethod$2(AbstractAutowireCapableBeanFactory.java:765)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:764)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:703)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:674)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1670)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:570)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:542)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:667)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:659)
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1300)
at org.springframework.boot.SpringApplication.getExitCodeFromMappedException(SpringApplication.java:862)
at org.springframework.boot.SpringApplication.getExitCodeFromException(SpringApplication.java:850)
at org.springframework.boot.SpringApplication.handleExitCode(SpringApplication.java:837)
at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:778)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)
at org.thingsboard.tools.PerformanceTestApplication.main(PerformanceTestApplication.java:33)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:467)
Caused by: java.lang.NoClassDefFoundError: org/springframework/data/repository/core/support/RepositoryMethodInvocationListener
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166)
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2309)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463)
... 29 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.data.repository.core.support.RepositoryMethodInvocationListener
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 44 common frames omitted
`

License Checking Problem

[INFO] --- license-maven-plugin:3.0:check (default) @ performance-tests ---
[INFO] Checking licenses...
[WARNING] Unknown file extension: /home/git/performance-tests/docker/Makefile
[WARNING] Missing header in: /home/git/performance-tests/docker/tb-performance-tests.yaml

Build failure due to license checking problem, Any idea on how to solve this?

can the project used in cluster environment?

i have a cluster environment including 3 tb instances setup as monolithic architecture. i want to know can this project used in cluster environment? i have tried but errors occured when connected devices as follows:
image
i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.io.IOException: Connection reset by peer

HTTP vs MQTT

Hi, is there a example of performance test comparing HTTP and MQTT ?

Config guidelines to get the best perf

Hi @smatvienko-tb First of all thank you for the great tool. It's super useful.

I've checked the tests that you've made for different perf scenarios (e.g, messages per second, num connected devices, etc.). It's amazing to see how much perf you manage to squeeze from the TB.

Would you mind to provide some pointers about the configs that you've used for these tests? For example the value of REMOTE_JS_MAX_PENDING_REQUESTS, REMOTE_JS_MAX_REQUEST_TIMEOUT, kafka queue configs and etc.

Overall, is there any rule of thumb that given the number of messages per second gives the TB+Kafka config that's required to handle the data?

Closing current session due to invalid msg order

We deployed thingsboard with microservice architecture.
Deployment is aws server with Docker containers setup.

When we run Performance test tool to MQTT load, we are unable to connect device beyond approximetly 2000.

when we traced we found error : mqtt contianer
2019-09-23 13:49:48,333 [nioEventLoopGroup-3-10] INFO o.t.s.t.mqtt.MqttTransportHandler - [3d5f3784-8c87-45d0-b395-f67f63732b77] Closing current session due to invalid msg order: MqttMessage[fixedHeader=MqttFixedHeader[messageType=DISCONNECT, isDup=false, qosLevel=AT_MOST_ONCE, isRetain=false, remainingLength=0], variableHeader=, payload=]

No connection listener set to handle message received from the server. Test on TB2.1.0, How to adjust conf

Exception in thread "hawtdispatch-DEFAULT-7" java.lang.IllegalStateException: No connection listener set to handle message received from the server.
        at org.fusesource.mqtt.client.CallbackConnection.createListenerNotSetError(CallbackConnection.java:951)
        at org.fusesource.mqtt.client.CallbackConnection.access$000(CallbackConnection.java:73)
        at org.fusesource.mqtt.client.CallbackConnection$1.onPublish(CallbackConnection.java:96)
        at org.fusesource.mqtt.client.CallbackConnection.toReceiver(CallbackConnection.java:911)
        at org.fusesource.mqtt.client.CallbackConnection.processFrame(CallbackConnection.java:808)
        at org.fusesource.mqtt.client.CallbackConnection.access$1700(CallbackConnection.java:73)
        at org.fusesource.mqtt.client.CallbackConnection$6.onTransportCommand(CallbackConnection.java:425)
        at org.fusesource.hawtdispatch.transport.TcpTransport.drainInbound(TcpTransport.java:713)
        at org.fusesource.hawtdispatch.transport.TcpTransport$6.run(TcpTransport.java:592)
        at org.fusesource.hawtdispatch.internal.NioDispatchSource$3.run(NioDispatchSource.java:209)
        at org.fusesource.hawtdispatch.internal.SerialDispatchQueue.run(SerialDispatchQueue.java:100)
        at org.fusesource.hawtdispatch.internal.pool.SimpleThread.run(SimpleThread.java:77)

failed to process "${pkg.name}.deb": missing ':' in substitution

Dear Team,

We want to add our payload in source code and make new image using DockerFile. but getting below error.

Sending build context to Docker daemon 6.144kB
Step 1/6 : FROM thingsboard/openjdk11:bullseye-slim
---> 54317a520d7a
Step 2/6 : COPY start-tests.sh ${pkg.name}.deb /tmp/
failed to process "${pkg.name}.deb": missing ':' in substitution
image

mvn install error

root@perfclnt:~/performance-tests# mvn clean install gatling:execute
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.thingsboard:performance-tests:jar:0.0.1-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-shade-plugin is missing. @ line 110, column 21
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Thingsboard Performance Tests 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for org.thingsboard.common:data:jar:1.1.0-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for org.thingsboard:tools:jar:1.1.0-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for com.github.mnogu:gatling-mqtt:jar:1.0.0 is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.203 s
[INFO] Finished at: 2017-04-18T05:16:16+00:00
[INFO] Final Memory: 13M/221M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project performance-tests: Could not resolve dependencies for project org.thingsboard:performance-tests:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: org.thingsboard.common:data:jar:1.1.0-SNAPSHOT, org.thingsboard:tools:jar:1.1.0-SNAPSHOT, com.github.mnogu:gatling-mqtt:jar:1.0.0: Could not find artifact org.thingsboard.common:data:jar:1.1.0-SNAPSHOT -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.