0

I need to measure a web application average bit rate consumption to see what is the recommended bandwidth needed for the end-user to connect and use the web application with no performance issues from the server.

My thinking is to use an end-user machine and make a stress test to the web application and load it with heavy web requests that a normal user can do in a day. Then, I can see the CPU/RAM utilization (with considering Network factor as well) on the server side at the time of the requests and make a decision whether the response from the server will serve with acceptable performance at the end-user.

I am still not sure how I can measure this because many factors will be in place. For example, I know the server will serve many users at any time and it will not be a fair calculation for all the user connected to get a fixed acceptable performance figure.

Any ideas?

  • 2
    I think you're going about it backward. Figure out what you think an average user should do, double it (or triple it), and then build your infrastructure to support that. – Paul Jan 29 '18 at 19:44
  • 2
    What kind of application is this? If you are just serving up pages, then the CPU/RAM utilization on the server should not be a big problem. If you are streaming video, then I suspect other factors will be the bottleneck. The type of traffic matters here. – Kyle A Jan 29 '18 at 21:04
  • 1
    My thinking is to use an end-user machine and make a stress test to the web application and load it with heavy web requests that a normal user can do in a day. There are two kinds of test to do here. The first from within the same network. And the second from outside (as a regular user will). The thing is that the real performance of the system is measured by the #1. Why? Because the topology of the network is different in both cases. Metrics from outside of the "LAN" are distorted by many factors beyond your control. – Laiv Jan 31 '18 at 13:26
  • 1
    On the other hand. You might be interested profiling. Gathering metrics of the runtimes during the load test. To perform a load test is almost a science by his own, so you will have to do a little research on that subject. For web applications, JMeter is a must :-) – Laiv Jan 31 '18 at 13:27
  • @Paul Yes, I was considering for the attributes that must affect any application. – Hussain Mahfoodh Feb 1 '18 at 9:30
3

In the past I have approached problems like this by minimizing latency either on the client side or on the server side. Knowing the size of the network pipe is one thing, but it usually something that you cannot modify. Usually, with a centralized server, it is the server that is the issue.

Although quite a bit is left to judgement, there are some approximations.

    Wide area network 100s of millisec
    Disk access 10 milli sec
    Ssd disk access .5 milli sec
    Local area network, .5 mill sec
    Local memory 100 nano sec
    Processor Cache  100 pico sec

So consider what basic steps you web app has to do and tally the up. See how close you are - either you have forgotten something ( most likely), or you need to modify your approximations.

For example, there was a web application that I was working on that most requests took a bit more than 70 ms to respond. I traced this to 7 database operations. A Proposal to increase performance was to cache more data locally (we were hitting a couple of static tables that could be cached locally), bringing the latency down to bit more than 50 ms. Furthermore, by going with SSDs, we could potentially bring it down a bit more 5 ms. Of, course lower latency means that the server can handle a higher peak load.

|improve this answer|||||
  • 1
    I don't see any downvotes, but it's unclear to me what is the purpose of these numbers. Are they ideal numbers, reasonable norms, or something else? Do they correspond to any actual loads that might be encountered, or are they merely theoretical? Are they one-size-fits-all, or can you tailor them to specific situations? – Robert Harvey Jan 31 '18 at 2:07
  • 1
    @harvey I guess I am a bit off the mark. Usually, when I have considered performace, I approach it from a respose time as opposed to a network bandwidth issue. These are just approixmate ( order of nagnitude ) estimates. For example trying to ubderstand why some application is taking longer on certain requsts , ie, taking 70 millisec. I traced this to 7 database reads. Now hiw much faster should it be if we used ssds in a Local area network? Another question is hiw much faster can we make it if we eliminate a database access. Also, you can consider how much time for network access. – Robert Baron Jan 31 '18 at 2:22
  • @Baron I think you should edit your answer to include some of the information from your comment. Your answer does not make it clear that you are talking about estimating latency values. Also, the OP nevery really mentions how they are measuring performance, so latency may not be what they are looking at. – Kyle A Jan 31 '18 at 15:39
1

You may have a look at this or the ISO/IEC 14756:1999-11 (if you got a university near to you, they might could get if for you).

What you should do first is to distinguish between peak performance and average performance, both measured with an increasing number of users. You should not do a measurement based on one user. Reason for this is the application behaviour - caching of data resp. reading from disc/database where the footprint will change over the time and the amount of users. (Simplified - think of swapping performance behaviour).

For both cases (peak and average), you should have one or more physical test-client machine running with a typcial workload pattern against the server. Each of those physical client machines would manage one or more simulated users.

  • For peak-performance, each simulated user would perform action after action without any thinking time on the client side.

  • For average performance (which is more true), the simulated user would wait for a response of the previous action before he thinks, types and sends an answer. If you run several of those clients in parallel, with a statistical distribution of the various requests and timings and sufficient run time of the complete test, you will get good results.

Depending on your budget, there are many professional testing tools; however you could simply try JMeter, see here for more information:

Do not hesistate to ask again - done this for many years.

|improve this answer|||||
  • I have followed both links (year ago) and they were really insightful. Overall when you have to take forward the loading test plan by the first time. – Laiv Jan 31 '18 at 21:20
  • @walter I will definitely give a look for the ISO/IEC standard. Very useful answer thanks. – Hussain Mahfoodh Feb 1 '18 at 9:34
0

Found these articles which helps giving ideas on both client and server sides.

Client side: https://www.technibble.com/estimate-bandwidth-needs-customers/

Server side: https://www.whoishostingthis.com/blog/2010/04/14/bandwidth-needed/

The bottom line is exact bandwidth calculation is very difficult to calculate, since there are many variable attributes to consider specially from the networking side.

Overall professional judgement is key based on testing and averaging out the result by embedding your most heavy impact attributes that must effect the performance of your application.

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.