Linux Command - top
The linux top command shows running processes and stats in real-time. This doc is mostly based on top from procps-ng 4.0.2.
Start top:
top
Don’t show zombie or idle processes:
top -i
Sort by field:
top -o VIRT
top -o RES
top -o SHR
top -o %CPU
top -o %MEM
top -o COMMAND
Only processes with these pids:
top -p 1257,1258
top -p $( pgrep -d ',' gnome )
Individual threads of a process:
top -Hp 1257
Only processes owned by this user:
top -u user1
Batch mode, repeat once:
top -b -n 1
| h | help |
| ? | help |
| q | exit |
| ctrl-c | exit |
- arrow keys to scroll
- memory: physical, swap, virtual
- 4096 - typical page
Memory and Meory Quadrants
memory quadrant diagram (private/shared - Anonymous / File-backed)
Private | Shared
1 | 2
Anonymous . stack |
. malloc() |
. brk()/sbrk() | . POSIX shm*
. mmap(PRIVATE, ANON) | . mmap(SHARED, ANON)
-----------------------+----------------------
. mmap(PRIVATE, fd) | . mmap(SHARED, fd)
File-backed . pgms/shared libs |
3 | 4
- %MEM - simply RES divided by total physical memory
- CODE - the `pgms’ portion of quadrant 3
- DATA - the entire quadrant 1 portion of VIRT plus all explicit mmap file-backed pages of quadrant 3
- RES - anything occupying physical memory which, beginning with
- Linux-4.5, is the sum of the following three fields:
- RSan - quadrant 1 pages, which include any former quadrant 3 pages if modified
- RSfd - quadrant 3 and quadrant 4 pages
- RSsh - quadrant 2 pages
- RSlk - subset of RES which cannot be swapped out (any quadrant)
- SHR - subset of RES (excludes 1, includes all 2 & 4, some 3)
- SWAP - potentially any quadrant except 4
- USED - simply the sum of RES and SWAP
- VIRT - everything in-use and/or reserved (all quadrants)
Options
| -b | batch mode, doesn’t accept input, runs until ‘-n’ iteration limit or killed |
| -n | max iterations before ending |
| -d | delay in seconds for refresh |
| -E | memory scale for summary area |
| -e | memory scale for task area |
Memory scale units:
| k | kibibytes |
| m | mebibytes |
| g | gibibytes |
| t | tebibytes |
| p | pebibytes |
| e | exbibytes |
More options:
| -H | show individual threads, also threads instead of tasks at top |
| -h | help |
| -O | print list of fields |
| -o | select field to sort by, +/- to specify sort order, + high to low, - low to high |
| -p | monitor comma separated list of pids |
| -s | secure mode |
| -U | username or user ID ( real, effective, saved, filesystem ), use ! to negate |
| -u | username or user ID ( effective ), use ! to negate |
- system load avg over the last 1, 5 and 15 minutes
| us | time running un-niced user processes |
| sy | time running kernel processes |
| ni | time running niced user processes |
| id | time spent in the kernel idle handler |
| wa | time waiting for I/O completion |
| hi | time spent servicing hardware interrupts |
| si | time spent servicing software interrupts |
| st | time stolen from this vm by the hypervisor |
| t | switch mode, can show user, system, total percent, graph |
a b c d
%Cpu(s): 75.0/25.0 100[ ... ]
| I | Irix mode on / off |
Fields
CPU usage:
- can be over 100 if multi threaded
- Irix mode - ….
- Solaris mode - CPU usage divided by number of CPUs
- shows usage for children when inforest mode
Process Status - The status of the task which can be one of:
- D = uninterruptible sleep
- I = idle
- R = running
- S = sleeping
- T = stopped by job control signal
- t = stopped by debugger during trace
- Z = zombie
Fields:
| %CPU | CPU Usage |
| %CUC | CPU Utilization ( devided by running time as percentage ), include reaped procs |
| %CUU | CPU Utilization ( devided by running time as percentage ) |
| %MEM | Memory Usage (RES) |
| AGID | Autogroup Identifier … more details in man page |
| AGNI | Autogroup Nice Value ( for all procs in group ) |
| CGNAME | Control Group Name |
| CGROUPS | Control Groups |
| CODE | Code Size (KiB) - mem dedicated to executable code ( Text Resident Set size or TRS ) |
| COMMAND | Command Name or Command Line ( use ‘c’ to toggle between command line and name ) |
| DATA | Data + Stack Size (KiB) ( Data Resident Set or DRS ) always virtual, might not be physical |
| ELAPSED | Elapsed Running Time |
| ENVIRON | Environment variables |
| EXE | Executable Path |
| Flags | Task Flags ( scheduling flags ) |
| GID | Group Id |
| GROUP | Group Name |
| LOGID | Login User Id |
| LXC | Lxc Container Name |
| NI | Nice Value |
| NU | Last known NUMA node |
| OOMa | Out of Memory Adjustment Factor ( added to OOMs )( -1000 to +1000, determines which task to kill on OOM) |
| OOMs | Out of Memory Score ( 0 to +1000, 0 never kill, 1000 always kill) |
| P | Last used CPU (SMP) |
| PGRP | Process Group Id |
| PID | Process Id |
| PPID | Parent Process Id |
| PR | Priority ( scheduling priority, rt is real time) |
| PSS | Proportional Resident Memory, smaps (KiB) |
| PSan | Proportional Anonymous Memory, smaps (KiB) |
| PSfd | Proportional File Memory, smaps (KiB) |
| PSsh | Proportional Shmem Memory, smaps (KiB) |
| RES | Resident Memory Size (KiB) -( non-swapped physical memory ) |
| RSS | Resident Memory, smaps (KiB) |
| RSan | Resident Anonymous Memory Size (KiB) |
| RSfd | Resident File-Backed Memory Size (KiB) |
| RSlk | Resident Locked Memory Size (KiB) |
| RSsh | Resident Shared Memory Size (KiB) |
| RUID | Real User Id |
| RUSER | Real User Name |
| S | Process Status |
| SHR | Shared Memory Size (KiB) - part of RES, may be used by other procs |
| SID | Session Id |
| STARTED | Start Time Interval “length of time since system boot when a process started” |
| SUID | Saved User Id |
| SUPGIDS | Supplementary Group IDs |
| SUPGRPS | Supplementary Group Names |
| SUSER | Saved User Name |
| SWAP | Swapped Size (KiB) - mem that was swapped out after physical mem is overcommitted |
| TGID | Thread Group Id |
| TIME | CPU Time - total CPU time used - ‘S’ to toggle cumulative mode and show usage for dead children |
| TIME+ | CPU Time, hundredths |
| TPGID | Tty Process Group Id |
| TTY | Controlling Tty |
| UID | User Id |
| USED | Memory in Use (KiB) - physical and swap usage ( RES + SWAP ) |
| USER | User Name - effective user name of task owner |
| USS | Unique Set Size - non swapped physical mem usage not shared with other procs |
| VIRT | Virtual Memory Size (KiB) |
| WCHAN | Sleeping in Function - kernel function name that task is sleeping in |
| ioR | I/O Bytes Read |
| ioRop | I/O Read Operations ( syscalls, might n ot have actual physical I/O) |
| ioW | I/O Bytes Written |
| ioWop | I/O Write Operations ( syscalls, might n ot have actual physical I/O) |
| nDRT | Dirty Pages Count - pages not written to aux storage - can’t be swapped out yet ) |
| nMaj | Major Page Fault Count - attepmt to read virt mem that isn’t there and need to use aux storage |
| nMin | Minor Page Fault count - attepmt to read virt mem that isn’t there and DOESN’T need to use aux storage |
| vMj | Major Page Fault Count Delta - Major Page Faults since last update |
| vMn | Minor Page Fault Count Delta - Minor Page Faults since last update |
| nTH | Number of Threads |
| nsCGROUP | CGROUP namespace |
| nsIPC | IPC namespace |
| nsMNT | MNT namespace |
| nsNET | NET namespace |
| nsPID | PID namespace |
| nsTIME | TIME namespace |
| nsUSER | USER namespace |
| nsUTS | UTS namespace |
Commands
| f | manage fields - show screen and sort field |
| g | choose another window |
| up,down, pgup, pgdn, home, end | navigate |
| right arrow | select field for repositioning |
| left arrow / enter | commit position |
| d / space | toggle display status |
| s | set selected field as sort field |
| a/w | cycle through windows |
| q/esc | - quit ( exits to selected window ) |
Secure mode will dissallow doing things like killing, renicing, etc. It is also enforced for root.
GLOBAL Commands
| enter / space | refresh now |
| q | quit |
| ? / h | get help |
| = | exit display limits - basically remove all filtering and stuff |
| 0 | Zero-Suppress toggle - don’t show zero for some fields |
| A | Alternate-Display-Mode toggle |
| B | :Bold-Disable/Enable toggle |
| d / s | Change-Delay-Time-interval - can be positive, fractional, or zero |
| E | Enforce-Summary-Memory-Scale in Summary Area - cycle between KiB - EiB |
| e | Enforce-Task-Memory-Scale in Task Area - cycle between KiB - EiB |
| g | Choose-Another-Window/Field-Group - select window, prompts for number 1-4 |
| H | Threads-mode toggle - show threads instead of summation |
| I | Irix/Solaris-Mode toggle |
| k | Kill-a-task - prompted for PID and signal |
| r | Renice-a-Task - prompted for PID and nice value |
| W | Write-the-Configuration-File - save settings in config file |
| X | Extra-Fixed-Width - adjust width for some columns |
| Y | Inspect-Other-Output - prompt for PID, show info on other screen |
Used to inspect in the pager ( for Y command ), needs configuration in config file ( “adding INSPECT entries” ):
| key | function |
| = | alternate status-line, file or pipeline |
| / | find, equivalent to `L’ locate |
| n | find next, equivalent to `&’ locate next |
| Space | scroll down, equivalent to PgDn |
| b | scroll up, equivalent to PgUp |
| g | first line, equivalent to Home |
| G | last line, equivalent to End |
More commands:
| Z | Change-Color-Mapping - prompts for keys to change collors ( select color, select targert ) |
| ^G | Display-Control-Groups (Ctrl key + `g’) ( for first proc listed ) |
| ^K | Display-Cmdline (Ctrl key + `k’) ( for first proc listed ) |
| ^N | Display-Environment (Ctrl key + `n’) ( for first proc listed ) |
| ^P | Display-Namesspaces (Ctrl key + `p’) ( for first proc listed ) |
| ^U | Display-Supplementary-Groups (Ctrl key + `u’) ( for first proc listed ) |
| ^L | Logged-Messages (Ctrl key + `l’) - show recetn messges |
| ^R | Renice-an-Autogroup (Ctrl key + `r’) |
SUMMARY AREA Commands
| C | Show-scroll-coordinates toggle |
| l | Load-Average/Uptime toggle |
| m | Memory/Swap-Usage toggle |
| t | Task/Cpu-States toggle - summary lines |
| 1 | Single/Separate-Cpu-States toggle |
| 2 | NUMA-Nodes/Cpu-Summary toggle |
| 3 | Expand-NUMA-Node |
| 4 | Display-Multiple-Elements-Adjacent toggle |
| 5 | Display-P-Cores-and-E-Cores toggle |
| ! | Combine-Cpus-Mode toggle |
- 1-! commands may affect t command
TASK AREA Commands
| J | Justify-Numeric-Columns toggle |
| j | Justify-Character-Columns toggle |
| b | Bold/Reverse toggle |
| x | Column-Highlight toggle - for sort field - column turns bold - if color mode (‘z’) col also is colored |
| y | Row-Highlight toggle - running tasks turn bold, if color mode (‘z’) col also is colored |
| z | Color/Monochrome toggle - conflicts with colors picked with “Z” ( capital ) |
| c | Command-Line/Program-Name toggle |
| F | Maintain-Parent-Focus toggle - in forest mode, select top task and pin it to the top basically |
| f | Fields-Management - …. |
| O or o | Other-Filtering - setup task filtering ….. more info …. |
| S | Cumulative-Time-Mode toggle - count CPU time of dead children or not |
| U or u | Show-Specific-User-Only - prompt to filter by user: ex: ‘user1’ or ‘!user1’ |
| V | Forest-View-Mode toggle - order procs by parent |
| v | Hide/Show-Children toggle - show / hide children of top most ( selected ) proc |
| ^E | Scale-CPU-Time-fields (Ctrl key + `e’) |
| i | Idle-Process toggle - show / don’t show idle tasks |
| n or # | Set-Maximum-Tasks |
Sort keys from old top: ?????:
| command | sorted-field | supported |
| A | start time (non-display) | No |
| M | %MEM | Yes |
| N | PID | Yes |
| P | %CPU | Yes |
| T | TIME+ | Yes |
- Might need colum highlighted with ‘x’ command before you can change col to sort on
| < | Move-Sort-Field-Left |
| > | Move-Sort-Field-Right |
| R | Reverse/Normal-Sort-Field toggle |
- full-screen mode - 1 window at a time
- alternate-display mod - all windows at once, can disable some or all, current window shown on summary line
- 1-4 windows exist
Alternate display mode
( some commands will behave different in alternate display mode )
| A | Alternate-Display-Mode toggle - switch between full screen and alternate display mode |
| - | (dash) hide current window |
| _ | (underscore) inverse which windows are hidden or hide all_ |
| = | force current window task display visible and clear all filters resetting window |
| + | same but for all windows |
| a | next window |
| w | previous window |
| G | change window name ( will prompt ) |
| g | change current window ( will prompt ) |
Scrolling ( alternate and normal mode ):
| Up,PgUp,Down,PgDn,Left,Right,Home,End | Navigate |
| C | show scroll coordinates |
Searching ( alternate and normal mode ):
| L | search for case sensitive string |
| & | locate next |
- Search is across all cols but ONLY cols that are on screen ( not scrolled off screen )
Filtering
- ! to exclude
- multiple filters can be used
- filters are per task window
- fields need to be visable to filter
- make sure scaling is set right for filtering ( MiB vs GiB )
| O | case sensitive filter ( will prompt ) |
| o | case insensitive filter ( will prompt ) |
| ctrl O | show active filters |
| = | reset filters in current window |
| + | reset filters for all windows |
Example filter:
USER=user1
PID>100
!USER=user1
!USER=Debian-+
RES>100
nTH>1
Config files:
| W | save current config to file to .config/procps/toprc ( legacy paths are different ) |
-
Copy conig file here to set it as the system wide default: /etc/topdefaultrc
-
config file isn’t normally meant to be edited manually but you can add inspect entries to the end
Inspect Entires
Three elements, tab separated:
| .type | literal file' or pipe’ |
| .name | selection shown on the Inspect screen |
| .fmts | string representing a path or command |
-
commented lines ( starting with # ) are ignored
- %d the pid is subbed for this
- “For clarity, the pseudo tab depictions (^I) are surrounded by an extra space but the actual tabs would not be.”
- might need ctrl-c for some command/pipe based inspects
# pipe ^I Sockets ^I lsof -n -P -i 2>&1
pipe ^I Open Files ^I lsof -P -p %d 2>&1
file ^I NUMA Info ^I /proc/%d/numa_maps
pipe ^I Log ^I tail -n100 /var/log/syslog | sort -Mr
pipe ^I Trace ^I /usr/bin/strace -p %d 2>&1
SYSTEM Restrictions File: /etc/toprc
Should contain these two lines:
s # line 1: secure mode switch
5.0 # line 2: delay interval in seconds
This file will have the following effect:
"""
They will not be able to issue the following commands.
k Kill a task
r Renice a task
d or s Change delay/sleep interval
"""
Env variable:
"""
LIBPROC_HIDE_KERNEL
This will prevent display of any kernel threads and exclude such processes from the
summary area Tasks/Threads counts.
"""
export LIBPROC_HIDE_KERNEL=asdf