1 <?xml version='1.0'?> <!--*-nxml-*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
6 This file is part of systemd.
8 Copyright 2012 Lennart Poettering
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 <refentry id="systemd-analyze">
27 <title>systemd-analyze</title>
28 <productname>systemd</productname>
32 <contrib>Developer</contrib>
33 <firstname>Lennart</firstname>
34 <surname>Poettering</surname>
35 <email>lennart@poettering.net</email>
38 <contrib>Developer</contrib>
39 <firstname>Harald</firstname>
40 <surname>Hoyer</surname>
41 <email>harald@redhat.com</email>
47 <refentrytitle>systemd-analyze</refentrytitle>
48 <manvolnum>1</manvolnum>
52 <refname>systemd-analyze</refname>
53 <refpurpose>Analyze system boot-up performance</refpurpose>
58 <command>systemd-analyze</command>
59 <arg choice="opt" rep="repeat">OPTIONS</arg>
63 <command>systemd-analyze</command>
64 <arg choice="opt" rep="repeat">OPTIONS</arg>
65 <arg choice="plain">blame</arg>
68 <command>systemd-analyze</command>
69 <arg choice="opt" rep="repeat">OPTIONS</arg>
70 <arg choice="plain">critical-chain</arg>
71 <arg choice="opt" rep="repeat"><replaceable>UNIT</replaceable></arg>
74 <command>systemd-analyze</command>
75 <arg choice="opt" rep="repeat">OPTIONS</arg>
76 <arg choice="plain">plot</arg>
77 <arg choice="opt">> file.svg</arg>
80 <command>systemd-analyze</command>
81 <arg choice="opt" rep="repeat">OPTIONS</arg>
82 <arg choice="plain">dot</arg>
83 <arg choice="opt" rep="repeat"><replaceable>PATTERN</replaceable></arg>
88 <title>Description</title>
90 <para><command>systemd-analyze</command> may be used
91 to determine system boot-up performance of the current
94 <para><command>systemd-analyze time</command>
95 prints the time spent in the kernel before
96 userspace has been reached, the time spent in the
97 initial RAM disk (initrd) before normal system
98 userspace has been reached, and the time normal system
99 userspace took to initialize. Note that these
100 measurements simply measure the time passed up to the
101 point where all system services have been spawned, but
102 not necessarily until they fully finished
103 initialization or the disk is idle.</para>
105 <para><command>systemd-analyze blame</command> prints
106 a list of all running units, ordered by the time they
107 took to initialize. This information may be used to
108 optimize boot-up times. Note that the output might be
109 misleading as the initialization of one service might
110 be slow simply because it waits for the initialization
111 of another service to complete.</para>
113 <para><command>systemd-analyze critical-chain [<replaceable>UNIT...</replaceable>]</command>
114 prints a tree of the time-critical chain of units
115 (for each of the specified <replaceable>UNIT</replaceable>s
116 or for the default target otherwise).
117 The time after the unit is active or started is printed
118 after the "@" character. The time the unit takes to
119 start is printed after the "+" character.
120 Note that the output might be misleading as the
121 initialization of one service might depend on socket
122 activation and because of the parallel execution
125 <para><command>systemd-analyze plot</command> prints
126 an SVG graphic detailing which system services have
127 been started at what time, highlighting the time they
128 spent on initialization.</para>
130 <para><command>systemd-analyze dot</command> Generate
131 textual dependency graph description in dot format for
132 further processing with the GraphViz
133 <citerefentry><refentrytitle>dot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
134 tool. Use a command line like <command>systemd-analyze
135 dot | dot -Tsvg > systemd.svg</command> to generate a
136 graphical dependency tree. Unless
137 <option>--order</option> or <option>--require</option>
138 is passed, the generated graph will show both ordering
139 and requirement dependencies. Optional pattern
140 globbing style specifications
141 (e.g. <filename>*.target</filename>) may be given at
142 the end. A unit dependency is included in the graph if
143 any of these patterns match either the origin or
144 destination node.</para>
146 <para>If no command is passed, <command>systemd-analyze
147 time</command> is implied.</para>
152 <title>Options</title>
154 <para>The following options are understood:</para>
158 <term><option>-h</option></term>
159 <term><option>--help</option></term>
161 <listitem><para>Prints a short help
162 text and exits.</para></listitem>
166 <term><option>--user</option></term>
168 <listitem><para>Shows performance data
169 of user sessions instead of the system
170 manager.</para></listitem>
174 <term><option>--order</option></term>
175 <term><option>--require</option></term>
177 <listitem><para>When used in
179 <command>dot</command> command (see
180 above), selects which dependencies are
181 shown in the dependency graph. If
182 <option>--order</option> is passed
183 only dependencies of type
184 <varname>After=</varname> or
185 <varname>Before=</varname> are
186 shown. If <option>--require</option>
187 is passed only dependencies of type
188 <varname>Requires=</varname>,
189 <varname>RequiresOverridable=</varname>,
190 <varname>Requisite=</varname>,
191 <varname>RequisiteOverridable=</varname>,
192 <varname>Wants=</varname> and
193 <varname>Conflicts=</varname> are
194 shown. If neither is passed, this shows
195 dependencies of all these
196 types.</para></listitem>
200 <term><option>--from-pattern=</option></term>
201 <term><option>--to-pattern=</option></term>
203 <listitem><para>When used in
205 <command>dot</command> command (see
206 above), this selects which relationships
207 are shown in the dependency graph.
209 <citerefentry><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry>
210 patterns as arguments, which are
211 matched against left-hand and
212 right-hand, respectively, nodes of a
213 relationship. Each of these can be
214 used more than once, which means a
215 unit name must match one of the given
216 values.</para></listitem>
220 <term><option>--fuzz=</option><replaceable>timespan</replaceable></term>
222 <listitem><para>When used in conjunction
223 with the <command>critical-chain</command>
224 command (see above), also show units, which
225 finished <replaceable>timespan</replaceable> earlier, than the
226 latest unit in the same level. The unit of
227 <replaceable>timespan</replaceable> is seconds
228 unless specified with a different unit,
229 e.g. "50ms".</para></listitem>
236 <title>Exit status</title>
238 <para>On success 0 is returned, a non-zero failure
239 code otherwise.</para>
243 <title>Examples</title>
245 <para>This plots all dependencies of any unit whose
246 name starts with <literal>avahi-daemon.</literal>:</para>
248 <programlisting>$ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg
249 $ eog avahi.svg</programlisting>
251 <para>This plots the dependencies between all known target units:</para>
253 <programlisting>systemd-analyze dot --to-pattern='*.target' --from-patter='*.target' | dot -Tsvg > targets.svg
254 $ eog targets.svg</programlisting>
260 <title>See Also</title>
262 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
263 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>