http://www.perlmonks.org?node_id=836524

ishadalwadi has asked for the wisdom of the Perl Monks concerning the following question:

Hi, This is my very first post. I want to know if the Parallel::ForkManager will be useful in performance testing the Server? and how?

Basically in performance testing, i want to find out how my server will behave under different loads. like,

- what will be the response time when more than 20 users try to access the server application at the same time?
- what will be the response time when more than 20 users try to access the server application in concurrent manner?
- Generating report of the statistics. etc.

Can anyone help me on this? Please provide script if it is already available. Also please suggest any modules if available.
  • Comment on Performance testing using Parallel::ForkManager?

Replies are listed 'Best First'.
Re: Performance testing using Parallel::ForkManager?
by almut (Canon) on Apr 23, 2010 at 13:54 UTC

    Before reinventing the wheel, you might want to check if ab doesn't already serve your needs.

Re: Performance testing using Parallel::ForkManager?
by zwon (Abbot) on Apr 23, 2010 at 18:39 UTC

    If this is a web application, then yes, Parallel::ForkManager may be useful for testing. As alternative have a look on AnyEvent and particularly on AnyEvent::HTTP, we're using it for load testing of our product, it allows us to simulate several thousands of simultaneous sessions.

      Actually, this is not about web application testing. It is about client-server application which runs as windows application. Can i still use the AnyEvent::HTTP as internally the request to the server is made using the http requests?

        If you're using HTTP to access server then generally yes you can use AnyEvent::HTTP.

Re: Performance testing using Parallel::ForkManager?
by technojosh (Priest) on Apr 23, 2010 at 15:51 UTC
    Testing server response time is not something you should put much time in hand-rolling yourself. There are a number of utilities that do this, not all in perl. I've had decent success with Apache JMeter, but that doesn't mean you shouldn't research other tools.

    I'm not here to plug jmeter, but it's worked great for me in monitoring response time under load.

    I'd be very curious if other monks have successfully handled this type of issue purely with perl, since I've always wanted to but never *needed* to (due to the presence of existing utilities.)

      Actually, this is not about web application testing. It is about client-server application which runs as windows application. As per my knowledge the JMeter only works for Web Application. Am i correct? -Isha

        Using fork (even via Parallel::ForkManager) on Windows, where fork is emulated, doesn't make much sense.

        I use this for stress testing my local servers. By default it will run 20 clients, each will make 1000 (serial) connections and exchange 1000 conversations. Adapting it to your needs should be straight forward.

        #! perl -slw use strict; use threads; use IO::Socket; our $W //= 20; my @t = map{ async { for( 1 .. rand 1000 ) { my $s = new IO::Socket::INET( 'localhost:12345' ) or die "Failed to connect to server: $!"; for( 1 .. rand 1000 ) { print $s "Message $_"; scalar <$s>; } close $s; } }; } 1 .. $W; $_->join for @t;

        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.