aboutsummaryrefslogtreecommitdiffhomepage
path: root/debug.txt
blob: ac17616daa89e8fc0afd85c748e121dcaabe64ce (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# debugging
--------------------------------------------------------------------------------

#
# strace(1)
#

strace [OPTS] [ELF]
  -f .......... follow child processes on fork(2)
  -p <pid> .... attach to running process
  -s <size> ... max string size (default: 32)
  -e <expr> ... expression for trace filtering
  -o <file> ... log output into <file>
  -c .......... dump syscall statitics at the end

useful <expr>:
  trace=syscall[,syscall] .... trace only syscall listed
  trace=file ................. trace all syscall that take a filename as arg
  trace=process .............. trace process management related syscalls
  signal ..................... trace signals delivered to the process

use cases:
- trace 'open & socket' syscalls for a running process + childs
strace -f -p <pid> -e trace=open,socket

- trace signals delivered to a running process
strace -f -p <pid> -e signal


#
# lsof(8)
#

lsof +fg -p <pid>
  -p <pid> ... list open files for process
  +fg ........ show file flags for file descripros

file flags:
  R/W/RW ..... read/write/read-write
  CR ......... create
  AP ......... append
  TR ......... truncate

uase cases:
- show open files with file flags
lsof +fg -p <pid>


#
# pmap(1)
#

pmap <pid>
  ............. dump virtual memory map of process.
                compared to /proc/<pid>/maps it shows the size of the mappings


#
# pstack(1)
#

pstack <pid>
  ............. dump current stack of process + threads


#
# pidstat(1)
#

# trace minor/major page faults
pidstat -r -p <pid> [interval]
  minor_pagefault: happens when the page needed is already in memory but not
                   allocated to the faulting process, in that case the kernel
                   only has to create a new page-table entry pointing to the
                   shared physical page
  major_pagefault: happends when the page needed is NOT in memory, the kernel
                   has to create a new page-table entry and populate the
                   physical page


#
# /usr/bin/time(1)
#

# statistics of process run
/usr/bin/time -v <cmd>


#
# perf(1)
#

# get supported events
perf list
  ......... show supported hw/sw events

perf stat
  -p <pid> .. show stats for running process
  -I <ms> ... show stats periodically over interval <ms>
  -e <ev> ... filter for events

perf top
  -p <pid> .. show stats for running process
  -F <hz> ... sampling frequency
  -K ........ hide kernel threads

perf record
  -p <pid> ............... record stats for running process
  -F <hz> ................ sampling frequency
  --call-graph <method> .. [fp, dwarf, lbr] method how to caputre backtrace
                           fp   : use frame-pointer, need -fno-omit-frame-pointer
                           dwarf: use .cfi debug information
                           lbr  : use hardware last branch record facility
  -g ..................... short-hand for --call-graph fp
  -e <ev> ................ filter for events

perf report
  -n .................... annotate symbols with nr of samples
  --stdio ............... report to stdio, if not presen tui mode
  -g graph,0.5,caller ... show caller based call chains with value >0.5

useful <ev>:
  page-faults
  minor-faults
  major-faults
  cpu-cycles`
  task-clock


#
# flamegraph(https://github.com/brendangregg/FlameGraph)
#

# flamegraph for single event trace
perf record -g -p <pid> -e cpu-cycles
perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > cycles-flamegraph.svg

# flamegraphs for multiple events trace
perf record -g -p <pid> -e cpu-cycles,page-faults
perf script --per-event-dump
# fold & generate as above
#

#
# OProfile
#

operf -g -p <pid>
  -g ...... caputre call-graph information

opreport [opt] FILE
  NOOPT ... show time spent per binary image
  -l ...... show time spent per symbol
  -c ...... show callgraph information (see below)
  -a ...... add column with time spent accumulated over child nodes

ophelp
  NOOPT ... show supported hw/sw events

--------------------------------------------------------------------------------
vim:ft=help:sts=2:et:tw=80:cc=80:fo+=t