4 Replies Latest reply on Apr 10, 2017 8:09 AM by Alex Aitken

    Tabjolt maximum users

    Alex Aitken

      I would like to really test my 4 server cluster but I am hitting a java memory issue going over 1000 concurrent users. I have a VM server to run Tabjolt on with 4GB of memory allocated on it.

      Has anyone run larger amounts of users (2000-5000) and how much memory would 64bit java need to achieve this. Do I need to change the jmeter.bat Xms setting to achieve this. Whenever I do I get out of memory errors.

        • 1. Re: Tabjolt maximum users
          Russell Christopher

          Hey Alex -


          It's really rare to test with so many users. Don't get me wrong here, but 1000 concurrent users represents at least a 10K user community (at the very higest end of concurrency rates) . With the concurrency rates we typically see, more like 70-100K users.  Runnning 2K concurrent users would be 500-per on each of your (8 core?) machines.. You'd be be putting somewhere between 2x-3x the load on them you should. You're probably overdoing it here a bit, just saying


          Typically, a single load generator (regardless of the tool you use and what software you're banging on) cannot drive "linear load" (I just made that up) indefinitely  - you'll need to stand up additional load generators. While you could increase the amount of RAM given to the VM itself and THEN increase the amount of RAM alotted to the JVM, you're still not going to get good, meaningful numbers - keep in mind that TabJolt itself is "only software" and can only process a certain number of concurrent numbers quickly. If you run the injector on a low-end machine, your results will actually "look bad", and it'll be the low-end machine's fault, not Tableau - it won't be able to process incoming results fast enough (especially failures) and so your TPS will be off.


          The basic rule of thumb that I've heard kicked around (no one has every proved it to me) is to use a distnct copy of TabJolt for every 250+ users. What I personally do (I do most of my testing on the cloud) is to use a low-end machine (2-core) for lower numbers of concurrent users), and then for anything over ~150-200 I switch to a 4 core box with much more RAM and give TabJolt more juice in the JVM.


          Again, if you're considering running  2K concurrent users as sort of a fun mad science project  - have at it. But at 1000 users you're already going further than most people bother with.

          1 of 1 people found this helpful
          • 2. Re: Tabjolt maximum users
            Alex Aitken

            Thank you Russell, that is very helpful.


            Do you know if there is any easy way to purge failed tests from the postgres?


            I read somewhere that there is possibly a purge option for the GO command but couldn't find any further instructions for it.


            @Option(shortName={"n"}, description="whether or not to purge.", defaultValue={"false"})

            TabJolt Command Line Params


            • 3. Re: Tabjolt maximum users
              Russell Christopher

              I acutally don't know what --n does. Never tried it! But I'd guess you have to know if the result is going to fail ahead of time for it to be useful, you know?


              Cleanup in the postgres database is kinf of a pain in the ***, actually


              The high-level info you record for each test goes in a table called test_runs, and then additional data (child records) go in jmeter_data and counter_data. You must delete all the rows in those two child tables associated with the one in test_runs before you can get rid of the test_runs record


              If you use the --r ("description") parameter wisely, you can make your life a bit easier. When I'm just playing around, I label my tests something like --r=SMOKE, so I know this is a smoke test I can blow away later...Then, every couple of weeks I'll do this in pgadmin pointed at the PerfResults database:


              DELETE from jmeter_data where test_run_id IN (Select id from test_runs WHERE description = 'SMOKE');
              DELETE from counter_data where test_run_id IN (Select id from test_runs WHERE description = 'SMOKE');
              DELETE from test_runs where description = 'SMOKE';


              You have to be pretty careful with this cause you could blow away "good" data. I typically only execute this once I've mad a backup of the database.


              edit: Was typing blind above and called the mistakenly caled test_run_id "test_run_in".  Corrected.

              1 of 1 people found this helpful
              • 4. Re: Tabjolt maximum users
                Alex Aitken

                Perfect.Thanks a lot for that.