Discussions

Performance and scalability: Varying Performance for different windows users

  1. Hi all,

    We have a J2EE application build using struts, EJB and oracle as database.

    This is behvaing strange. When X user logs into windows machine and access the application, performance measures are different when user Y logs into the same windows machine.

    Could anyone please help me to solve this problem?

    Regards,
    Viral

    Threaded Messages (3)

  2. Difference between users[ Go to top ]

    What is the difference between user X and user Y?

    Are you putting anything in the session?

    Will users access different EJB backends?

    What type of EJB's are you using?
  3. Difference between users[ Go to top ]

    Both are windows users.

    There is no difference from the application perspective. Application is not having any different logic for different users.

    Yes, we are keeping UserProfile object in session. But this doesnot have anything to do with windows log-in user.

    No, all users access same backend.

    We are stateless session beans.

    Performance is varying bewteen different windows logged-in users.

    Thanks for the reply.
  4. Difference between users[ Go to top ]

    Still, if the only difference is the user that logs on at the Windows test client there must be something in the user profile that causes the variation in performance. How dow you measure the performance: reponse time in a browser (assuming a web-client), logging in the application server?

    A simple means to measure the performance of J2EE web apps is to implement a performance filter: something that creates a timestamp when a request is preocessed and calculates the number of milliseconds that pass before the response comes back from components further down the chain:

    [scratch code, beware of typos]

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
    long start = System.currentTimeMillis();
    chain.doFilter(request, response);
    System.out.println("Time elapsed for request: " + (System.currentTimeMillis() - start));
    }

    Map this filter on the URLs that you want to track and you will see what is happening on the application server, isolated from the client. This technique can be useful to determine where the problem really is: on the server or the client side (or the network in between).