Monday, August 10, 2015

Linux Performance Observability Tools

I am learning about Linux Performance Tools and I found Brendan Gregg's talks on Linux Performance are very interesting.

There are so many performance tools for Linux. Brendan recommends to follow a performance analysis methodology to analyze system or application performance. These methodologies can guide us to choose and use these performance tools effectively.

Linux Performance Observability Tools

There are different types of command line tools available in Linux. In this blog post, I'm going to focus on Linux Performance Observability Tools. I highly recommend to watch Brendan's talk at Velocity 2015 on Linux Performance Tools and I took details about following tools from his presentation and his website.
Linux Performance Observability Tools
Taken from Brendan Gregg's Website:

Here are some examples of using Linux Performance Observability Tools in Ubuntu.  I tested each of these commands in a Ubuntu Trusty Vagrant Box

Basic Observability Tools

# Print load averages

# System and per-process interval summary. 
# It's important to note that the top can miss short-lived processes. 
# See 30 Linux TOP Command Examples With Screenshots

# htop is an interactive process viewer and you need to install it.
sudo apt-get install htop

# Process status listing
ps -ef
# ASCII art forest
ps -ef f

# Virtual Memory Statistics
# Show stats in Megabytes and update every second
vmstat -SM 1

# Block I/O (disk) stats. The iostat tool is in 'sysstat' package.
sudo apt-get install sysstat
# Display extended statistics in megabytes per seconds. 
# This also shows device utilization and omits the inactive devices
# during the sample period.
iostat -xmdz 1

# Report multi-processor statistics.
# per-CPU stats
mpstat -P ALL 1

# Main memory usage in megabytes.
free -m

Intermediate Observability Tools

# Trace system calls and signals. This is not recommended in production.
# Trace system calls in a process. 
# Prints the time (us) since epoch (-ttt) and syscall time (-T).
# Need to use sudo to attach to the process.
sudo strace -tttT -p 3344

# Sniff network packets for post analysis. 
# Using sudo to get permissions to capture packets on device
sudo tcpdump -i eth0 -w /tmp/out.tcpdump
# Read the dump
sudo tcpdump -nr /tmp/out.tcpdump

# Print network connections. See 10 basic examples of linux netstat command
# Network statistics by protocol
netstat -s
# Show both listening and not-listening sockets
netstat -a
# Show listening sockets
netstat -l
# Show the PID (-p) and the name of the program for TCP sockets (-t)
netstat -tp
# Kernel IP routing table
netstat -r
# Kernel Interface table
netstat -i

# Print network traffic statistics. You need to install 'nicstat' package.
sudo apt-get install nicstat

# Process Stats
# Process Stats by thread
pidstat -t
# Process Stats by disk I/O
pidstat -d

# Show swap usage
swapon -s
# Show swap usage in verbose mode
swapon -v

# List open file. Can be used as a debug tool
# Show active network connections

# System Activity Reporter. 
# Before using sar, we need to enable data collection.
# See:
# Simple steps to install and configure sysstat/sar on Ubuntu/Debian server
# 10 Useful Sar (Sysstat) Examples for UNIX / Linux Performance Monitoring
sar -q
Linux Performance Observability: sar
Taken from Brendan Gregg's Website:

Advanced Observability Tools

# Socket Statistics. This is similar to netstat,
# but it can display more TCP and state informations than other tools.
# Socket Statistics. Show timer, processes and memory
ss -mop
# Show internal TCP information
ss -i

# Interactive Colorful IP LAN Monitor
sudo apt-get install iptraf
sudo iptraf

# Monitor I/O. A top-like tool
sudo apt-get install iotop
sudo iotop

# Kernel slab allocator memory usage
sudo slabtop

# Page cache statistics. 
# This tools is available in GitHub:
# and we need to use Go to build it.
# You can also download a binary from GitHub. Refer README for more information.
./pcstat testfile

# perf_events: Linux profiling with performance counters.
# This tool needs to be installed.
# I used perf command in previous blog post about Java CPU Flame Graphs. 
# See Brendan's Linux Perf Examples.
# Perf Tutorial is also good resource to learn about perf.
sudo apt-get install linux-tools-common linux-tools-generic
# List perf event
sudo perf list

# tiptop: reads hardware performance counters
# and displays statistics about running processes, such as IPC, or cache misses. 
# This tool was not available in Ubuntu 14.04 package repositories.
# Therefore I tried it on Ubuntu 15.04
sudo apt-get install tiptop

# The rdmsr command reads a Model-Specific Register
# (MSR) value from the specified address.
# This tools is available from "msr-tools" package.
sudo apt-get install msr-tools
# Brendan has developed some Model Specific Register (MSR) 
# tools for Xen guests (eg, AWS EC2).
# Reading CPU temperature:
sudo rdmsr -p1 -f 23:16 -d 0x1a2


This blog post lists some Linux Performance Observability Tools. I have also linked man pages and some examples of using the tools.

As I mentioned, Brendan's presentations have more details on these tools and I just wanted to list those in one page for my own reference.
Post a Comment