CPU Utilization (Shares) of a Service
25. Get the current CPU Shares of a Service (say httpd).
# systemctl show -p CPUShares httpd.service CPUShares=1024
Note: The default each service has a CPUShare = 1024. You may increase/decrease the CPU share of a process.
26. Limit the CPU Share of a service (httpd.service) to 2000 CPUShares/
# systemctl set-property httpd.service CPUShares=2000 # systemctl show -p CPUShares httpd.service CPUShares=2000
Note: When you set CPUShare for a service, a directory with the name of service is created (httpd.service.d) which contains a file 90-CPUShares.conf which contains the CPUShare Limit information. You may view the file as:
# vi /etc/systemd/system/httpd.service.d/90-CPUShares.conf [Service] CPUShares=2000
27. Check all the configuration details of a service.
# systemctl show httpd Id=httpd.service Names=httpd.service Requires=basic.target Wants=system.slice WantedBy=multi-user.target Conflicts=shutdown.target Before=shutdown.target multi-user.target After=network.target remote-fs.target nss-lookup.target systemd-journald.socket basic.target system.slice Description=The Apache HTTP Server LoadState=loaded ActiveState=active SubState=running FragmentPath=/usr/lib/systemd/system/httpd.service ....
28. Analyze critical chain for a service (httpd).
# systemd-analyze critical-chain httpd.service The time after the unit is active or started is printed after the "@" character. The time the unit takes to start is printed after the "+" character. httpd.service +142ms └─network.target @11.168s └─network.service @9.456s +1.712s └─NetworkManager.service @8.858s +596ms └─firewalld.service @4.931s +3.926s └─basic.target @4.916s └─sockets.target @4.916s └─dbus.socket @4.916s └─sysinit.target @4.905s └─systemd-update-utmp.service @4.864s +39ms └─auditd.service @4.563s +301ms └─systemd-tmpfiles-setup.service @4.485s +69ms └─rhel-import-state.service @4.342s +142ms └─local-fs.target @4.324s └─boot.mount @4.286s +31ms └─systemd-fsck@dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.service @4.092s +149ms └─dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.device @4.092s
29. Get a list of dependencies for a service (httpd).
# systemctl list-dependencies httpd.service httpd.service ├─system.slice └─basic.target ├─firewalld.service ├─microcode.service ├─rhel-autorelabel-mark.service ├─rhel-autorelabel.service ├─rhel-configure.service ├─rhel-dmesg.service ├─rhel-loadmodules.service ├─paths.target ├─slices.target │ ├─-.slice │ └─system.slice ├─sockets.target │ ├─dbus.socket ....
30. List control groups hierarchically.
# systemd-cgls ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 ├─user.slice │ └─user-0.slice │ └─session-1.scope │ ├─2498 sshd: root@pts/0 │ ├─2500 -bash │ ├─4521 systemd-cgls │ └─4522 systemd-cgls └─system.slice ├─httpd.service │ ├─4440 /usr/sbin/httpd -DFOREGROUND │ ├─4442 /usr/sbin/httpd -DFOREGROUND │ ├─4443 /usr/sbin/httpd -DFOREGROUND │ ├─4444 /usr/sbin/httpd -DFOREGROUND │ ├─4445 /usr/sbin/httpd -DFOREGROUND │ └─4446 /usr/sbin/httpd -DFOREGROUND ├─polkit.service │ └─721 /usr/lib/polkit-1/polkitd --no-debug ....
31. List control group according to CPU, memory, Input, and Output.
# systemd-cgtop Path Tasks %CPU Memory Input/s Output/s / 83 1.0 437.8M - - /system.slice - 0.1 - - - /system.slice/mariadb.service 2 0.1 - - - /system.slice/tuned.service 1 0.0 - - - /system.slice/httpd.service 6 0.0 - - - /system.slice/NetworkManager.service 1 - - - - /system.slice/atop.service 1 - - - - /system.slice/atopacct.service 1 - - - - /system.slice/auditd.service 1 - - - - /system.slice/crond.service 1 - - - - /system.slice/dbus.service 1 - - - - /system.slice/firewalld.service 1 - - - - /system.slice/lvm2-lvmetad.service 1 - - - - /system.slice/polkit.service 1 - - - - /system.slice/postfix.service 3 - - - - /system.slice/rsyslog.service 1 - - - - /system.slice/system-getty.slice/[email protected] 1 - - - - /system.slice/systemd-journald.service 1 - - - - /system.slice/systemd-logind.service 1 - - - - /system.slice/systemd-udevd.service 1 - - - - /system.slice/webmin.service 1 - - - - /user.slice/user-0.slice/session-1.scope 3 - - - -
Control System Runlevels
32. How to start a system rescue mode.
# systemctl rescue Broadcast message from root@tecmint on pts/0 (Wed 2015-04-29 11:31:18 IST): The system is going down to rescue mode NOW!
33. How to enter into emergency mode.
# systemctl emergency Welcome to emergency mode! After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, "systemctl default" to try again to boot into default mode.
34. List current run levels in use.
# systemctl get-default multi-user.target
35. How to start Runlevel 5 aka graphical mode.
# systemctl isolate runlevel5.target OR # systemctl isolate graphical.target
36. How to start Runlevel 3 aka multiuser mode (command line).
# systemctl isolate runlevel3.target OR # systemctl isolate multiuser.target
36. How to set multiuser mode or graphical mode as default run level.
# systemctl set-default runlevel3.target # systemctl set-default runlevel5.target
37. How to reboot, halt, suspend, hibernate, or put a system in hybrid-sleep.
# systemctl reboot # systemctl halt # systemctl suspend # systemctl hibernate # systemctl hybrid-sleep
For those who may not be aware of run levels and what it does.
- Runlevel 0 : Shut down and Power off the system.
- Runlevel 1 : Rescue?Maintainance Mode.
- Runlevel 3 : multiuser, no-graphic system.
- Runlevel 4 : multiuser, no-graphic system.
- Runlevel 5 : multiuser, graphical system.
- Runlevel 6 : Shutdown and Reboot the machine.
That’s all for now. Keep connected! Keep commenting. Don’t forget to provide us with your valuable feedback in the comments below. Like and share us and help us get spread.
I’m quoting ‘Notice: systemd is running as parent daemon (PID=1).’ here, I guess the ppid is the one that equals one, and the init service is the one with pid=1, as it’s the first daemon service initiated by the kernel
edit :
I’m asking this question, as I’m confused about init & systems. Considering the fact that PIDs are assigned in ascending order, and that init always get the PID 1. am I missing something?
I am just about starting with Ubuntu on Windows 10 – have tried it with WSL 2 and from Ubuntu as well.
I started following your instructions, but couldn’t go beyond this point.
This returned an empty value, and hence am unable to proceed any farther. I have been stuck at this error now for weeks BUT no luck.
I always get this error
I will be very thankful and appreciate a lot if someone here can bail me out of it?
TIA
From the error, it seems that the systemd is not the init system. I never used WSL but MS might not be using systems.
Can you see systemd in the output of top command?
In RedHat 7 to get systemd version run
systemctl --version
but notsystemd --version
.@Mohamed amine TLILI: This was mentioned in an earlier comment (May 28, 2015, by McBuhl) along with the suggestion to make the correction in the blog post.
I don’t know how long it normally takes to make corrections to a blog post here, but the good news is that we’re now 5 years closer to seeing the correction made.
@Donald,
Corrected the command in the article…
Superb pots. I would just like to add that all those system services also generate logs. With systemd, these logs can be managed centrally with another component called journalctl. The main configuration file is in /etc/systemd/journald.conf.
Fear that you could dedicate another magnificent pots. Thanks a lot.
I would like to know about the relationship of numbering of files such as this in your teachings:
90-CPUShares.conf
I used a similar scheme with a .network file as seen in some tutorials. For Example:
10-dhcp.network
20-static.network
30-static.network
My belief is that the lower number .network file starts first?? Are these just arbitrary numbers? Could I use 70-dhcp.network&80.dhcp.network in the same fashion?? 99-* seems to be the last number called up.
Also these numbers schemes look like what I see in UDEV as well…
Keep up the great work
Really useful guide.
Keep up the great work.
I see one command not covered that I use alot.
systemctl reenable
This allows the unit file to reload and writes a new symbolic link to /usr/lib/
I have also found the systemctl edit –full allows you to edit the unit control file in /etc/systemd/system folder. Helpful for setting the After= setting for controlling the startup order of services.
@Frank,
Thanks for appreciating our work and giving us valuable tip, we’ve will check and add to the list as per your suggestions.
Thank You
Just to be clear the “systemctl edit –full” needs a service to work on. For example:
systemctl edit –full hostapd
To this file I add-
After=dnsmasq.service
To have hostapd wait for dnsmasq to start first.
It saves the file with an odd file extension that is actually the unit file. Just edit and save(ignore name). Another advantage with this method is that it reloads and reenables the service thus writing the needed symbolic links for you with a single swoop.
Nice and extensive overview of available commands.
Question: For controlling our applications we use supervisord, which allows one-shot commands as you present here, but also provides interactive shell, where one can call commands like “start svcA”, “restart svcB”, “tail svcA”, or even “follow mode” “tail -f svcA”. The interactive mode is very handy as it does not require typing so long commands.
Question: is there any interactive console controlling systemd defined services?
@Jan,
Thanks for the tips, never ever heard about supervisord, let me check how it works and also to be fact I really don’t have any idea in controlling systemd via interactive shell, let me check and get back to you..
very complete handy cheat sheet that i should bookmark it now! thanks!
Hi,
Very nice article
thanks a lot
Thanks @ Jalal Hajigholamali for your feedback
Keep connected to tecmint.com
Thanks, I am still running nix distro with init but will be useful some day when using systemd.
:) if you don’t start using systemd, you will be left behind in the fast moving Linux World.
‘systemd –version’ doesn’t work. It is ‘systemctl –version’ that works.
try
# systemd-run –version
You may thank me later. :)
I’d thank you even more if yo’d correct it in the blog post – as I had the same error as CertDepot
+ copy-pasting runs into error, too, because “–” is altered into a long “-“: Failed to find executable –version: No such file or directory
I love the conciseness of how-to posts like this one. But yeah, fast-forward 3 yrs and ‘systemd –version’ is still in the blog post. If one needs to read comments to get the correct info, then that whole conciseness thing goes out the window.
Thanks for the in-depth how-to on using the systemd control system tool. Lots of great examples!
Welcome Bill M