Some comments:

>>to recreate "actual load" from a very busy system.
>Actual load is usually concurrent. In most cases you dont get these values
>from a log file (and its important that the same session use the same
>thread).

Right. We desire session recreation. From a "functional" perspective
(recreating actual load), we find that our production servers can get a lot
of "bot crawls". Each bot request uses its own session. (5000 requests=5000
sessions). These "smal sessions" add overhead when those sessions expire. If
all 5000 requests came from the same session, we would not see the "session
expiration overhead".

Technically I've read that Jmeter basically tries to 'recreate sessions' by
lumping together requests from the same IP address, but have not confirmed
how the access log sampler simulates these sessions.

Ideally the access log sampler would work as follows:
-recognize 'session id' to  the access log
-access log sampler groups requests from the same sessions into the same
session. (it can't re-use the exact same session ID as the servlet container
generates it automatically. ).


>If you can generate all POST and GET data, you could use HTTP Raw Sampler
>(custom sampler, not shipped with JMeter). It allows you have full control
Where can I find the raw sampler.

Addendum
============================
fwiw, here's (pretty trivial) example code to add the post parameter to the
tomcat access log. It adds overhead, mostly when the access log valve prints
out the parameters.

A. Access log format to get a request attribute, here called "rpf params".
e.g.:
'%{rpfParams}r'

The tomcat access log valve will call
request.getAttribute("rpfParams").toString()

B. Add a filter that adds sets a 'parameter wrapper' as a request attribute.
   public void doFilter(ServletRequest pRequest, ServletResponse pResponse,
FilterChain pChain) throws IOException, ServletException
   {
      pRequest.setAttribute("rpfParams",new
RecordParamsFilter.ParameterWrapper(pRequest.getParameterMap()));
      pChain.doFilter(pRequest, pResponse);
   }

   /**
    * Class to wrap  parameter map. Main "work" occurs in the "toString".
    *
    * Exists to allow printing of both "get" and "post" parameters.
    */
   public class ParameterWrapper
   {
      Map fMap;

      public ParameterWrapper(Map pMap)
      {
         fMap = pMap;
      }

      @Override
      public String toString()
      {
         StringBuffer sb = new StringBuffer();
         for (Iterator it = fMap.entrySet().iterator(); it.hasNext(); )
         {
            Map.Entry entry = (Map.Entry) it.next();
            String[] values = (String[]) entry.getValue();
            for (String value : values)
            {
               sb.append(entry.getKey()).append("=");
               sb.append(value);
            }
            if (it.hasNext())
            {
               sb.append("&");
            }
         }
         return sb.toString();
      }
   }

Reply via email to