hazelcast-simulator | A tool for stress testing Hazelcast | Performance Testing library
kandi X-RAY | hazelcast-simulator Summary
kandi X-RAY | hazelcast-simulator Summary
Hazelcast Simulator is a production simulator used to test Hazelcast and Hazelcast-based applications in clustered environments. It also allows you to create your own tests and perform them on your Hazelcast clusters and applications that are deployed to cloud computing environments. In your tests, you can provide any property that can be specified on these environments (Amazon EC2 or your own environment): properties such as hardware specifications, operating system, Java version, etc. Hazelcast Simulator allows you to add potential production problems, such as real-life failures, network problems, overloaded CPU, and failing nodes to your tests. It also provides a benchmarking and performance testing platform by supporting performance tracking and also supporting various out-of-the-box profilers.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
- Runs the benchmark .
- Prints the cluster layout
- Scale the given number of agents .
- Starts worker .
- Runs the workers .
- Creates the working directory for the simulation .
- Emits a failure .
- Produce detailed information for detailed performance .
- Reports an exception to the agent .
- Checks if subMethods are overridden .
hazelcast-simulator Key Features
hazelcast-simulator Examples and Code Snippets
Community Discussions
Trending Discussions on Performance Testing
QUESTION
For the following Gatling simulation
...ANSWER
Answered 2022-Apr-11 at 17:08Right now we've tested only with primitive values passed into the Gatling session. It may work if you convert the data into a java.util.Map
. So maybe your best bet is to write some toMap()
function on your data-object. Or if you manage to emit a JSON string, there is a karate.fromString()
helper that can be useful.
So please read the docs here and figure out what works: https://github.com/karatelabs/karate/tree/master/karate-gatling#gatling-session
You are most welcome to contribute code to improve the state of things.
QUESTION
Assembly novice here. I've written a benchmark to measure the floating-point performance of a machine in computing a transposed matrix-tensor product.
Given my machine with 32GiB RAM (bandwidth ~37GiB/s) and Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz (Turbo 4.0GHz) processor, I estimate the maximum performance (with pipelining and data in registers) to be 6 cores x 4.0GHz = 24GFLOP/s. However, when I run my benchmark, I am measuring 127GFLOP/s, which is obviously a wrong measurement.
Note: in order to measure the FP performance, I am measuring the op-count: n*n*n*n*6
(n^3
for matrix-matrix multiplication, performed on n
slices of complex data-points i.e. assuming 6 FLOPs for 1 complex-complex multiplication) and dividing it by the average time taken for each run.
Code snippet in main function:
...ANSWER
Answered 2022-Mar-25 at 19:331 FP operation per core clock cycle would be pathetic for a modern superscalar CPU. Your Skylake-derived CPU can actually do 2x 4-wide SIMD double-precision FMA operations per core per clock, and each FMA counts as two FLOPs, so theoretical max = 16 double-precision FLOPs per core clock, so 24 * 16 = 384
GFLOP/S. (Using vectors of 4 double
s, i.e. 256-bit wide AVX). See FLOPS per cycle for sandy-bridge and haswell SSE2/AVX/AVX2
There is a a function call inside the timed region, callq 403c0b <_Z12do_timed_runRKmRd+0x1eb>
(as well as the __kmpc_end_serialized_parallel
stuff).
There's no symbol associated with that call target, so I guess you didn't compile with debug info enabled. (That's separate from optimization level, e.g. gcc -g -O3 -march=native -fopenmp
should run the same asm, just have more debug metadata.) Even a function invented by OpenMP should have a symbol name associated at some point.
As far as benchmark validity, a good litmus test is whether it scales reasonably with problem size. Unless you exceed L3 cache size or not with a smaller or larger problem, the time should change in some reasonable way. If not, then you'd worry about it optimizing away, or clock speed warm-up effects (Idiomatic way of performance evaluation? for that and more, like page-faults.)
- Why are there non-conditional jumps in code (at 403ad3, 403b53, 403d78 and 403d8f)?
Once you're already in an if
block, you unconditionally know the else
block should not run, so you jmp
over it instead of jcc
(even if FLAGS
were still set so you didn't have to test the condition again). Or you put one or the other block out-of-line (like at the end of the function, or before the entry point) and jcc
to it, then it jmp
s back to after the other side. That allows the fast path to be contiguous with no taken branches.
- Why are there 3 retq instances in the same function with only one return path (at 403c0a, 403ca4 and 403d26)?
Duplicate ret
comes from "tail duplication" optimization, where multiple paths of execution that all return can just get their own ret
instead of jumping to a ret
. (And copies of any cleanup necessary, like restoring regs and stack pointer.)
QUESTION
I have a requirement to test that a Public Website can serve a defined peak number of 400 page loads per second.
From what I read online, when testing web pages performance, virtual users (threads) should be configured to pause and "think" on each page they visit, in order to simulate the behavior of a real live user before sending a new page load request.
I must use some remote load generator machines to generate this necessary load, and I have a limit on how many virtual users I can use per each load generator. This means that if I make each virtual user pause and "think" for x seconds on each page, that user will not generate a lot of load compared to how much it would if it was executing as fast as it could with no configured think time - and this would cause me to need more users and implicitly need more load generator machines to achieve my desired "page loads per second" and this would be more costly in the end.
If my only request is to prove that a server can serve 400 page loads per second, I would like to know what difference does it really make if I add think times (and therefore use more virtual users) or not.
Why is generally "think time" considered as something which should be added when testing web pages performance ?
...ANSWER
Answered 2022-Mar-16 at 20:38Virtual user which is "idle" (doing nothing) has minimal resources footprint (mainly thread stack size) so I don't think you will need to have more machines
Well-behaved load test must represent real life usage of the application with 100% accuracy, if you're testing a website each JMeter thread (virtual user) must mimic a real user using a real browser with all related features like
- handling embedded resources (image, scripts, styles, fonts, sounds, etc.)
- using caching properly
- getting and sending back cookies
- sending appropriate headers
- processing AJAX requests like browser does
the most straightforward example of the difference between 400 users without think times and 4000 users with think times will be that 4000 users will open 4000 connections and keep them open and 400 users will open only 400 connections.
QUESTION
We use Jmeter with the BZM - Streaming Sampler to load test a streaming service. With this we are requesting a dash main.mpd file. That url would look like: https://url.com/5bf9c52c17e072d89e6527d45587d03826512bfa3b53a30bb90ecd7ed1bb7a77/dash/Main.mpd
Within the schema we have defined ContentProtection with value="cenc" as such:
...ANSWER
Answered 2022-Mar-14 at 18:51It is possible to:
Download the playlist using HTTP Request sampler and Save Responses to a file listener so it would be saved to your local drive. See Performance Testing: Upload and Download Scenarios with Apache JMeter article for more comprehensive instructions if needed
Amend the playlist as needed using JSR223 Sampler or OS Process Sampler
In the bzm - Streaming Sampler use local URL via
file
URI scheme i.e.
QUESTION
I have two post request. This post request should run until the response is "createdIsCompleted" == false .I m taking createdIsCompleted response from second post isssue. So how can I run two requests in while loop. By the way, I have to wait first post issue before the second post issue should be run...I know there is no await operator in k6. But I want to learn alternative ways. This while loop not working as I want. The response still returns "createdIsCompleted" == true
...ANSWER
Answered 2022-Feb-19 at 11:38By the way, I have to wait first post issue before the second post issue should be run...I know there is no await operator in k6
K6 currently has only blocking calls so each post will finish fully before the next one starts.
On the loop question you have two(three) problems:
createdISCompleted
is unitialized, so the while loop will never be run as it's notfalse
.- you have big
S
in the declaration but then you have smalls
in the while loop. - you have
break
at the end of the loop which means it will always exit after the first iteration.
QUESTION
Since MPI-3 comes with functionality for shared memory parallelism, and it seems to be perfectly matched for my application, I'm critically considering rewriting my hybrid OpemMP-MPI code into a pure MPI implementation.
In order to drive the last nail into the coffin, I decided to run a small program to test the latency of the OpenMP fork/join mechanism. Here's the code (written for Intel compiler):
...ANSWER
Answered 2022-Feb-14 at 14:47Here is my attempt at measuring fork-join overhead:
QUESTION
I am currently working in a insurance creation application. I have been facing a challenge in Capturing the Transaction ID. Below is a recording for example, Sample Start:2022-01-05 19:42:39 IST {"clientTransactionId":"2022010519423991400003554512008008822698"} Sample Start:2022-01-05 19:37:10 IST {"applicationTransactionId":"220105193709901533"}
The above recording shows the clientTransactionId and applicationTransactionId having the first 14 digits as timestamp and the rest as random numbers. I am looking for a function to capture these transaction IDs as I have never faced such challenge before (Combination of Timestamp and Random numbers). Please help.
...ANSWER
Answered 2022-Jan-30 at 13:23Just add JSON JMESPath Extractor as a child of the request which returns the above response and configure it like:
- Names of created variables: anything meaningful, i.e.
clientTransactionId
- JMESPath Expressions:
clientTransactionId
- Match No:
1
Once done you will be able to refer extracted value as ${clientTransactionId}
JMeter Variable where required
applicationTransactionId
can be handled in exactly the same manner
More information:
QUESTION
I was looking for the verbal explanations of different performance testing types and saw a new one called "breakpoint test". Its explanation seemed very similar to stress testing for me. So what is the difference, or is there any difference?
Stress Test: A verification on the system performance during extremely high load which is way above the peak load
Breakpoint Test: This test determines the point of system failure by gradually increasing the number of simulated concurrent users.
As far as I know, we increase the load gradually while performing stress test too. So what is the difference between this two type?
...ANSWER
Answered 2021-Oct-26 at 12:12From the workload point of view the approach is exactly the same, my understanding is:
- Stress test is about finding the first bottleneck, it's normally applied before deployment or even at early stages of development (see shift-left concept)
- Breakpoint (sometimes also called Capacity) test is about checking how much load the overall integrated environment can handle without issues and what is the slowest component which is a subject for scaling up/optimization.
More information:
QUESTION
I have database catalogs
with 14000 records, 100 columns and just 2 columns with type longtext. This query was really slow - more than 40 seconds
ANSWER
Answered 2022-Jan-09 at 20:02LONGTEXT
columns are stored separately from the rest of the columns. Extra disk fetches are used to load the value.
When you separated the LONGTEXT
columns out, did you then fetch the value? And that was slow, anyway?
Do you have INDEX(shop_id)
?
Did Laravel do something dumb like preload the entire table?
What will you do with the PDF? If you will only be writing them to a web page, it would be more efficient in multiple ways to store it as a file, then have HTML reference it. This would probably be done via .
QUESTION
I am running a load test with k6, which tests my service with 6 scenarios. I am running my service with docker-compose and I want to restart my service between each scenario. I couldn't find a built-in method for this so I added a function to restart the service and added some code to call that function at the start of each scenario ( I declared a counter for each scenario with initial value 0 and call the restart function only when the counter is 1). but the function is getting called per VU, not as I expected. Is there any solution for this?
Thanks in advance
...ANSWER
Answered 2021-Dec-21 at 19:09It sounds like you are not executing the scenarios in parallel (as I would expect from k6 scenarios), but rather in sequence.
There isn't anything builtin in k6, but why not have a simple shell script which performs the following steps in order:
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install hazelcast-simulator
:books: Looking for all possible installation ways? Check Installation section.
Download Simulator ZIP file from Hazelcast web site.
Extract the ZIP and go to the extracted directory unzip hazelcast-simulator-<version>-dist.zip cd hazelcast-simulator-<version>
Put Simulator on the PATH using simulator-wizard command ./bin/simulator-wizard --install
Verify installation simulator-wizard --help INFO 17:00:28 Hazelcast ..., Commit: ...
Congratulations! You've successfully installed Hazelcast Simulator on the Coordinator machine.
Hazelcast Simulator needs a Unix shell to run. Ensure that your local and remote machines are running under Unix, Linux or Mac OS. Hazelcast Simulator may work with Windows using a Unix-like environment such as Cygwin, but that is not officially supported at the moment. In order to run Simulator tests, you need to install it on a machine which you'll then use to execute all the Simulator commands. Simulator will orchestrate the rest. The local machine will be the one on which you will eventually execute the Coordinator to run your TestSuite. It is also the source to install Simulator on your remote machines.
Unpack the tar.gz or zip file to a folder that you prefer to be the home folder for Hazelcast Simulator. The file extracts with the name hazelcast-simulator-<version>. If your are updating Simulator you are done and can skip the following steps.
Configure the environment by either one of the following steps. Run the configuration wizard from the extracted folder. ./<extracted folder path>/bin/simulator-wizard --install OR Add the following lines to the file ~/.bashrc (for Unix/Linux) or to the file ~/.profile (for Mac OS). export SIMULATOR_HOME=<extracted folder path>/hazelcast-simulator-<version> PATH=$SIMULATOR_HOME/bin:$PATH
Open a new terminal to make your changes in ~/.bashrc or ~/.profile effective. Call the Simulator Wizard with the --help option to see if your installation was successful. simulator-wizard --help
Secondly, there's a group of properties with special meaning which name of ends with Prob (short for "probability"), such as getProb and putProb.
<probability> is a float number from 0 to 1 that sets a probability of execution of the method (see below). For example, probability of 0.1 means 10 % probability.
<methodName> corresponds to the name of a timestep method (a method annotated with @TimeStep annotation) in the test class configured with class property. For example, the com.hazelcast.simulator.tests.map.IntByteMapTest test contains following methods: @TimeStep public void put(ThreadState state) { map.put(state.randomKey(), state.randomValue()); } @TimeStep public void get(ThreadState state) { map.get(state.randomKey()); }
In the Quickstart, we executed the test on the local machine. This is usually useful for developing Simulator test itself, but very rarely for the real performance testing. In general, you want to execute the performance tests in the as real (= production) as possible environment and in order to do that, you'll most likely need to execute the tests on remote machines other than your local. Simulator can help with that. Not only it can automatically installs Simulator and Hazelcast itself, it e.g. provision of the machines directly in the cloud, install Java on those machines etc. This chapter goes in detail through all the possible means that Simulator offers in that regard.
For setups on remote machines, you only need:.
RSA key pair - a RSA public/private key pair to be used for passphrase-less SSH access to the remote machines.
Open ports - you may also need to configure the firewall between the Coordinator machine (typically your local) and the remote machines.
By static setup we mean a situation where you have a fixed list of given remote machines, e.g. your local machines or a test laboratory which are already up and running and you want to run the tests on them. Having installed Simulator locally, this section describes how to prepare Simulator for testing a Hazelcast cluster on these machines. For more information about how to customize the parameters of the connection, refer to the simulator.properties section.
Create a working directory for your Simulator TestSuite. Use the Simulator Wizard to create an example setup for you and change into the directory. simulator-wizard --createWorkDir myStaticTest --cloudProvider static cd myStaticTest
Create a agents.txt file and add the IP addresses of your remote machines to it, one address per line. $ cat agents.txt 192.0.1.1 192.0.1.2 You can also configure a different public and private IP address per machine. In such case, use <public_ip>,<private_ip> per line. In the below example, 192.0.1.1 is the public and 172.16.16.1 the private IP address). $ cat agents.txt 192.0.1.1,172.16.16.1 192.0.1.2,172.16.16.2 The public IP address will be used to connect to the remote machines via SSH. The private IP address will be used by Hazelcast to form a cluster.
The default username for SSH access used by Hazelcast Simulator is simulator. You can change this via the SIMULATOR_USER property in the simulator.properties file in your working folder. SIMULATOR_USER=preferredUserName Ensure that a user account with this name exists on all configured remote machines.
Ensure you have appended your public RSA key (id_rsa.pub) to the ~/.ssh/authorized_keys file on all remote machines in order to gain password-less SSH access. Simulator Wizard can create a script to copy the RSA key to all machines in your agents.txt file and you simply execute it: simulator-wizard --createSshCopyIdScript ./ssh-copy-id-script
You can check if the SSH connection for all remote machines work as expected using the following command. simulator-wizard --sshConnectionCheck
Install Simulator itself on the remote machines using following command: provisioner --install
Your static setup is ready. You can now execute the test by running the run script just like in Quickstart or in Run the test.
Because it is easy to mix versions and we can kill and start new members, we can easily create a rolling upgrade test. So imagine we want to verify if a Hazelcast 3.7 cluster can be upgraded to 3.8, we could start out with a 3.7 cluster, start a bunch of clients, start some tests on the clients that verify the cluster is behaving correctly and then one by one replace the 3.7 members by 3.8 members. Once all members have been upgraded we complete the test. This scenario is depicted in the following example:. Script should not cause a member to die; if it does, the test will be aborted with a failure. Scripts can be used for a lot of purposes. One could read out some data, modify internal behavior of the Hazelcast cluster. It can for example be used to deliberately cause problems that should not lead to dying members. Perhaps one could close some connections, consume most CPU cycles, use most of the memory so that the member is almost running into an OOME.
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page