How to Measure Network Throughput Using JPerf

Updated on January 16, 2018
skear profile image

Sam works as a Network Analyst for an algorithmic trading firm. He obtained his Bachelors Degree in Information Technology from UMKC.

JPerf is a graphical front end for the popular network testing tool Iperf. Using JPerf you can quickly test a WAN or LAN connection to determine the maximum network throughput. The test results are automatically graphed and presented in a format that is easy to read. JPerf can also be used to detect packet loss, delay, jitter, and other common network problems.

JPerf provides many benefits over Iperf which is a command line only application. Besides being reliable and easy to use JPerf is completely free. The utility is fully open source and runs on both Windows or Linux systems.

Whether you're trying to diagnose a problem in your home network or troubleshoot the performance of a WAN link JPerf can handle the task.

Installing JPerf on Windows

JPerf requires that Java version 1.5 or newer is installed before it will run. You can visit Java.com to download the latest version or verify if it is correctly installed on your computer.

To get JPerf running you will need to download the jperf-2.0.2.zip file from the JPerf Google code page.

There isn't an installer so simply extract the contents of the zip file to a location on your computer such as C:\JPerf.

To launch the JPerf utility run jperf.bat.


Installing JPerf on Linux

On Linux the Java executable must be in your system path, to verify this type java -version in a shell. You should see output similar to what's below.

#java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

If you don't see this make sure Java is installed and is within your path.

Next download the JPerf zip file, the same archive is used for Windows or Linux. The folder can be extracted to any location, for example /usr/bin/jperf.

Within the jperf directory you downloaded is a script called jperf.sh. This script must be made executable by running chmod u+x jperf.sh from within the JPerf directory.

Finally, to launch the application run ./jperf.sh.


Setting up a JPerf Server

JPerf is designed to run as a client/server application. To run a test you will need to set up a JPerf server on your network. Then you can run a JPerf client from another location on the network which will connect to the remote server.

To start the JPerf server select the radio button labeled server then click Run IPerf. By default JPerf runs in TCP mode and listens on port 5001.

JPerf running in server mode
JPerf running in server mode

Connecting a client to the server

To connect to the JPerf server to run a test you'll need to first select the client radio button. In the server address field type in the IP address of the computer running the JPerf server. To begin the test click on run iPerf in the upper right hand corner of the app.

By default JPerf will run a 10 second TCP test using 1 stream. While the test is running the graph will update in real time to reflect the results.

There are several options that can be adjusted to modify the parameters of the test.

Application layer options

  • Transmit - Run the test for a specified number of seconds, or until a certain amount of bytes have been transferred.
  • Output Format - Test results can be changed to display bits, bytes, kbytes, etc.
  • Report Interval - This adjusts how often the graph results are updated.

Transport layer options

There are several TCP options that can be modified such as buffer length, window size, and MSS. JPerf can also function in UDP mode, although the server must be operating in UDP mode in order for this test to work.

JPerf in Client Mode
JPerf in Client Mode

JPerf Tips and Tricks

Below are a few useful tips for improving your JPerf results.

  1. Use Parallel streams - The bandwidth of a single TCP session is limited by several factors. By using parallel streams you can easily saturate a very high bandwidth connection. In the JPerf client settings you can specify the number of streams to use. I've found 10 to be a good number.
  2. Run a Bi-Directional Test - By default JPerf transmits data from the client to the server. By selecting the dual testing mode under application layer options JPerf will send data in both directions at the same time.
  3. Use a representative file - JPerf has a cool ability that allows you to select a file to be transmitted to the server during the test. This function allows you to simulate a real world data transfer across your network in a controlled manner.
  4. Use JPerf to create iPerf commands - Since JPerf uses iPerf as a back end to run all of the tests you can use JPerf to help you build useful iPerf commands. Select the test options you want using the GUI and then copy the command it created from the box at the top of the application.

Expanding Your Knowledge

Now that you are familiar with JPerf I would recommend learning more about iPerf and how to run it from the command line. IPerf is designed for Linux but you can compile IPerf for Windows as well.

JPerf and Iperf tests can be run cross platform, eg: Linux to Windows or vice versa which makes it a highly useful tool for network testing. I've found both of these tools to be indispensable for diagnosing and troubleshooting network problems.

Questions & Answers

    Comments

      0 of 8192 characters used
      Post Comment

      • profile image

        sukanya 

        2 years ago

        Hello skear ,

        I am using Jperf for testing my NTP server throughput. For sending NTP packet(48 bytes) i am using the " representative" file in .bin format. I just written 48 bytes in the file and i am able to send the packet through gui.

        When i observe the packet in wireshark, after IP and UDP header its appending 38 bytes and then remaining data it is taking from the ".bin file".

        From where this 38 bytes are including? Is i cannot send 48 bytes of data after UDP header?

        Please suggest some solution for the above issue.

        Thanks in advance.

      • skear profile imageAUTHOR

        Sam Kear 

        5 years ago from Kansas City

        Hi Damian, Thanks for the feedback!

        TCP sessions are often affected by what is called the long fat pipe problem and multiple streams are an easy way to overcome this issue.

        There are two main factors that effect TCP throughput. The window size, and the latency of the path. To calculate the maximum possible throughput of a TCP session you can take the window size (in bits) and divide it by the latency of the network path.

        For example, if the TCP window size is 32KB and the latency of the circuit is 5ms the maximum throughput of the session would be 51Mbps (32,000 * 8) / .005).

        Jperf/iPerf also you to manually set a window size which can also help in testing. You can try using a large window size to improve the performance of a single session.

        If you know the bandwidth of a line, and the latency you can calculate the optimal TCP window size using the following formula.

        Bandwidth (in Bits per second) * Round trip latency (in seconds) = Window size in bits

        Then multiply this calculated window size by 8 to convert it back to bytes.

        So for example if the circuit is 10Gbps and the round trip latency is 1ms the optimal window size would be 1.25Mb. (10,000,000,000 *.001 = 10,000,000 bits / 8 = 1,2500,000 Kb)

        Other factors come into play such as window scaling, slow start, lost packets, etc.

        Hope this helps!

      • profile image

        Damian 

        5 years ago

        Great write up, this helped me!

        I have one question about the parallel streams, why do large bandwidth pipes require multiple streams to saturate the pipe?

      • profile image

        sandeep 

        6 years ago

        Tnx :)

      working

      This website uses cookies

      As a user in the EEA, your approval is needed on a few things. To provide a better website experience, turbofuture.com uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

      For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: https://turbofuture.com/privacy-policy#gdpr

      Show Details
      Necessary
      HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
      LoginThis is necessary to sign in to the HubPages Service.
      Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
      AkismetThis is used to detect comment spam. (Privacy Policy)
      HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
      HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
      Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
      CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
      Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the googleapis.com or gstatic.com domains, for performance and efficiency reasons. (Privacy Policy)
      Features
      Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
      Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
      Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
      Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
      Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
      VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
      PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
      Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
      MavenThis supports the Maven widget and search functionality. (Privacy Policy)
      Marketing
      Google AdSenseThis is an ad network. (Privacy Policy)
      Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
      Index ExchangeThis is an ad network. (Privacy Policy)
      SovrnThis is an ad network. (Privacy Policy)
      Facebook AdsThis is an ad network. (Privacy Policy)
      Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
      AppNexusThis is an ad network. (Privacy Policy)
      OpenxThis is an ad network. (Privacy Policy)
      Rubicon ProjectThis is an ad network. (Privacy Policy)
      TripleLiftThis is an ad network. (Privacy Policy)
      Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
      Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
      Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
      Statistics
      Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
      ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
      Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)