Ada sedikit yang lebih membuat saya frustrasi sebagai sysadmin daripada kehabisan sumber daya komputasi secara tak terduga. Pada lebih dari satu kesempatan, saya telah mengisi semua ruang disk yang tersedia di sebuah partisi, kehabisan RAM, dan tidak memiliki cukup waktu CPU untuk melakukan tugas saya dalam waktu yang wajar. Manajemen sumber daya adalah salah satu tugas terpenting yang dilakukan sysadmin.
Inti dari manajemen sumber daya adalah untuk memastikan bahwa semua proses memiliki akses yang relatif sama ke sumber daya sistem yang mereka butuhkan. Manajemen sumber daya juga melibatkan memastikan bahwa RAM, ruang hard drive, dan kapasitas CPU ditambahkan bila diperlukan atau dijatah bila tidak memungkinkan. Selain itu, pengguna yang memonopoli sumber daya sistem, baik sengaja atau tidak sengaja, harus dicegah untuk melakukannya.
Ada alat yang memungkinkan sysadmin untuk memantau dan mengelola berbagai sumber daya sistem. Misalnya, alat teratas dan serupa memungkinkan Anda untuk memantau penggunaan memori, I/O, penyimpanan (disk, SSD, dll.), jaringan, ruang swap, penggunaan CPU, dan banyak lagi. Alat-alat ini, terutama yang berpusat pada CPU, sebagian besar didasarkan pada paradigma bahwa proses yang berjalan adalah unit kontrol. Paling-paling, mereka menyediakan cara untuk menyesuaikan nomor yang bagus – dan melalui itu, prioritasnya – atau untuk mematikan proses yang sedang berjalan. (Untuk informasi tentang nomor bagus, lihat Memantau host Linux dan Windows dengan Glances .)
Selengkapnya tentang sysadmin
- Aktifkan blog Sysadmin
- Perusahaan Otomatis:panduan untuk mengelola TI dengan otomatisasi
- eBook:Kemungkinan Otomatisasi untuk SysAdmins
- Kisah dari lapangan:Panduan administrator sistem untuk otomatisasi TI
- eBook:Panduan Kubernetes untuk SRE dan sysadmin
- Artikel sysadmin terbaru
Alat lain berdasarkan manajemen sumber daya tradisional di lingkungan SystemV dikelola oleh /etc/security/limits.conf
dan file konfigurasi lokal yang terletak di /etc/security/limits.d
direktori. Sumber daya dapat dibatasi dengan cara yang cukup kasar tetapi bermanfaat oleh pengguna atau grup. Sumber daya yang dapat dikelola mencakup berbagai aspek RAM, total waktu CPU per hari, jumlah total data, prioritas, nomor bagus, jumlah login bersamaan, jumlah proses, ukuran file maksimum, dan banyak lagi.
Menggunakan cgroups untuk manajemen proses
Satu perbedaan utama antara systemd dan SystemV adalah bagaimana mereka menangani proses. SystemV memperlakukan setiap proses sebagai entitas tersendiri. systemd mengumpulkan proses terkait ke dalam grup kontrol, yang disebut cgroups (kependekan dari grup kontrol), dan mengelola sumber daya sistem untuk cgroup secara keseluruhan. Ini berarti sumber daya dapat dikelola per aplikasi, bukan oleh proses individual yang membentuk aplikasi.
Unit kontrol untuk cgroup disebut unit irisan. Slice adalah konseptualisasi yang memungkinkan systemd untuk mengurutkan proses dalam format pohon untuk kemudahan pengelolaan.
Melihat cgroups
Saya akan mulai dengan beberapa perintah yang memungkinkan Anda untuk melihat berbagai jenis informasi tentang cgroups. systemctl status <service>
perintah menampilkan informasi irisan tentang layanan tertentu, termasuk irisannya. Contoh ini menunjukkan at
daemon:
[root@testvm1 ~]# systemctl status atd.service
● atd.service - Deferred execution scheduler
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-09-23 12:18:24 EDT; 1 day 3h ago
Docs: man:atd(8)
Main PID: 1010 (atd)
Tasks: 1 (limit: 14760)
Memory: 440.0K
CPU: 5ms
CGroup: /system.slice/atd.service
└─1010 /usr/sbin/atd -f
Sep 23 12:18:24 testvm1.both.org systemd[1]: Started Deferred execution scheduler.
[root@testvm1 ~]#
Ini adalah contoh yang sangat baik dari salah satu alasan mengapa saya menemukan systemd lebih bermanfaat daripada SystemV dan program init lama. Ada lebih banyak informasi di sini daripada yang dapat diberikan SystemV. Entri cgroup menyertakan struktur hierarki tempat system.slice
adalah systemd (PID 1), dan atd.service
adalah satu tingkat di bawah dan merupakan bagian dari system.slice
. Baris kedua dari entri cgroup juga menunjukkan ID proses (PID) dan perintah yang digunakan untuk memulai daemon.
systemctl
perintah menunjukkan beberapa entri cgroup. --all
opsi menunjukkan semua irisan, termasuk yang saat ini tidak aktif:
[root@testvm1 ~]# systemctl -t slice --all
UNIT LOAD ACTIVE SUB DESCRIPTION
-.slice loaded active active Root Slice
system-getty.slice loaded active active system-getty.slice
system-lvm2\x2dpvscan.slice loaded active active system-lvm2\x2dpvscan.slice
system-modprobe.slice loaded active active system-modprobe.slice
system-sshd\x2dkeygen.slice loaded active active system-sshd\x2dkeygen.slice
system-systemd\x2dcoredump.slice loaded inactive dead system-systemd\x2dcoredump.slice
system-systemd\x2dfsck.slice loaded active active system-systemd\x2dfsck.slice
system.slice loaded active active System Slice
user-0.slice loaded active active User Slice of UID 0
user-1000.slice loaded active active User Slice of UID 1000
user.slice loaded active active User and Session Slice
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
11 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.
[root@testvm1 ~]#
Hal pertama yang harus diperhatikan tentang data ini adalah ia menunjukkan irisan pengguna untuk UID 0 (root) dan 1000, yang merupakan login pengguna saya. Ini hanya menampilkan irisan dan bukan layanan yang merupakan bagian dari setiap irisan. Data ini menunjukkan bahwa irisan dibuat untuk setiap pengguna pada saat mereka masuk. Ini dapat menyediakan cara untuk mengelola semua tugas pengguna sebagai entitas cgroup tunggal.
Jelajahi hierarki cgroup
Sejauh ini semuanya baik-baik saja, tetapi cgroup bersifat hierarkis, dan semua unit layanan dijalankan sebagai anggota salah satu cgroup. Melihat hierarki itu mudah dan menggunakan satu perintah lama dan satu perintah baru yang merupakan bagian dari systemd.
ps
perintah dapat digunakan untuk memetakan proses dan lokasinya dalam hierarki cgroup. Perhatikan bahwa perlu untuk menentukan kolom data yang diinginkan saat menggunakan ps
memerintah. Saya secara signifikan mengurangi volume output dari perintah di bawah ini, tetapi saya mencoba untuk membiarkan cukup sehingga Anda dapat merasakan apa yang mungkin Anda temukan di sistem Anda:
[root@testvm1 ~]# ps xawf -eo pid,user,cgroup,args
PID USER CGROUP COMMAND
2 root - [kthreadd]
3 root - \_ [rcu_gp]
4 root - \_ [rcu_par_gp]
6 root - \_ [kworker/0:0H-kblockd]
9 root - \_ [mm_percpu_wq]
10 root - \_ [ksoftirqd/0]
11 root - \_ [rcu_sched]
12 root - \_ [migration/0]
13 root - \_ [cpuhp/0]
14 root - \_ [cpuhp/1]
<SNIP>
625406 root - \_ [kworker/3:0-ata_sff]
625409 root - \_ [kworker/u8:0-events_unbound]
1 root 0::/init.scope /usr/lib/systemd/systemd --switched-root --system --deserialize 30
588 root 0::/system.slice/systemd-jo /usr/lib/systemd/systemd-journald
599 root 0::/system.slice/systemd-ud /usr/lib/systemd/systemd-udevd
741 root 0::/system.slice/auditd.ser /sbin/auditd
743 root 0::/system.slice/auditd.ser \_ /usr/sbin/sedispatch
764 root 0::/system.slice/ModemManag /usr/sbin/ModemManager
765 root 0::/system.slice/NetworkMan /usr/sbin/NetworkManager --no-daemon
767 root 0::/system.slice/irqbalance /usr/sbin/irqbalance --foreground
779 root 0::/system.slice/mcelog.ser /usr/sbin/mcelog --ignorenodev --daemon --foreground
781 root 0::/system.slice/rngd.servi /sbin/rngd -f
782 root 0::/system.slice/rsyslog.se /usr/sbin/rsyslogd -n
<SNIP>
893 root 0::/system.slice/sshd.servi sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
1130 root 0::/user.slice/user-0.slice \_ sshd: root [priv]
1147 root 0::/user.slice/user-0.slice | \_ sshd: root@pts/0
1148 root 0::/user.slice/user-0.slice | \_ -bash
1321 root 0::/user.slice/user-0.slice | \_ screen
1322 root 0::/user.slice/user-0.slice | \_ SCREEN
1323 root 0::/user.slice/user-0.slice | \_ /bin/bash
498801 root 0::/user.slice/user-0.slice | | \_ man systemd.resource-control
498813 root 0::/user.slice/user-0.slice | | \_ less
1351 root 0::/user.slice/user-0.slice | \_ /bin/bash
123293 root 0::/user.slice/user-0.slice | | \_ man systemd.slice
123305 root 0::/user.slice/user-0.slice | | \_ less
1380 root 0::/user.slice/user-0.slice | \_ /bin/bash
625412 root 0::/user.slice/user-0.slice | | \_ ps xawf -eo pid,user,cgroup,args
625413 root 0::/user.slice/user-0.slice | | \_ less
246795 root 0::/user.slice/user-0.slice | \_ /bin/bash
625338 root 0::/user.slice/user-0.slice | \_ /usr/bin/mc -P /var/tmp/mc-root/mc.pwd.246795
625340 root 0::/user.slice/user-0.slice | \_ bash -rcfile .bashrc
1218 root 0::/user.slice/user-1000.sl \_ sshd: dboth [priv]
1233 dboth 0::/user.slice/user-1000.sl \_ sshd: dboth@pts/1
1235 dboth 0::/user.slice/user-1000.sl \_ -bash
<SNIP>
1010 root 0::/system.slice/atd.servic /usr/sbin/atd -f
1011 root 0::/system.slice/crond.serv /usr/sbin/crond -n
1098 root 0::/system.slice/lxdm.servi /usr/sbin/lxdm-binary
1106 root 0::/system.slice/lxdm.servi \_ /usr/libexec/Xorg -background none :0 vt01 -nolisten tcp -novtswitch -auth /var/run/lxdm/lxdm-:0.auth
370621 root 0::/user.slice/user-1000.sl \_ /usr/libexec/lxdm-session
370631 dboth 0::/user.slice/user-1000.sl \_ xfce4-session
370841 dboth 0::/user.slice/user-1000.sl \_ /usr/bin/ssh-agent /bin/sh -c exec -l bash -c "/usr/bin/startxfce4"
370911 dboth 0::/user.slice/user-1000.sl \_ xfwm4 --display :0.0 --sm-client-id 2dead44ab-0b4d-4101-bca4-e6771f4a8ac2
370930 dboth 0::/user.slice/user-1000.sl \_ xfce4-panel --display :0.0 --sm-client-id 2ce38b8ef-86fd-4189-ace5-deec1d0e0952
370942 dboth 0::/user.slice/user-1000.sl | \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libsystray.so 6 23068680 systr
ay Notification Area Area where notification icons appear
370943 dboth 0::/user.slice/user-1000.sl | \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libpulseaudio-plugin.so 8 2306
8681 pulseaudio PulseAudio Plugin Adjust the audio volume of the PulseAudio sound system
370944 dboth 0::/user.slice/user-1000.sl | \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libxfce4powermanager.so 9 2306
8682 power-manager-plugin Power Manager Plugin Display the battery levels of your devices and control the brightness of your display
370945 dboth 0::/user.slice/user-1000.sl | \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libnotification-plugin.so 10 2
3068683 notification-plugin Notification Plugin Notification plugin for the Xfce panel
370948 dboth 0::/user.slice/user-1000.sl | \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libactions.so 14 23068684 acti
ons Action Buttons Log out, lock or other system actions
370934 dboth 0::/user.slice/user-1000.sl \_ Thunar --sm-client-id 2cfc809d8-4e1d-497a-a5c5-6e4fa509c3fb --daemon
370939 dboth 0::/user.slice/user-1000.sl \_ xfdesktop --display :0.0 --sm-client-id 299be0608-4dca-4055-b4d6-55ec6e73a324
370962 dboth 0::/user.slice/user-1000.sl \_ nm-applet
<SNIP>
Anda dapat melihat seluruh hierarki dengan systemd-cgls
perintah, yang sedikit lebih sederhana karena tidak memerlukan opsi yang rumit.
Saya telah mempersingkat tampilan pohon ini secara signifikan. juga, tetapi saya meninggalkan cukup untuk memberi Anda gambaran tentang jumlah data serta jenis entri yang harus Anda lihat ketika Anda melakukan ini di sistem Anda. Saya melakukan ini di salah satu mesin virtual saya, dan panjangnya sekitar 200 baris; jumlah data dari stasiun kerja utama saya adalah sekitar 250 baris:
[root@testvm1 ~]# systemd-cgls
Control group /:
-.slice
├─user.slice
│ ├─user-0.slice
│ │ ├─session-1.scope
│ │ │ ├─ 1130 sshd: root [priv]
│ │ │ ├─ 1147 sshd: root@pts/0
│ │ │ ├─ 1148 -bash
│ │ │ ├─ 1321 screen
│ │ │ ├─ 1322 SCREEN
│ │ │ ├─ 1323 /bin/bash
│ │ │ ├─ 1351 /bin/bash
│ │ │ ├─ 1380 /bin/bash
│ │ │ ├─123293 man systemd.slice
│ │ │ ├─123305 less
│ │ │ ├─246795 /bin/bash
│ │ │ ├─371371 man systemd-cgls
│ │ │ ├─371383 less
│ │ │ ├─371469 systemd-cgls
│ │ │ └─371470 less
│ │ └─[email protected] …
│ │ ├─dbus-broker.service
│ │ │ ├─1170 /usr/bin/dbus-broker-launch --scope user
│ │ │ └─1171 dbus-broker --log 4 --controller 12 --machine-id 3bccd1140fca488187f8a1439c832f07 --max-bytes 100000000000000 --max-fds 25000000000000 --max->
│ │ ├─gvfs-daemon.service
│ │ │ └─1173 /usr/libexec/gvfsd
│ │ └─init.scope
│ │ ├─1137 /usr/lib/systemd/systemd --user
│ │ └─1138 (sd-pam)
│ └─user-1000.slice
│ ├─[email protected] …
│ │ ├─dbus\x2d:1.2\x2dorg.xfce.Xfconf.slice
│ │ │ └─dbus-:[email protected]
│ │ │ └─370748 /usr/lib64/xfce4/xfconf/xfconfd
│ │ ├─dbus\x2d:1.2\x2dca.desrt.dconf.slice
│ │ │ └─dbus-:[email protected]
│ │ │ └─371262 /usr/libexec/dconf-service
│ │ ├─dbus-broker.service
│ │ │ ├─1260 /usr/bin/dbus-broker-launch --scope user
│ │ │ └─1261 dbus-broker --log 4 --controller 11 --machine-id
<SNIP>
│ │ └─gvfs-mtp-volume-monitor.service
│ │ └─370987 /usr/libexec/gvfs-mtp-volume-monitor
│ ├─session-3.scope
│ │ ├─1218 sshd: dboth [priv]
│ │ ├─1233 sshd: dboth@pts/1
│ │ └─1235 -bash
│ └─session-7.scope
│ ├─370621 /usr/libexec/lxdm-session
│ ├─370631 xfce4-session
│ ├─370805 /usr/bin/VBoxClient --clipboard
│ ├─370806 /usr/bin/VBoxClient --clipboard
│ ├─370817 /usr/bin/VBoxClient --seamless
│ ├─370818 /usr/bin/VBoxClient --seamless
│ ├─370824 /usr/bin/VBoxClient --draganddrop
│ ├─370825 /usr/bin/VBoxClient --draganddrop
│ ├─370841 /usr/bin/ssh-agent /bin/sh -c exec -l bash -c "/usr/bin/startxfce4"
│ ├─370910 /bin/gpg-agent --sh --daemon --write-env-file /home/dboth/.cache/gpg-agent-info
│ ├─370911 xfwm4 --display :0.0 --sm-client-id 2dead44ab-0b4d-4101-bca4-e6771f4a8ac2
│ ├─370923 xfsettingsd --display :0.0 --sm-client-id 261b4a437-3029-461c-9551-68c2c42f4fef
│ ├─370930 xfce4-panel --display :0.0 --sm-client-id 2ce38b8ef-86fd-4189-ace5-deec1d0e0952
│ ├─370934 Thunar --sm-client-id 2cfc809d8-4e1d-497a-a5c5-6e4fa509c3fb --daemon
│ ├─370939 xfdesktop --display :0.0 --sm-client-id 299be0608-4dca-4055-b4d6-55ec6e73a324
<SNIP>
└─system.slice
├─rngd.service
│ └─1650 /sbin/rngd -f
├─irqbalance.service
│ └─1631 /usr/sbin/irqbalance --foreground
├─fprintd.service
│ └─303383 /usr/libexec/fprintd
├─systemd-udevd.service
│ └─956 /usr/lib/systemd/systemd-udevd
<SNIP>
├─systemd-journald.service
│ └─588 /usr/lib/systemd/systemd-journald
├─atd.service
│ └─1010 /usr/sbin/atd -f
├─system-dbus\x2d:1.10\x2dorg.freedesktop.problems.slice
│ └─dbus-:[email protected]
│ └─371197 /usr/sbin/abrt-dbus -t133
├─sshd.service
│ └─893 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
├─vboxservice.service
│ └─802 /usr/sbin/VBoxService -f
├─crond.service
│ └─1011 /usr/sbin/crond -n
├─NetworkManager.service
│ └─765 /usr/sbin/NetworkManager --no-daemon
├─switcheroo-control.service
│ └─787 /usr/libexec/switcheroo-control
<SNIP>
Tampilan struktur pohon ini menunjukkan semua pengguna dan irisan sistem serta layanan dan program yang berjalan di setiap cgroup. Perhatikan unit yang disebut "lingkup", yang mengelompokkan program terkait ke dalam unit manajemen, dalam user-1000.slice
dalam daftar di atas. user-1000.slice/session-7.scope
cgroup berisi hierarki program desktop GUI, dimulai dengan sesi manajer tampilan LXDM dan semua subtugasnya, termasuk hal-hal seperti shell Bash dan manajer file GUI Thunar.
Unit cakupan tidak ditentukan dalam file konfigurasi tetapi dihasilkan secara terprogram sebagai hasil dari memulai grup program terkait. Unit cakupan tidak membuat atau memulai proses yang berjalan sebagai bagian dari cgroup itu. Semua proses dalam ruang lingkup adalah sama, dan tidak ada hierarki internal. Kehidupan lingkup dimulai ketika proses pertama dibuat dan berakhir ketika proses terakhir dihancurkan.
Buka beberapa jendela di desktop Anda, seperti emulator terminal, LibreOffice, atau apa pun yang Anda inginkan, lalu alihkan ke konsol virtual yang tersedia dan mulai sesuatu seperti top
atau Komandan Tengah Malam. Jalankan systemd-cgls
perintah pada host Anda, dan perhatikan hierarki keseluruhan dan unit cakupan.
systemd-cgls
perintah memberikan representasi yang lebih lengkap dari hierarki cgroup (dan detail unit yang membentuknya) daripada perintah lain yang saya temukan. Saya lebih suka representasi pohon yang lebih bersih daripada ps
perintah menyediakan.
Dengan sedikit bantuan dari teman-teman saya
Setelah membahas dasar-dasar ini, saya telah merencanakan untuk membahas lebih detail tentang cgroups dan bagaimana menggunakannya, tetapi saya menemukan serangkaian empat artikel bagus oleh Steve Ovens dari Red Hat di situs saudara Opensource.com, Enable Sysadmin. Daripada pada dasarnya menulis ulang artikel Steve, saya memutuskan akan jauh lebih baik untuk memanfaatkan keahlian cgroup-nya dengan menautkan ke mereka:
- Pengantar sysadmin Linux untuk cgroups
- Cara mengelola cgroup dengan CPUShares
- Mengelola cgroup dengan cara yang sulit—secara manual
- Mengelola cgroup dengan systemd
Nikmati dan pelajari dari mereka, seperti yang saya lakukan.
Sumber daya lainnya
Ada banyak informasi tentang systemd yang tersedia di internet, tetapi banyak yang singkat, tumpul, atau bahkan menyesatkan. Selain sumber daya yang disebutkan dalam artikel ini, halaman web berikut menawarkan informasi yang lebih detail dan andal tentang startup systemd. Daftar ini telah berkembang sejak saya memulai rangkaian artikel ini untuk mencerminkan penelitian yang telah saya lakukan.
- Proyek Fedora memiliki panduan praktis yang baik untuk systemd. Ini memiliki hampir semua yang perlu Anda ketahui untuk mengonfigurasi, mengelola, dan memelihara komputer Fedora menggunakan systemd.
- Proyek Fedora juga memiliki lembar contekan bagus yang merujuk silang perintah SystemV lama ke perintah systemd yang sebanding.
- Halaman manual systemd.unit(5) berisi daftar bagian file unit yang bagus dan opsi konfigurasinya bersama dengan deskripsi singkat masing-masing.
- Dokumentasi Red Hat berisi deskripsi yang baik tentang struktur file Unit serta informasi penting lainnya.
- Untuk informasi teknis terperinci tentang systemd dan alasan pembuatannya, lihat deskripsi Freedesktop.org tentang systemd. Halaman ini adalah salah satu yang terbaik yang saya temukan karena berisi banyak tautan ke dokumentasi penting dan akurat lainnya.
- "Lebih banyak sistem menyenangkan" dari Linux.com menawarkan informasi dan tips sistem yang lebih canggih.
- Lihat halaman manual untuk systemd.resource-control(5).
- Dalam Panduan pengguna dan administrator kernel Linux , lihat entri Grup Kontrol v2.
Ada juga serangkaian artikel yang sangat teknis untuk sysadmin Linux oleh Lennart Poettering, perancang dan pengembang utama systemd. Artikel-artikel ini ditulis antara April 2010 dan September 2011, tetapi masih relevan sekarang seperti dulu. Banyak hal bagus lainnya yang telah ditulis tentang systemd dan ekosistemnya didasarkan pada makalah ini.
- Memikirkan kembali PID 1
- systemd untuk Administrator, Bagian I
- systemd untuk Administrator, Bagian II
- systemd untuk Administrator, Bagian III
- systemd untuk Administrator, Bagian IV
- systemd untuk Administrator, Bagian V
- systemd untuk Administrator, Bagian VI
- systemd untuk Administrator, Bagian VII
- systemd untuk Administrator, Bagian VIII
- systemd untuk Administrator, Bagian IX
- systemd untuk Administrator, Bagian X
- systemd untuk Administrator, Bagian XI