SoFunction
Updated on 2025-03-04

Detailed explanation of the method of implementing task manager performance network monitoring data in Java

introduction

In modern operating systems, task managers are a very important tool to monitor and manage the operating status of computers, including CPU usage, memory footprint, disk I/O, and network traffic. For developers and system administrators, understanding this performance data can help optimize application and system performance. This article will explain how to write a simple program in Java to monitor network performance data and show how to obtain and display this information.

1. Background knowledge

In Java, monitoring network performance data usually requires relying on the operating system's native API or third-party libraries. The Java standard library itself does not directly provide tools to obtain network interface statistics. However, network data can be parsed by executing system commands (such as ifconfig or ip -s link in Linux, netstat under Windows), or cross-platform third-party libraries such as Oshi.

Oshi is an open source Java library for obtaining operating system and hardware information, supporting Windows, Linux and macOS. It provides a simple API to get the usage of hardware resources such as CPU, memory, disk and network.

2. Preparation

Before you start writing code, you need to make sure that your development environment already contains the Oshi library. Dependencies can be managed through Maven or Gradle.

1. Maven dependencies

Add the following dependencies to your file:

<dependency>
    <groupId></groupId>
    <artifactId>oshi-core</artifactId>
    <version>6.2.3</version>
</dependency>

2. Gradle dependencies

In yourAdd the following dependencies to the file:

groovyCopy the code

implementation ':oshi-core:6.2.3'

3. Code implementation

Below is a complete Java program example showing how to use the Oshi library to obtain and display traffic data from a network interface.

import ;
import ;
import ;
import ;
import ;
 
import ;
import ;
 
public class NetworkMonitor {
 
    public static void main(String[] args) throws InterruptedException {
        // Get system information        SystemInfo systemInfo = new SystemInfo();
        HardwareAbstractionLayer hal = ();
 
        // Get all network interfaces        List&lt;NetworkIF&gt; networkIFs = ();
 
        // Print initial network interface information        printNetworkInterfaces(networkIFs);
 
        // Sleep for a period of time to calculate traffic changes        (5);
 
        // Get network interface information again to calculate traffic        List&lt;NetworkIF&gt; networkIFsAfterSleep = ();
 
        // Print flow changes        printNetworkTraffic(networkIFs, networkIFsAfterSleep);
    }
 
    private static void printNetworkInterfaces(List&lt;NetworkIF&gt; networkIFs) {
        ("Network Interfaces:");
        for (NetworkIF networkIF : networkIFs) {
            ("Name: " + ());
            ("Description: " + ());
            ("MAC Address: " + ());
            ("MTU: " + ());
            ("Up: " + ());
            ("------------------------");
        }
        ();
    }
 
    private static void printNetworkTraffic(List&lt;NetworkIF&gt; networkIFsBefore, List&lt;NetworkIF&gt; networkIFsAfter) {
        ("Network Traffic (bytes) over 5 seconds:");
        for (NetworkIF networkIFBefore : networkIFsBefore) {
            String ifName = ();
            for (NetworkIF networkIFAfter : networkIFsAfter) {
                if ((())) {
                    long rxBytesBefore = ();
                    long txBytesBefore = ();
                    long rxBytesAfter = ();
                    long txBytesAfter = ();
 
                    long rxRate = rxBytesAfter - rxBytesBefore;
                    long txRate = txBytesAfter - txBytesBefore;
 
                    ("Interface: " + ifName);
                    ("Received Rate: " + rxRate + " bytes/sec");
                    ("Transmitted Rate: " + txRate + " bytes/sec");
                    ("------------------------");
                }
            }
        }
    }
}

4. Detailed explanation of the code

  • Obtain system information

SystemInfo systemInfo = new SystemInfo();
HardwareAbstractionLayer hal = ();
  • SystemInfoClass is used to obtain information about the entire system.HardwareAbstractionLayerThe class provides an interface to access hardware resources.

  • Get the network interface list

List<NetworkIF> networkIFs = ();
  • getNetworkIFsMethod returns a list of all network interfaces.

  • Print initial network interface information

printNetworkInterfaces(networkIFs);
  • printNetworkInterfacesThe method traverses the network interface list and prints the name, description, MAC address, MTU, and status of each interface.

  • Calculate traffic changes

(5);
List<NetworkIF> networkIFsAfterSleep = ();
  • The program sleeps for 5 seconds, and then obtains network interface information again to calculate traffic changes.

  • Print flow changes

printNetworkTraffic(networkIFs, networkIFsAfterSleep);
  • printNetworkTrafficThe method calculates the reception and transmission rates of each network interface and prints the results.

V. Operation results

After running the program, you will see an output similar to the following:

Network Interfaces:
Name: eth0
Description: Ethernet interface
MAC Address: 00:1a:2b:3c:4d:5e
MTU: 1500
Up: true
------------------------
...
(Other network interface information)
...
 
Network Traffic (bytes) over 5 seconds:
Interface: eth0
Received Rate: 1234567 bytes/sec
Transmitted Rate: 7654321 bytes/sec
------------------------
...
(Traffic information for other network interfaces)
...

6. Summary

This article describes how to use Java and Oshi libraries to implement a simple network performance monitoring tool. Through this program, we can obtain the name, description, MAC address, MTU and status of the network interface, and calculate the reception and transmission rates within the specified time interval. This is a very useful tool for developers and system administrators to help monitor and optimize network performance.

The Oshi library provides a cross-platform solution, making it easier and more efficient to obtain system hardware resource information in Java. By extending the program, more monitoring functions can be added, such as CPU usage, memory footprint, disk I/O, etc., to build a complete system performance monitoring tool.

The above is a detailed explanation of the method of Java implementing the performance network monitoring data of the task manager. For more information about Java monitoring network performance data, please pay attention to my other related articles!