I'm looking for ideas to help load test a PHP site my office wrote and
maintains. Peak usage for this site is during the fall when new students
arrive, and for the first time this past fall the traffic rendered the web
server completely unresponsive, almost as quickly as we could restart it.
The only major change to the site last year was to upgrade the database
server the site uses, but the curious thing is that it was the web server
rather than the database that became unresponsive. Other apps could
continue to use the database without any performance issues, and the
database server performance counters suggest it wasn't even breaking a
The other developer in our office spent some time profiling the site with
xdebug and found that an exec() call to netsh used on a couple pages seems
to take 2-4 seconds to complete. Unfortunately, those exec() calls are the
one function that we cannot test in our development environment. We are
considering some optimizations, but since load on the production server is
at a seasonal low we want to duplicate the problem so we can measure the
impact of any changes we make. We spent most of today hammering the site
with JMeter today in an attempt to reproduce the issue. While we were
easily able to slow the site to a crawl (some samples taking over 2 minutes
to complete), the server returned to normal as soon as the test concluded
and it never became totally unresponsive like it did this past fall.
We're both new to JMeter. I know a single test server may not be able to
create enough simultaneous requests to accurately simulate real traffic,
but I'm fairly confident that our tests involved far more (roughly-)
simultaneous connections than we were experiencing live. (The first test
used 20 threads; we gradually increased the threads for each test to 500
threads before we quit for the day.) The site is on a private subnet, so
distributed and/or cloud-based testing are probably not options.
The site is running PHP 5.3 on IIS/Windows Server 2003. The netsh calls are
to a DHCP server on a separate Windows server, and the database is SQL
Server 2008 (previously 2000).
So, any ideas we can try?