Penjelasan Nilai yang Terlihat di Layar Linux htop/top (2019)
(peteris.rocks)- Dengan layar htop di Ubuntu Server 16.04 x64 sebagai titik awal, artikel ini menelusuri apa sebenarnya arti uptime, load average, Tasks, PID, tree proses, status, waktu CPU, prioritas, dan metrik memori melalui
/procserta keluaran perintah - Banyak nilai di layar berasal dari procfs dan file sistem seperti
/etc/passwd,/etc/group,/etc/shadow,/etc/nsswitch.conf; denganstraceAnda dapat memeriksa file apa saja yang dibaca program - Load average bukan nilai yang sama dengan penggunaan CPU, melainkan moving average dengan peluruhan eksponensial yang mencakup proses yang sedang berjalan, menunggu dijalankan, serta proses dalam status uninterruptible
- Kode status seperti
R,S,D,Z,T,tterkait dengan signal,kill, dan perilakufork/exec/wait, sehingga menjadi petunjuk untuk menilai mengapa proses berhenti atau tetap tersisa VIRT,RES,SHR,MEM%menampilkan memori virtual, memori fisik, dan memori yang dapat dibagikan dari sudut pandang berbeda, sehingga sulit menyimpulkan penggunaan memori aktual hanya dari satu angka
Dari mana nilai htop berasal
uptimemenunjukkan sudah berapa lama sistem berjalan, dan informasi yang sama juga dapat dilihat dengan perintahuptime- Program
uptimemembaca/proc/uptime- Angka pertama adalah total waktu dalam detik sejak sistem dinyalakan
- Angka kedua adalah waktu dalam detik ketika sistem berada dalam keadaan idle
- Pada sistem multicore, waktu idle dijumlahkan per core sehingga dapat lebih besar daripada total uptime
- Dengan
strace uptime 2>&1 | grep openataustrace -e open uptime, Anda dapat melihat file yang dibuka olehuptime- Contoh keluarannya mencakup
/proc/uptime,/var/run/utmp,/proc/loadavg
- Contoh keluarannya mencakup
- Angka di
/proc/uptimecocok digunakan oleh program atau skrip, sedangkan keluaranuptimediformat agar mudah dibaca manusia
Load average dan penggunaan CPU
- Tiga nilai pertama di
/proc/loadavgmenunjukkan load average sistem selama 1 menit, 5 menit, dan 15 menit terakhir - Nilai keempat menampilkan jumlah proses yang saat ini sedang berjalan dan total jumlah proses dalam bentuk seperti
1/120, sedangkan nilai terakhir adalah PID terakhir yang digunakan - Saat proses baru dijalankan, PID akan dialokasikan; PID biasanya meningkat lalu digunakan ulang ketika habis
- PID 1 dimiliki oleh
/sbin/inityang dimulai saat boot
- PID 1 dimiliki oleh
- Jika di
htophanya terlihat satu proses yang sedang berjalan, proses itu bisa jadihtopitu sendiri sleep 30tidak sedang berjalan, melainkan berada dalam status sleep, sehingga tidak menambah jumlah running process- Pekerjaan yang terus menggunakan CPU seperti
cat /dev/urandom > /dev/nullmenaikkan jumlah running process dan load average - Load number adalah nilai yang menghitung proses yang sedang berjalan atau menunggu dijalankan, serta proses dalam status uninterruptible
- Load average bukan rata-rata sederhana, melainkan moving average dengan peluruhan eksponensial
- Load average 1 menit pun tidak hanya mencerminkan 60 detik terakhir; ia memberi bobot lebih besar pada 1 menit terbaru sambil tetap memasukkan sebagian aktivitas sebelumnya
- Pada sistem CPU tunggal, jika ada satu proses CPU-bound, load average
1.00dapat disederhanakan sebagai penggunaan CPU 100%- Pada sistem 2-core, situasi yang sama dapat dianggap sebagai penggunaan CPU 50%
- Load average yang setara dengan penggunaan CPU 100% pada sistem 2-core dapat disederhanakan menjadi
2.00
- Penyederhanaan ini tidak selalu benar karena proses dalam status uninterruptible ikut dihitung dalam load
- Situasi load average tinggi tetapi penggunaan CPU tidak tinggi juga mungkin terjadi
- Penggunaan CPU sesaat dapat diperiksa dengan
mpstatsudo apt install sysstat -ympstat 1
Tasks, PID, tree proses
- Tasks di kanan atas
htopmenunjukkan total jumlah proses dan jumlah proses yang sedang berjalan - Kernel Linux secara internal menyebut proses sebagai task, dan
htopmenggunakan Tasks alih-alih Processes untuk menghemat ruang layar - Tampilan thread dapat di-toggle dengan
Shift+H- Jika terlihat seperti
Tasks: 23, 10 thr, berarti thread sedang ditampilkan
- Jika terlihat seperti
- Tampilan kernel thread dapat di-toggle dengan
Shift+K- Jika terlihat seperti
Tasks: 23, 40 kthr, berarti kernel thread sedang ditampilkan
- Jika terlihat seperti
- Setiap kali proses baru dimulai, PID dialokasikan
- Jika dijalankan di background seperti
sleep 1000 &, nomor job dan PID akan ditampilkan $!dibashdiekspansi menjadi ID proses background terakhir
- Jika dijalankan di background seperti
- Informasi terkait proses berada di bawah
/proc/<pid>//proc/<pid>/cmdlineberisi perintah yang dijalankan, dan argumen dipisahkan dengan byte\0- Anda dapat melihatnya agar mudah dibaca dengan
tr '\0' '\n' < /proc/<pid>/cmdlineataustrings /proc/<pid>/cmdline /proc/<pid>/cwdadalah link ke direktori kerja saat ini, dan/proc/<pid>/exeadalah link ke binary yang dijalankan
- Tool diagnostik seperti
htop,top,psmembaca detail proses dari/proc/<pid>/<file> - Pihak yang membuat proses baru disebut parent process, sedangkan yang baru dibuat disebut child process; hubungan ini membentuk tree proses
- Dengan menekan
F5dihtop, Anda dapat melihat hierarki prosesps fdanpstree -ajuga menampilkan hubungan yang sama
- Saat menjalankan
datedibash,bashmembuat salinan dirinya denganfork, memuat/bin/dateke memori denganexec, lalubashsebagai parent menunggu child selesai /sbin/initdimulai saat boot dan menjalankansshd; saat koneksi SSH dibuat,sshdmembuat proses sesi, lalu sesi tersebut menjalankan shellbash
Pengguna dan hak akses proses
- Setiap proses dimiliki oleh pengguna, dan pengguna direpresentasikan dengan ID numerik
- ID pengguna suatu proses dapat dilihat pada entri
Uiddi/proc/<pid>/status - Perintah seperti
id 1000menampilkan nama pengguna dan grup yang sesuai dengan ID numerik tersebut idmemilih sumber resolusi nama sesuai pengaturan/etc/nsswitch.conf- Pada sistem contoh, perintah ini membaca
/etc/passwddan/etc/group compatadalah Compatibility mode; sama sepertifiles, tetapi mengizinkan entri khusus- Informasi pengguna juga dapat disimpan di database atau layanan lain seperti LDAP
- Pada sistem contoh, perintah ini membaca
/etc/passwddan/etc/groupadalah file teks biasa yang memetakan ID numerik ke nama yang dapat dibaca manusia- Informasi kata sandi sebenarnya berada di
/etc/shadow$6$berarti algoritme hashingsha512- Setelah itu diikuti salt acak untuk mencegah serangan rainbow table, serta hash dari password+salt
- Secara default, program dijalankan dengan hak akses pengguna yang menjalankannya
- Hal ini tetap sama meskipun pemilik file executable adalah pengguna lain
- Untuk menjalankan sebagai pengguna lain atau
root, gunakansudosudo iddijalankan dengan UID 0 milikroot- Dapat dijalankan sebagai pengguna tertentu seperti
sudo -u daemon id
- Jika mencoba menulis langsung ke
/etc/sudoersdengan redirect, hanyaechoyang dijalankan sebagai root sementara append dilakukan sebagai pengguna saat ini, sehingga bisa gagalecho "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoerssudo bash -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers"
/etc/sudoersharus diedit dengansudo visudo- Ini memvalidasi isi sebelum disimpan, sehingga mencegah kesalahan yang membuat
sudotidak bisa digunakan
- Ini memvalidasi isi sebelum disimpan, sehingga mencegah kesalahan yang membuat
/usr/bin/passwddapat menulis ke/etc/shadowmeskipun dijalankan oleh pengguna biasa- Karena ada
spada permission file, file ini berjalan sebagai executable setuid - Program dijalankan dengan hak akses
root, yaitu pemilik file executable tersebut - Executable setuid milik root dapat ditemukan dengan
find /bin -user root -perm -u+s
- Karena ada
Kode status proses
- Kolom status di
htopditampilkan dengan namaS, dan nilai utamanya adalah sebagai berikutR: running atau runnable, sedang berjalan atau menunggu di run queueS: interruptible sleep, menunggu penyelesaian eventD: uninterruptible sleep, biasanya menunggu I/OZ: defunct zombie, sudah selesai tetapi belum di-reap oleh parentT: dihentikan oleh job control signalt: dihentikan oleh debugger saat tracingX: dead, status yang seharusnya tidak terlihat
psjuga menampilkan substate sepertiSs,R+,Ss+-
R: sedang berjalan atau dapat dijalankan
- Status
Rberarti proses sedang berjalan saat ini atau menunggu di antrean eksekusi - Kode sumber program setelah dikompilasi menjadi instruksi CPU, lalu saat dijalankan dimuat ke memori dan CPU mengeksekusi instruksi tersebut
- Sedang berjalan berarti CPU secara fisik mengeksekusi instruksi
- Status
-
S: sleep yang dapat diinterupsi
- Pada status
S, instruksi proses tidak dieksekusi oleh CPU dan proses menunggu event atau kondisi - Ketika event terjadi, kernel mengubah statusnya menjadi running
sleep 1000adalah contoh menunggu selama waktu yang ditentukan- Status ini dapat diinterupsi dengan signal
- Di
htop, signal dapat dikirim dengan menekanF9 killadalah system call untuk mengirim signal, dan/bin/killadalah program di userland yang memanggilnya- Signal default adalah
TERM, yang meminta proses untuk berhenti - Signal adalah angka; namanya biasanya ditulis dengan huruf besar dan dapat diberi prefix
SIG - Contoh:
INT,KILL,STOP,CONT,HUP kill -INT 10089,kill -2 10089, dan/bin/kill -2 10089melakukan hal yang sama- Saat menekan
CTRL+C,bashmengirimSIGINTke foreground process - Mengirim
SIGINTatauSIGTERMtidak berarti proses pasti berhenti - Program dapat memasang signal handler untuk melakukan pekerjaan pembersihan lalu berhenti
SIGKILLatau9membuat kernel memaksa proses berhenti tanpa memberi kesempatan untuk merespons
- Pada status
-
D: sleep yang tidak dapat diinterupsi
- Status
Dtidak dapat dibangunkan dengan signal, dan karenaSIGKILLjuga merupakan signal, proses seperti ini tidak dapat di-kill - Status ini digunakan ketika proses harus menunggu tanpa terputus, atau ketika event diperkirakan akan terjadi dengan cepat
- Contoh: disk read/write
- Uninterruptible process biasanya bisa berada dalam kondisi menunggu I/O setelah page fault
- Status ini dapat muncul saat ada keterlambatan baca/tulis NFS
- Juga dapat muncul ketika memori yang tersedia terlalu sedikit sehingga proses banyak melakukan swap
- Sebagai contoh, jika menjalankan
sudo mount 8.8.8.8:/tmp /tmp &,/sbin/mount.nfsakan berada dalam statusD - Jika dilihat dengan
strace, system callmountmemblokir proses - Dengan memberi opsi
intrpadamount, proses dapat dijalankan secara interruptible sudo mount 8.8.8.8:/tmp /tmp -o intr
- Status
-
Z: proses zombie
- Status
Zberarti proses sudah selesai tetapi parent belum me-reap proses tersebut - Proses zombie bisa normal jika hanya ada sebentar
- Proses zombie yang tersisa lama dapat menunjukkan bug pada program
- Proses zombie tidak mengonsumsi memori dan hanya memakai PID
- Proses zombie itu sendiri tidak dapat di-
kill - Anda dapat mengirim
SIGCHLDke parent process untuk meminta parent me-reap zombie - Jika parent process di-kill, parent dan zombie-nya dapat dihapus
- Status zombie dapat direproduksi dengan program C yang setelah
fork, child melakukanexit(0)dan parent melakukansleep(20) - Setelah parent selesai, zombie akan hilang
- Alasan zombie dipertahankan adalah agar parent dapat memeriksa exit code child melalui system call
wait
- Status
-
T dan t: proses yang dihentikan
- Status
Tberarti proses dihentikan oleh job control signal - Jika menekan
CTRL+Zsaat menjalankancat /dev/urandom > /dev/null, proses menjadi statusT - Dapat dijalankan kembali dengan
fg - Proses juga dapat dihentikan dengan signal
STOPdan dilanjutkan dengan signalCONT - Status
tberarti proses dihentikan saat sedang di-trace oleh debugger - Jika attach dengan
sudo gdb -p <pid>ke proses yang dijalankan dengannc -l 1234 &, proses tersebut menjadi statust
- Status
Waktu CPU, niceness, priority
- Linux adalah sistem operasi multitasking, sehingga bahkan pada satu CPU pun beberapa proses tampak berjalan secara bersamaan
- Pada kenyataannya, satu CPU hanya bisa menjalankan satu instruksi pada satu waktu, sehingga digunakan time sharing
- Satu proses berjalan sebentar lalu dihentikan
- Proses lain yang menunggu untuk dijalankan dieksekusi secara bergiliran
- Interval singkat ketika satu proses berjalan disebut time slice
- Time slice biasanya hanya beberapa milidetik, jadi tidak terlalu terasa jika load sistem tidak tinggi
- Pada satu core, jika load average adalah
1.0, CPU dapat dianggap digunakan 100%- Jika lebih tinggi dari
1.0, jumlah proses yang ingin berjalan lebih banyak daripada yang dapat ditangani CPU, sehingga bisa terjadi slowdown atau delay - Jika lebih rendah dari
1.0, CPU kadang berada dalam keadaan idle
- Jika lebih tinggi dari
- Alasan running time proses bisa tidak persis sama dengan waktu yang benar-benar berlalu juga dapat dijelaskan dengan time sharing
- Jika task yang ingin dijalankan lebih banyak daripada jumlah CPU core yang tersedia, harus ditentukan task mana yang dijalankan lebih dulu
- Scheduler kernel Linux memilih proses berikutnya dari run queue, bergantung pada algoritme scheduler kernel
- Secara umum scheduler tidak bisa dikendalikan langsung, tetapi kita bisa memberi tahu proses mana yang lebih penting
- Niceness yang ditampilkan sebagai
NIadalah priority di user-space- Rentangnya dari
-20hingga19 -20adalah prioritas tertinggi dan19adalah prioritas terendah- Proses yang lebih nice dapat dianggap lebih banyak mengalah kepada proses yang kurang nice
- Rentangnya dari
PRIadalah priority di kernel-space yang digunakan kernel Linux- Rentangnya dari
0hingga139 0~99adalah real time,100~139adalah rentang untuk user
- Rentangnya dari
- Hubungan antara nilai nice dan priority dijelaskan sebagai
PR = 20 + NI-20~+19padaNImenjadi0~39padaPR, dan ini dipetakan ke100~139
- Niceness sebelum eksekusi diatur dengan
nice -n niceness program - Niceness proses yang sedang berjalan diubah dengan
renice -n niceness -p PID - Warna penggunaan CPU adalah sebagai berikut
- Blue: thread berprioritas rendah,
nice > 0 - Green: thread berprioritas normal
- Red: kernel thread
- Blue: thread berprioritas rendah,
Metrik memori: VIRT, RES, SHR, MEM%
- Proses tampak seolah-olah berada sendirian di memori, dan ini diimplementasikan dengan memori virtual
- Proses tidak mengakses memori fisik secara langsung, melainkan memiliki virtual address space sendiri
- Kernel dapat menerjemahkan virtual memory address menjadi physical memory atau memetakan sebagian ke disk
- Karena itu, proses bisa terlihat menggunakan memori lebih banyak daripada memori yang terpasang di komputer
- Penggunaan memori proses berbeda-beda tergantung apakah mencakup item berikut
- shared library
- disk-mapped memory
- swapped out memory
- Warna penggunaan memori adalah sebagai berikut
- Green: used memory
- Blue: buffers
- Orange: cache
-
VIRT/VSZ
VIRTadalah total jumlah virtual memory yang digunakan task- Mencakup code, data, shared library, swapped out page, page yang sudah di-mapped tetapi belum digunakan
- Meski aplikasi meminta 1GB dan hanya menggunakan 1MB,
VIRTbisa tampil sebagai 1GB - Meski file 1GB di-
mmapdan tidak benar-benar digunakan,VIRTbisa ditampilkan sebagai 1GB - Dalam sebagian besar kasus,
VIRTbukan angka yang berguna
-
RES/RSS
RESadalah physical memory yang tidak di-swapped out, yaitu penggunaan resident memory yang saat ini berada di memori fisikRESdapat merepresentasikan penggunaan memori aktual lebih baik daripadaVIRT, tetapi tetap memiliki keterbatasan- Tidak mencakup swapped out memory
- Sebagian memori dapat dibagikan dengan proses lain
- Jika sebuah proses menggunakan memori 1GB lalu melakukan
fork(),RESkedua proses masing-masing bisa terlihat 1GB, tetapi karena copy-on-write di Linux, sebenarnya yang digunakan mungkin hanya 1GB
-
SHR
SHRadalah jumlah shared memory yang digunakan task- Mencerminkan memori yang berpotensi dapat dibagikan dengan proses lain
- Contoh program C menunjukkan bagaimana nilai
VIRT,RES,SHRberubah melaluimalloc, penggunaan sebagian memori,fork, dan penulisan memori tambahan - Bagian contoh memori tersebut masih ditinggalkan sebagai TODO
-
MEM%
MEM%adalah persentase available physical memory yang saat ini digunakan task- Nilainya adalah
RESdibagi total RAM - Contoh: jika
RESadalah400Mdan RAM 8GB, maka400/8192*100 = 4.88%
Proses bawaan Ubuntu Server 16.04
-
Meneliti proses yang dimulai pada Ubuntu Server 16.04.1 LTS x64 di droplet Digital Ocean yang masih fresh
-
/sbin/init/sbin/initmengoordinasikan sisa proses boot dan menyusun lingkungan pengguna- Menjadi parent atau grandparent dari proses-proses yang dimulai otomatis
- Hasil
dpkg -S /sbin/initadalahsystemd-sysv: /sbin/init, sehingga pada sistem tersebut ini adalah systemd - Tidak terjadi apa-apa meskipun di-kill
-
/lib/systemd/systemd-journaldsystemd-journaldadalah system service yang mengumpulkan dan menyimpan data logging- Membuat dan memelihara journal yang terstruktur dan terindeks berdasarkan informasi log yang diterima dari berbagai source
- Menggunakan format file khusus yang dioptimalkan untuk pesan log, bukan file log teks biasa yang sederhana
- Dilihat dengan
journalctl journalctl _COMM=sshdjournalctl _COMM=sshd -o json-prettyjournalctl --since yesterdayjournalctl -bjournalctl -fjournalctl --disk-usagejournalctl --vacuum-size=1G- Sepertinya tidak bisa dihapus atau dinonaktifkan; yang bisa dilakukan hanya mematikan logging
-
/sbin/lvmetad -flvmetadmelakukan cache metadata LVM agar perintah LVM dapat membaca metadata tanpa disk scan- Disk scan memakan waktu dan dapat mengganggu operasi normal sistem serta disk
- LVM dapat dipandang sebagai “dynamic partitions” yang memungkinkan pembuatan, resize, dan penghapusan logical volume saat Linux sedang berjalan
- Disimpulkan bahwa ini perlu dipertahankan jika sedang menggunakan LVM
-
/lib/systemd/udevdsystemd-udevdmendengarkan kernel uevent dan, untuk setiap event, menjalankan instruksi yang cocok dari udev rules- udev adalah device manager kernel Linux dan terutama mengelola device node di directory
/dev - Tidak yakin apakah diperlukan di virtual server
-
/lib/systemd/timesyncdsystemd-timesyncdadalah system service yang menyinkronkan local system clock dengan remote NTP server- Menggantikan
ntpd - Pada sistem contoh,
timedatectl statusmenunjukkan network time dan NTP synchronized sebagaiyes - Pada output
netstat, hanya port SSH yang terlihat dalam status listening, dan tidak membuka banyak port UDP 123 sepertintpddi Ubuntu 14.04
-
/usr/sbin/atd -fatdmenjalankan job yang dimasukkan ke queue untuk dijalankan nantiatdanbatchmembaca perintah dari stdin atau file untuk dijalankan nanti- Berbeda dari cron yang menjadwalkan eksekusi berulang,
atberjalan satu kali pada waktu tertentu - Dalam contoh, file dibuat 1 menit kemudian dengan
echo "touch /tmp/yolo.txt" | at now + 1 minute - Jika tidak digunakan, hapus dengan
sudo apt remove at -y --purge
-
/usr/lib/snapd/snapd- Snappy Ubuntu Core diperkenalkan sebagai rendition Ubuntu yang menggunakan transactional update
- snap dijelaskan sebagai universal Linux package format yang memungkinkan satu binary package berjalan di desktop, server, cloud, dan device Linux
- Dapat dipahami seperti deb package yang disederhanakan, dengan dependency dibundel dalam satu snap untuk didistribusikan
- Karena belum pernah men-deploy atau mendistribusikan aplikasi dengan snappy di server, dihapus dengan
sudo apt remove snapd -y --purge
-
/usr/bin/dbus-daemon- D-Bus adalah mekanisme IPC dan RPC antara beberapa process yang berjalan bersamaan pada machine yang sama
- Diperlukan untuk desktop environment, tetapi dipertanyakan apakah diperlukan pada server yang menjalankan web app
- Setelah menghapus
dbus,timedatectl statusgagal denganFailed to create bus connection: No such file or directory - Karena itu disimpulkan sebaiknya tetap dipertahankan
-
/lib/systemd/systemd-logindsystemd-logindadalah system service yang mengelola login user
-
/usr/sbin/cron -fcronadalah daemon yang menjalankan scheduled command-fberarti foreground mode, tidak melakukan daemonize- Pekerjaan yang perlu dijalankan secara berkala dapat dijadwalkan dengan cron
crontab -e- Di Ubuntu, disimpulkan bahwa biasanya menggunakan
/etc/cron.hourly,/etc/cron.daily, dan sejenisnya - Log dapat dilihat dengan cara berikut
grep cron /var/log/syslogjournalctl _COMM=cronjournalctl _COMM=cron --since="date" --until="date"- Kemungkinan besar cron akan dipertahankan
- Jika tidak dihapus, dapat dihentikan dan dinonaktifkan dengan
sudo systemctl stop cron,sudo systemctl disable cron apt remove crondapat mencoba menginstal postfix dan lainnya- Itu karena cron menyarankan mail transport agent
-
/usr/sbin/rsyslogd -nrsyslogdadalah system utility yang mendukung message logging- Berperan mengisi file log di
/var/log/, seperti/var/log/auth.log - File konfigurasi berada di
/etc/rsyslog.d - Dapat mengirim log ke server jarak jauh untuk menyusun centralized logging
- Dengan perintah
logger, background script dapat meninggalkan pesan di/var/log/syslog - Meskipun
systemd-journaldsudah ada, rsyslog dan journal memiliki karakteristik yang berbeda, sehingga situasi penggunaan keduanya bersama bisa berguna - Karena itu untuk sementara dipertahankan
-
/usr/sbin/acpidacpidadalah ACPI event daemon- Dirancang untuk memberi tahu user-space program tentang ACPI event
- ACPI digunakan untuk hardware component discovery/configuration, power management, status monitoring, dan sebagainya
- Karena tidak berniat melakukan suspend/resume di virtual server, dicoba untuk menghapusnya
rebootberhasil, tetapi setelahhalt, Digital Ocean masih dikenali sebagai menyala sehingga harus Power Off dari web interface- Karena itu disimpulkan sebaiknya dipertahankan
-
/usr/bin/lxcfs /var/lib/lxcfs/lxcfsadalah FUSE filesystem yang dirancang untuk LXC container- Menyediakan virtualized view untuk sebagian file
/procdan filtered access ke host cgroup filesystem - Membuat uptime, top, dan lainnya di dalam container memiliki hasil yang lebih “correct”
- Jika tidak memakai LXC container, dapat dihapus dengan
sudo apt remove lxcfs -y --purge
-
/usr/lib/accountservice/accounts-daemon- AccountsService menyediakan D-Bus interface dan implementasi untuk melakukan query dan manipulasi informasi user account
- Implementasinya berbasis perintah
usermod(8),useradd(8),userdel(8)
-
Setelah dihapus, apa yang akan rusak dibiarkan dengan ungkapan “Time will tell”
-
/sbin/mdadmmdadmadalah utilitas Linux untuk mengelola dan memantau software RAID device- RAID adalah metode menggunakan beberapa hard drive seolah-olah satu drive
- RAID 0 memperluas drive capacity
- RAID 1, RAID 5, RAID 6, dan RAID 10 bertujuan mencegah data loss saat terjadi drive failure
- Dapat dihapus dengan
sudo apt remove mdadm -y --purge
-
/usr/lib/policykit-1/polkitd --no-debugpolkitdadalah daemon PolicyKit, dan polkit adalah Authorization Framework- Bisa dipahami seperti sudo yang fine-grained
- Dapat memberikan hak kepada non-privileged user untuk melakukan action tertentu sebagai root
- Contoh: mengizinkan reboot di desktop Linux
- Di server, dirangkum bahwa ini dapat dihapus dengan
sudo apt remove policykit-1 -y --purge - Apa yang akan rusak masih tetap menjadi pertanyaan
-
/usr/sbin/sshd -Dsshdadalah OpenSSH Daemon- Opsi
-Dmembuatnya tidak detach dan tidak menjadi daemon, sehingga memudahkan monitoring
-
/sbin/iscsidiscsidadalah background daemon yang berjalan sesuai configuration iSCSI dan mengelola connection- iSCSI adalah standard storage networking berbasis IP, yang meneruskan SCSI command melalui IP network agar remote storage dapat digunakan seperti local disk
- Dapat dihapus dengan
sudo apt remove open-iscsi -y --purge
-
/sbin/agetty --noclear tty1 linuxagettyadalah alternative Linux getty- getty mengelola physical atau virtual terminal, dan ketika koneksi terdeteksi, menampilkan username prompt lalu menjalankan program
login - Di Digital Ocean, terminal ini dapat diakses dan diinteraksikan dari browser melalui
Consolepada droplet details - Setelah menghapus file terkait
getty@tty1.servicedan reboot, koneksi SSH masih bisa dilakukan, tetapi login melalui web console Digital Ocean tidak bisa
-
Sesi SSH, bash, htop
sshd: root@pts/0berarti SSH session penggunarootdisiapkan pada pseudoterminalpts/0- pseudoterminal meng-emulate text terminal nyata
bashadalah shell yang sedang digunakan- Jika diawali dash seperti
-bash, artinya shell dimulai sebagai login shell - Shell yang karakter pertama argument zero-nya adalah
-atau dimulai dengan opsi--loginadalah login shell - Dalam kasus ini, shell membaca set configuration file yang berbeda
htopadalah interactive process viewer yang sedang berjalan di screenshot
Eksperimen penghapusan layanan
- Daftar penghapusan umum adalah sebagai berikut
sudo apt remove lvm2 -y --purgesudo apt remove at -y --purgesudo apt remove snapd -y --purgesudo apt remove lxcfs -y --purgesudo apt remove mdadm -y --purgesudo apt remove open-iscsi -y --purgesudo apt remove accountsservice -y --purgesudo apt remove policykit-1 -y --purge
- Edisi Extreme mencakup pekerjaan berikut
sudo apt remove dbus -y --purgesudo apt remove rsyslog -y --purgesudo apt remove acpid -y --purgesudo systemctl stop cron && sudo systemctl disable cronsudo rm /etc/systemd/system/getty.target.wants/getty@tty1.servicesudo rm /lib/systemd/system/getty@.service
- Konfigurasi nginx, PHP7, dan MySQL yang mengikuti panduan unattended installation of WordPress on Ubuntu Server berfungsi
Lampiran: alat investigasi dan perilaku shell
-
Mencari source code
- Jika
stracesaja tidak cukup, source code dapat dilihat - Cari lokasi binary dengan
which uptime, lalu cari Ubuntu package dengandpkg -S /usr/bin/uptime - Dalam contoh,
uptimetermasuk dalam packageprocps - Di packages.ubuntu.com, Anda dapat mencari package dan menemukan link source repository
- Jika
-
file descriptor dan redirection
- Untuk me-redirect stderr ke stdout, gunakan
2>&1 echo something > fileberarti menulis stdout ke file, sama denganecho something 1> fileecho something 2> filemenulis stderr ke fileecho something 2>1berarti me-redirect stderr ke filename bernama1- Pada
2>&1yang diberi&,1bukan filename, melainkan stream ID
- Untuk me-redirect stderr ke stdout, gunakan
-
Masalah warna PuTTY
- Jika elemen
htoptampak hilang di PuTTY, ini dapat diatasi di pengaturan Window → Colours - Klik kanan title bar
- Change settings...
- Window → Colours
- Pilih Both radio button
- Apply
- Jika elemen
-
Shell sederhana yang dibuat dengan C
- Shell sederhana yang ditulis dalam C menunjukkan penggunaan system call
fork,exec, danwait - Jika input adalah
exit, shell keluar sebagai built-in - Perintah lainnya dijalankan dengan
execlpdi child setelahfork, sementara parent menunggu status selesai denganwaitpid - Contoh eksekusi
date,true, danfalsemasing-masing menampilkan child exit code - Alasan pesan selesainya background process seperti
sleep 1 &baru terlihat setelah menekan Enter adalah karena shell menunggu input, lalu memeriksa status background process saat perintah dimasukkan
- Shell sederhana yang ditulis dalam C menunjukkan penggunaan system call
Item investigasi tersisa dan riwayat revisi
- Item yang ingin ditelusuri lebih lanjut meliputi process state substatus, kernel thread,
/dev/pts, memoriCODE·DATA·SWAP, panjang time slice, algoritme Linux scheduler, core pinning, manual page, warna bar CPU/memory, process ID limit dan fork bomb,lsof,ionice,schedtool, dan lainnya - Revisi dan pembaruan utama mencakup hal-hal berikut
- idle time
/proc/uptimeadalah total dari semua core printfparent/child pada contoh C zombie diperbaiki- Ditambahkan bahwa
apt remove cronmencoba menginstalpostfixkarena dependency MTA iddapat memuat informasi dari source lain selain/etc/passwdmelalui/etc/nsswitch.conf- Penjelasan format password hash
/etc/shadowditambahkan /etc/sudoersharus diedit dengan aman menggunakanvisudo- Penjelasan
MEM%ditambahkan - Bagian load average ditulis ulang
- Signal default untuk
kill 1234diperbaiki dariINTmenjadiTERM - Penjelasan color bar CPU dan memory ditambahkan
- idle time
1 komentar
Komentar Hacker News
Belakangan saya pindah ke btop; antarmukanya terasa cukup modern, berguna, dan informatif sesuai kebutuhan
Seperti yang dikatakan orang lain, tampaknya juga menampilkan konsumsi daya (Watts), serta informasi jaringan, GPU, dan disk
https://github.com/aristocratos/btop
Bilah penggunaan disk tidak bisa dimatikan, jadi kalau jendela konsol tidak sangat besar, grafik kecepatan I/O terlihat sangat tertekan
Grafik CPU/GPU mengambil ruang terlalu besar, dan secara keseluruhan saya ingin tabel file terbuka mendapat lebih banyak ruang
Ada 2 pengaturan yang selalu saya ubah setiap memakai htop, dan dampaknya besar
Pertama, mematikan thread pengguna. Umumnya itu hanya membuat tampilan htop berantakan dan hampir tidak memberi informasi berguna
Kedua, mengaktifkan tampilan pohon proses. Dari mana sebuah proses dimulai sering kali lebih penting daripada informasi lain, dan proses seperti compiler yang memproses banyak file sambil memakan CPU juga jadi lebih mudah dilacak
Secara pribadi, menurut saya keduanya seharusnya menjadi perilaku bawaan htop
Senang melihat penjelasan bahwa memori virtual sulit dipercaya. Cara yang ditampilkan Windows Task Manager secara default mengarah ke sini, dan itu buruk
Resident Set Size (RSS) adalah indikator yang paling dapat dipercaya, sementara nilai lain bisa menggelembung keliru karena hal-hal seperti file yang dipetakan ke memori yang sebenarnya tidak menimbulkan masalah
Misalnya, meski file log 2GB dipetakan ke memori, bagian itu hanya naik ke page saat dibaca, jadi sebenarnya tidak memakai memori nyata; tetapi pengguna melihat prosesnya lalu berkata, “kenapa aplikasi ini memakai memori sebanyak ini?”
Chrome juga sempat mengalami masalah ini sehingga mengurangi penggunaan file yang dipetakan ke memori; bukan karena file yang dipetakan ke memori itu buruk, melainkan karena pengguna bereaksi berlebihan saat melihat angka yang bukan penggunaan memori fisik sebenarnya
Di web bahkan ada panduan yang menyarankan menilai penggunaan dari alokasi memori virtual, tetapi tulisan ini setidaknya menunjukkan bagian itu dengan benar
Referensi: https://en.wikipedia.org/wiki/Proportional_set_size
Kalau memakai I/O file biasa, itu tidak ikut dihitung. Ini menghasilkan konsekuensi yang cukup menarik di cluster HPC yang memantau penggunaan memori tiap job lalu mematikannya jika melebihi jumlah yang diminta
Begitu tekanan memori mulai terjadi, nilainya tidak lagi representatif. Saya sudah beberapa kali melihat keputusan keliru karena salah paham ini, dan pernah menghapus nilai ini dari chart untuk mencegah rekan tim mengambil kesimpulan sebaliknya
Seperti namanya, ia hanya menunjukkan bagian yang dipetakan ke memori fisik yang dialokasikan secara privat per proses, dan lebih dekat dengan Resident Set di Unix
Mungkin yang dimaksud adalah penggunaan memori di tab Performance, tetapi bisa disalahpahami sebagai semua item penggunaan memori, jadi saya bedakan di sini
Di top, menggunakan karakter
>akan membuatnya diurutkan berdasarkan penggunaan memoriSaya sesekali memakainya saat mencari penyebab host melambat, dan bisa juga melihat
swapdmemakan CPUMhuruf besar, dan untuk CPUPhuruf besarMembaca tulisan seperti ini membuat saya sadar bahwa meski sudah memakai Linux setiap hari selama lebih dari 20 tahun, saya masih baru memanfaatkan sebagian kecil dari potensinya. Tulisan yang bagus
Rasanya HN mulai pulih lagi
Semoga ini bukan masa zombie berjalan HN
Bagi yang belum tahu
nmon, ini juga layak dilihatMenekan
hmenampilkan daftar monitor yang tersedia, menekannya lagi menyembunyikannya, danquntuk keluarhttps://nmon.sourceforge.io/pmwiki.php
Khususnya throughput disk dan I/O yang dilihat dengan tombol
ddanDcukup bergunaSaya suka karena grafik penggunaan Wide CPU menangani jumlah core besar dengan mudah
Dengan cara penggunaan yang berbeda dari keluarga
*top, saya jadi lebih menyukai laporan diferensial alapsyang tenang dan laporan seluruh sistem sepertivmstatDengan begitu, semuanya tetap ada di buffer scrollback terminal: https://github.com/c-blake/procs
Ditulis dalam bahasa Nim yang tidak umum tetapi efisien dan ekspresif
Saya mem-bookmark tulisan ini sejak 2016, dan selama bertahun-tahun sudah berkali-kali kembali menjadikannya rujukan