Skip to content

autoware_component_monitor#

The autoware_component_monitor package allows monitoring system usage of component containers. The composable node inside the package is attached to a component container, and it publishes CPU and memory usage of the container.

Inputs / Outputs#

Input#

None.

Output#

Name Type Description
~/component_system_usage autoware_internal_msgs::msg::ResourceUsageReport CPU, Memory usage etc.

Parameters#

Core Parameters#

Name Type Description Default Range
publish_rate float Publish rate in Hz 5 N/A

How to use#

Add it as a composable node in your launch file:

<launch>
  <group>
    <push-ros-namespace namespace="your_namespace"/>
    ...

    <load_composable_node target="$(var container_name)">
      <composable_node pkg="autoware_component_monitor"
                       plugin="autoware::component_monitor::ComponentMonitor"
                       name="component_monitor">
        <param from="$(find-pkg-share autoware_component_monitor)/config/component_monitor.param.yaml"/>
      </composable_node>
    </load_composable_node>

    ...
  </group>
</launch>

Quick testing#

You can test the package by running the following command:

ros2 component load <container_name> autoware_component_monitor autoware::component_monitor::ComponentMonitor -p publish_rate:=10.0 --node-namespace <namespace>

# Example usage
ros2 component load /pointcloud_container autoware_component_monitor autoware::component_monitor::ComponentMonitor -p publish_rate:=10.0 --node-namespace /pointcloud_container

How it works#

The package uses the top command under the hood. top -b -n 1 -E k -p PID command is run at 10 Hz to get the system usage of the process.

  • -b activates the batch mode. By default, top doesn't exit and prints to stdout periodically. Batch mode allows exiting the program.
  • -n number of times should top prints the system usage in batch mode.
  • -p specifies the PID of the process to monitor.
  • -E k changes the memory unit in the summary section to KiB.

Here is a sample output:

top - 13:57:26 up  3:14,  1 user,  load average: 1,09, 1,10, 1,04
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0,0 us,  0,8 sy,  0,0 ni, 99,2 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem : 65532208 total, 35117428 free, 17669824 used, 12744956 buff/cache
KiB Swap: 39062524 total, 39062524 free,        0 used. 45520816 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   3352 meb       20   0 2905940   1,2g  39292 S   0,0   2,0  23:24.01 awesome

We get 5th, 8th fields from the last line, which are RES, %CPU respectively.