- Ubuntu Server 16.04 x64 üzerindeki htop ekranını çıkış noktası alarak uptime, load average, Tasks, PID, süreç ağacı, durum, CPU zamanı, öncelik ve bellek göstergelerinin gerçekte ne anlama geldiği
/procve komut çıktıları üzerinden izleniyor - Ekrandaki birçok değer procfs ve
/etc/passwd,/etc/group,/etc/shadow,/etc/nsswitch.confgibi sistem dosyalarından gelir;straceile programın hangi dosyaları okuduğu doğrulanabilir - Load average, CPU kullanım oranıyla aynı şey değildir; çalışan, çalışmayı bekleyen ve uninterruptible durumdaki süreçleri içeren üstel sönümlü hareketli ortalamadır
R,S,D,Z,T,tgibi durum kodları signal,kill,fork/exec/waitdavranışlarıyla bağlantılıdır; bu yüzden bir sürecin neden durduğu ya da neden sistemde kaldığına dair ipucu verirVIRT,RES,SHR,MEM%, sanal bellek, fiziksel bellek ve paylaşılabilir belleği farklı açılardan gösterir; bu nedenle tek bir sayıya bakarak gerçek bellek kullanımını kesin olarak söylemek zordur
htop değerleri nereden gelir?
uptime, sistemin ne kadar süredir çalıştığını gösterir; aynı bilgiuptimekomutuyla da görülebiliruptimeprogramı/proc/uptimedosyasını okur- İlk sayı, sistemin açık kaldığı toplam süreyi saniye cinsinden gösterir
- İkinci sayı, sistemin idle durumda kaldığı süreyi saniye cinsinden gösterir
- Çok çekirdekli sistemlerde idle süresi çekirdek bazında toplandığı için toplam uptime'dan büyük olabilir
strace uptime 2>&1 | grep openveyastrace -e open uptimeileuptimekomutunun açtığı dosyalar görülebilir- Örnek çıktıda
/proc/uptime,/var/run/utmp,/proc/loadavgyer alır
- Örnek çıktıda
/proc/uptimeiçindeki sayılar programlar veya betikler için uygundur;uptimeçıktısı ise insanlar için daha okunaklı biçimde formatlanır
Load average ve CPU kullanım oranı
/proc/loadavgiçindeki ilk üç değer, son 1 dakika, 5 dakika, 15 dakika için sistem load average'ını gösterir- Dördüncü değer, o anda çalışan süreç sayısı ile toplam süreç sayısını
1/120gibi gösterir; son değer ise en son kullanılan PID'dir - Yeni bir süreç çalıştırıldığında bir PID atanır; PID genelde artar, tükendiğinde ise yeniden kullanılabilir
- PID 1, önyükleme sırasında başlatılan
/sbin/initsürecine aittir
- PID 1, önyükleme sırasında başlatılan
htopiçinde yalnızca bir çalışan süreç görünüyorsa bu süreçhtop'un kendisi olabilirsleep 30, çalışan durumda değil uyku durumunda olduğu için running process sayısını artırmazcat /dev/urandom > /dev/nullgibi sürekli CPU kullanan işler, çalışan süreç sayısını ve load average'ı artırır- Load number, çalışan, çalışmayı bekleyen ve uninterruptible durumdaki süreçleri sayan değerdir
- Load average basit bir ortalama değil, üstel sönümlü hareketli ortalamadır
- 1 dakikalık load average bile yalnızca son 60 saniyeyi yansıtmaz; son 1 dakikaya daha fazla ağırlık verirken önceki etkinliğin bir kısmını da içerir
- Tek CPU'lu bir sistemde CPU-bound bir süreç varsa, load average
1.00değeri kabaca CPU'nun %100 kullanımı olarak düşünülebilir- 2 çekirdekli bir sistemde aynı durum CPU kullanımının %50'si olarak görülebilir
- 2 çekirdekli sistemde CPU'nun %100 kullanımına karşılık gelen load average değeri kabaca
2.00sayılabilir
- Bu basitleştirme her zaman doğru değildir; çünkü uninterruptible durumdaki süreçler de load'a dahildir
- CPU kullanım oranı yüksek değilken load average'ın yüksek olduğu durumlar mümkündür
- Anlık CPU kullanım oranı
mpstatile kontrol edilebilirsudo apt install sysstat -ympstat 1
Tasks, PID, süreç ağacı
htopekranının sağ üstündeki Tasks, toplam süreç sayısını ve çalışan süreç sayısını gösterir- Linux çekirdeği dahili olarak süreçlere task der;
htopda ekranda yer kazanmak için Processes yerine Tasks kullanır Shift+Hile thread gösterimi açılıp kapatılabilirTasks: 23, 10 thrşeklinde görünüyorsa thread'ler gösteriliyordur
Shift+Kile kernel thread gösterimi açılıp kapatılabilirTasks: 23, 40 kthrşeklinde görünüyorsa kernel thread'ler gösteriliyordur
- Her yeni süreç başlatıldığında bir PID atanır
sleep 1000 &gibi arka planda çalıştırılırsa job numarası ve PID gösterilirbashiçindeki$!, son arka plan süreç kimliğine genişletilir
- Süreçle ilgili bilgiler
/proc/<pid>/altında bulunur/proc/<pid>/cmdline, çalıştırma komutunu içerir ve argümanlar\0baytlarıyla ayrılırtr '\0' '\n' < /proc/<pid>/cmdlineveyastrings /proc/<pid>/cmdlineile daha okunaklı biçimde görülebilir/proc/<pid>/cwd, mevcut çalışma dizinine giden bağlantıdır;/proc/<pid>/exeise çalıştırılan binary'ye giden bağlantıdır
htop,top,psgibi tanılama araçları süreç ayrıntılarını/proc/<pid>/<file>içinden okur- Yeni süreci oluşturan taraf parent process, oluşturulan yeni taraf child process olarak adlandırılır; bu ilişki süreç ağacını oluşturur
htopiçindeF5tuşuna basıldığında süreç hiyerarşisi görülebilirps fvepstree -ada aynı ilişkiyi gösterir
bashiçindedateçalıştırıldığındabash,forkile kendi kopyasını oluşturur; ardındanexecile/bin/datebelleğe yüklenir ve parent olanbash, child sürecin bitmesini bekler/sbin/init, önyükleme sırasında başlatılır vesshd'yi ayağa kaldırır; SSH bağlantısı kurulduğundasshdbir oturum süreci oluşturur ve bu oturum dabashshell'ini çalıştırır
Süreç kullanıcıları ve yetkiler
- Her süreç bir kullanıcıya aittir ve kullanıcı sayısal bir ID ile ifade edilir
- Sürecin kullanıcı ID’si
/proc/<pid>/statusiçindekiUidalanından görülebilir id 1000gibi komutlar, sayısal ID’ye karşılık gelen kullanıcı adını ve grubu gösteririd,/etc/nsswitch.confayarına göre ad çözümleme kaynağını seçer- Örnek sistemde
/etc/passwdve/etc/groupdosyalarını okur compat, Compatibility mode’dur;filesile aynıdır ama özel girdilere izin verir- Kullanıcı bilgileri LDAP gibi başka veritabanlarında veya servislerde de tutulabilir
- Örnek sistemde
/etc/passwdve/etc/group, sayısal ID’leri insanların okuyabileceği adlarla eşleyen düz metin dosyalarıdır- Gerçek parola bilgisi
/etc/shadowiçindedir$6$,sha512hash algoritmasını ifade eder- Ardından rainbow table saldırılarını önlemek için rastgele bir salt ile password+salt hash’i gelir
- Programlar varsayılan olarak onları çalıştıran kullanıcının yetkileriyle çalışır
- Çalıştırılabilir dosyanın sahibi başka bir kullanıcı olsa bile durum aynıdır
- Başka bir kullanıcı veya
rootolarak çalıştırmak içinsudokullanılırsudo id,rootun UID 0’ı ile çalışırsudo -u daemon idgibi belirli bir kullanıcı olarak çalıştırılabilir
/etc/sudoersdosyasına doğrudan redirect ile yazmaya çalışırsanız yalnızcaechoroot olarak çalışır, append işlemi ise mevcut kullanıcıyla yapılacağı için başarısız olabilirecho "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoerssudo bash -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers"
/etc/sudoers,sudo visudoile düzenlenmelidir- Kaydetmeden önce içeriği doğrulayarak
sudokullanılamaz hale gelme hatasını önler
- Kaydetmeden önce içeriği doğrulayarak
/usr/bin/passwd, normal kullanıcı tarafından çalıştırılsa bile/etc/shadowdosyasına yazabilir- Dosya izinlerinde
sbulunduğu için bir setuid çalıştırılabilir dosya olarak davranır - Çalıştırılabilir dosyanın sahibi olan
rootyetkileriyle çalışır rootsahibi setuid çalıştırılabilir dosyalarfind /bin -user root -perm -u+sile bulunabilir
- Dosya izinlerinde
Süreç durum kodları
htopiçindeki durum sütunuSadıyla gösterilir ve başlıca değerler şunlardırR: running veya runnable, çalışıyor ya da run queue’da bekliyorS: interruptible sleep, bir olayın tamamlanmasını bekliyorD: uninterruptible sleep, genellikle I/O bekliyorZ: defunct zombie, sonlanmış ama parent tarafından reap edilmemişT: job control signal ile durdurulmuşt: tracing sırasında debugger tarafından durdurulmuşX: dead, görünmemesi gereken durum
ps,Ss,R+,Ss+gibi alt durumları da gösterir-
R: Çalışıyor veya çalıştırılabilir
Rdurumu, sürecin şu anda çalıştığı ya da çalıştırma kuyruğunda beklediği anlamına gelir- Program kaynak kodu derlendikten sonra CPU komutlarına dönüşür; çalıştırıldığında belleğe yüklenir ve CPU bu komutları yürütür
- Çalışıyor olmak, CPU’nun fiziksel olarak komutları yürüttüğü anlamına gelir
-
S: Kesilebilir sleep
Sdurumunda süreç komutları CPU üzerinde çalışmaz, bir olay veya koşulu bekler- Olay gerçekleştiğinde kernel durumu running olarak değiştirir
sleep 1000, belirtilen süre boyunca beklemeye bir örnektir- Bu durum signal ile interrupt edilebilir
htopiçindeF9tuşuna basarak signal gönderebilirsinizkill, signal gönderen sistem çağrısıdır;/bin/killise userland’de bunu çağıran programdır- Varsayılan signal
TERM’dür ve sürecin sonlanmasını ister - Signal’ler sayısaldır; adları genelde büyük harfle yazılır ve başına
SIGöneki gelebilir - Örnek:
INT,KILL,STOP,CONT,HUP kill -INT 10089,kill -2 10089,/bin/kill -2 10089aynı işlemi yaparCTRL+Ctuşlarına bastığınızdabash, foreground process’eSIGINTgönderirSIGINTveyaSIGTERMgöndermek, sürecin mutlaka sonlanacağı anlamına gelmez- Program, signal handler tanımlayarak temizlik işlemlerinden sonra sonlanacak şekilde bunu ele alabilir
SIGKILLveya9, kernelin süreci yanıt verme fırsatı tanımadan zorla sonlandırmasına neden olur
-
D: Kesilemeyen sleep
Ddurumu signal ile uyandırılamaz;SIGKILLde bir signal olduğu için bu tür süreçler kill edilemez- Bu durum, sürecin kesintisiz beklemesi gerektiğinde veya olayın hızlı gerçekleşmesinin beklendiği durumlarda kullanılır
- Örnek: disk read/write
- Uninterruptible süreç, çoğu zaman bir page fault sonrasında I/O bekliyor olabilir
- NFS read/write gecikmeleri bu duruma yol açabilir
- Kullanılabilir belleğin çok az olduğu ve sürecin yoğun swap yaptığı durumlarda da görülebilir
- Örnek olarak
sudo mount 8.8.8.8:/tmp /tmp &çalıştırılırsa/sbin/mount.nfsDdurumuna geçer straceile bakıldığındamountsistem çağrısının süreci block ettiği görülürmountkomutunaintrseçeneği verilirse interruptible olarak çalıştırılabilirsudo mount 8.8.8.8:/tmp /tmp -o intr
-
Z: Zombi süreç
Zdurumu, süreç sonlanmış ama parent henüz onu reap etmemiş demektir- Zombi süreçler kısa süreli kalıyorsa bu normal olabilir
- Uzun süre kalan zombi süreçler programdaki bir hataya işaret edebilir
- Zombi süreç bellek tüketmez, yalnızca PID işgal eder
- Zombi sürecin kendisi
killedilemez - Zombiyi reap etmesi için parent process’e
SIGCHLDgönderilebilir - Parent process kill edilirse hem parent hem de zombisi kaldırılabilir
forksonrasında child’ınexit(0)yaptığı ve parent’ınsleep(20)çağırdığı bir C programı ile zombi durumu yeniden üretilebilir- Parent sonlandığında zombi de kaybolur
- Zombinin tutulmasının nedeni, parent’ın
waitsistem çağrısı ile child’ın exit code’unu kontrol edebilmesidir
-
T ve t: Durdurulmuş süreçler
Tdurumu, job control signal ile durdurulmuş durumu ifade edercat /dev/urandom > /dev/nullçalışırkenCTRL+Ztuşlarına basılırsaTdurumuna geçerfgile yeniden çalıştırılabilirSTOPsignal ile durdurulupCONTsignal ile devam ettirilebilirtdurumu, debugger tracing yaptığı sırada durdurulmuş durumu ifade edernc -l 1234 &ile başlatılan bir sürecesudo gdb -p <pid>ile attach edilirsetdurumuna geçer
CPU süresi, niceness, priority
- Linux bir multitasking işletim sistemi olduğu için tek bir CPU üzerinde bile birden fazla süreç aynı anda çalışıyormuş gibi görünür
- Gerçekte tek bir CPU aynı anda yalnızca bir komut çalıştırabildiğinden time sharing kullanılır
- Bir süreç kısa bir süre çalışır ve durdurulur
- Çalıştırılmayı bekleyen diğer süreçler sırayla çalıştırılır
- Bir sürecin çalıştığı bu kısa aralığa time slice denir
- Time slice genellikle birkaç milisaniyedir; bu yüzden sistem load'u yüksek değilse fark edilmesi zordur
- Tek çekirdekte load average
1.0ise CPU'nun %100 kullanıldığı söylenebilir1.0'dan yüksekse çalışmak isteyen süreç sayısı CPU'nun işleyebileceği sayıdan fazladır; bu da slowdown veya delay yaratabilir1.0'dan düşükse CPU zaman zaman idle durumdadır
- Süreç running time'ının gerçek geçen süreyle tam olarak aynı olmamasının nedeni de time sharing ile açıklanır
- Çalıştırılacak task sayısı kullanılabilir CPU core sayısından fazlaysa hangi task'ın önce çalıştırılacağına karar vermek gerekir
- Linux çekirdeğinin scheduler'ı run queue içinden bir sonraki süreci seçer ve bu, çekirdeğin scheduler algoritmasına bağlıdır
- Genelde scheduler'ı doğrudan kontrol edemezsiniz, ancak hangi sürecin daha önemli olduğunu belirtebilirsiniz
NIile gösterilen niceness, user-space priority'dir- Aralığı
-20ile19arasındadır -20en yüksek öncelik,19ise en düşük önceliktir- Daha nice olan bir süreç, daha az nice olan süreçlere daha fazla yol veriyor gibi düşünülebilir
- Aralığı
PRI, Linux çekirdeğinin kullandığı kernel-space priority'dir- Aralığı
0ile139arasındadır 0~99real time,100~139ise user alanı içindir
- Aralığı
- Nice değeri ile priority arasındaki ilişki
PR = 20 + NIşeklinde açıklanırNIiçin-20~+19aralığı,PRiçin0~39olur ve bu da100~139aralığına eşlenir
- Çalıştırmadan önce niceness,
nice -n niceness programile ayarlanır - Çalışan bir sürecin niceness değeri
renice -n niceness -p PIDile değiştirilir - CPU kullanım oranı renkleri şöyledir
- Mavi: düşük öncelikli thread,
nice > 0 - Yeşil: normal öncelikli thread
- Kırmızı: kernel thread
- Mavi: düşük öncelikli thread,
Bellek metrikleri: VIRT, RES, SHR, MEM%
- Bir süreç, bellekte tek başınaymış gibi görünür; bu, sanal bellek ile sağlanır
- Süreç fiziksel belleğe doğrudan erişmez, onun yerine kendi virtual address space'ine sahiptir
- Çekirdek, virtual memory address'lerini physical memory'ye dönüştürebilir veya bunların bir kısmını disk'e eşleyebilir
- Bu nedenle bir sürecin, bilgisayarda takılı olandan daha fazla bellek kullanıyormuş gibi görünmesi mümkündür
- Süreç bellek kullanımı, aşağıdaki kalemlerin dahil edilip edilmemesine göre değişir
- shared library
- disk-mapped memory
- swapped out memory
- Bellek kullanım renkleri şöyledir
- Yeşil: kullanılan bellek
- Mavi: buffers
- Turuncu: cache
-
VIRT/VSZ
VIRT, task'ın kullandığı toplam virtual memory miktarıdır- code, data, shared library, swapped out page ve eşlenmiş ama kullanılmayan page'leri içerir
- Uygulama 1GB isteyip yalnızca 1MB kullansa bile
VIRT1GB görünebilir - 1GB'lık bir dosya
mmapile eşlenip gerçekte hiç kullanılmasa daVIRT1GB olarak görünebilir - Çoğu durumda
VIRTfaydalı bir sayı değildir
-
RES/RSS
RES, swapped out edilmemiş physical memory, yani şu anda fiziksel bellekte bulunan resident memory kullanım miktarıdırRES, gerçek bellek kullanımınıVIRT'ten daha iyi gösterebilir, ancak bunun da sınırları vardır- Swapped out edilmiş belleği içermez
- Belleğin bir kısmı diğer süreçlerle paylaşılabilir
- Bir süreç 1GB bellek kullandıktan sonra
fork()ederse, iki sürecinRESdeğeri ayrı ayrı 1GB görünebilir; ancak Linux'un copy-on-write mekanizması nedeniyle gerçekte yalnızca 1GB kullanılıyor olabilir
-
SHR
SHR, task'ın kullandığı shared memory miktarıdır- Diğer süreçlerle potansiyel olarak paylaşılabilecek belleği yansıtır
- Örnek C programı,
malloc, belleğin bir kısmının kullanılması,forkve ek bellek yazımı adımlarından geçerekVIRT,RES,SHRdeğerlerinin nasıl değiştiğini gösterir - İlgili bellek örneği bölümü TODO olarak bırakılmıştır
-
MEM%
MEM%, task'ın şu anda kullandığı available physical memory oranıdırRESdeğerinin toplam RAM'e bölünmesiyle elde edilir- Örnek:
RES400Mve RAM 8GB ise400/8192*100 = 4.88%
Ubuntu Server 16.04 varsayılan süreçleri
-
temiz bir Digital Ocean droplet’ındaki Ubuntu Server 16.04.1 LTS x64 üzerinde başlatılan süreçler incelenmiş
-
/sbin/init/sbin/init, boot process’in geri kalanını koordine eder ve kullanıcı ortamını hazırlar- otomatik başlayan süreçlerin parent’ı veya grandparent’ı olur
dpkg -S /sbin/initsonucusystemd-sysv: /sbin/initçıktığı için, bu sistemde systemd kullanılır- kill edilse de hiçbir şey olmaz
-
/lib/systemd/systemd-journaldsystemd-journald, logging data toplayıp saklayan bir system service’tir- çeşitli source’lardan gelen log bilgilerine dayanarak structured, indexed bir journal oluşturur ve sürdürür
- basit düz metin log dosyaları yerine, log mesajları için optimize edilmiş özel bir dosya biçimi kullanır
journalctlile görüntülenirjournalctl _COMM=sshdjournalctl _COMM=sshd -o json-prettyjournalctl --since yesterdayjournalctl -bjournalctl -fjournalctl --disk-usagejournalctl --vacuum-size=1G- kaldırmak veya devre dışı bırakmak mümkün görünmüyor; yalnızca logging kapatılabiliyor
-
/sbin/lvmetad -flvmetad, LVM metadata’sını cache’leyerek LVM komutlarının disk scan yapmadan metadata okumasını sağlar- disk scan zaman alır ve sistemle diskin normal işlerini engelleyebilir
- LVM, Linux çalışırken logical volume oluşturup yeniden boyutlandırabilen ve silebilen “dynamic partitions” olarak düşünülebilir
- LVM kullanılıyorsa korunması gerektiği sonucuna varılmış
-
/lib/systemd/udevdsystemd-udevd, kernel uevent’lerini dinler ve her event için udev rules içindeki matching instruction’ları çalıştırır- udev, Linux kernel’in device manager’ıdır ve esas olarak
/devdirectory’sindeki device node’ları yönetir - virtual server’da gerekli olup olmadığı konusunda emin olunmamış
-
/lib/systemd/timesyncdsystemd-timesyncd, remote NTP server ile local system clock’u senkronize eden bir system service’tirntpdyerine geçer- örnek sistemde
timedatectl status, network time ve NTP synchronized değerleriniyesolarak gösterir netstatçıktısında yalnızca SSH portunun listening durumda olduğu görülür; Ubuntu 14.04’tekintpdgibi birden fazla UDP 123 portu açmaz
-
/usr/sbin/atd -fatd, daha sonra çalıştırılmak üzere queue’ya eklenen job’ları yürütüratvebatch, komutları stdin’den veya dosyadan okuyup daha sonra çalıştırır- tekrar eden çalıştırmaları zamanlayan cron’un aksine,
atbelirli bir zamanda bir kez çalışır - örnekte
echo "touch /tmp/yolo.txt" | at now + 1 minuteile 1 dakika sonra bir dosya oluşturulur - kullanılmıyorsa
sudo apt remove at -y --purgeile kaldırılabilir
-
/usr/lib/snapd/snapd- Snappy Ubuntu Core, transactional update kullanan bir Ubuntu sürümü olarak tanıtılmış
- snap, tek bir binary package’ın Linux desktop, server, cloud ve device ortamlarında çalışmasını sağlayan universal bir Linux package formatı olarak açıklanıyor
- dependency’leri tek bir snap içinde toplayıp dağıtan sadeleştirilmiş bir deb paketi gibi düşünülebilir
- sunucuda snappy ile uygulama deploy etme veya distribute etme deneyimi olmadığı için
sudo apt remove snapd -y --purgeile kaldırılmış
-
/usr/bin/dbus-daemon- D-Bus, aynı machine üzerinde eşzamanlı çalışan birden çok process arasında IPC ve RPC sağlayan bir mechanism’dir
- desktop environment için gereklidir ama web app çalıştıran bir server’da gerekip gerekmediği sorgulanmış
dbuskaldırılıncatimedatectl status,Failed to create bus connection: No such file or directoryhatasıyla başarısız olmuş- bu yüzden bırakmanın daha iyi olduğu sonucuna varılmış
-
/lib/systemd/systemd-logindsystemd-logind, user login’lerini yöneten bir system service’tir
-
/usr/sbin/cron -fcron, scheduled command çalıştıran bir daemon’dur-f, foreground mode anlamına gelir; daemonize etmez- periyodik çalıştırılacak işler cron ile zamanlanabilir
crontab -e- Ubuntu’da genellikle
/etc/cron.hourly,/etc/cron.dailyvb. kullanıldığı belirtilmiş - loglar şu şekilde görülebilir
grep cron /var/log/syslogjournalctl _COMM=cronjournalctl _COMM=cron --since="date" --until="date"- cron’un büyük olasılıkla tutulacağı belirtilmiş
- kaldırılmayacaksa
sudo systemctl stop cron,sudo systemctl disable cronile durdurulup devre dışı bırakılabilir apt remove cron, postfix vb. kurmaya çalışabilir- çünkü cron bir mail transport agent önerebilir
-
/usr/sbin/rsyslogd -nrsyslogd, message logging desteği sağlayan bir system utility’dir/var/log/auth.loggibi/var/log/altındaki log dosyalarını doldurur- yapılandırma dosyaları
/etc/rsyslog.diçindedir - loglar uzak bir sunucuya gönderilerek centralized logging kurulabilir
loggerkomutuyla arka plan script’lerinden/var/log/syslogiçine mesaj yazılabilirsystemd-journaldzaten bulunsa da rsyslog ile journal farklı özellikler sunduğundan birlikte kullanıldıkları senaryolar faydalı olabilir- bu yüzden şimdilik tutulmuş
-
/usr/sbin/acpidacpid, bir ACPI event daemon’udur- user-space programlara ACPI event’lerini bildirmek için tasarlanmıştır
- ACPI; hardware component discovery/configuration, power management ve status monitoring gibi işler için kullanılır
- virtual server’da suspend/resume amaçlanmadığı için kaldırılmayı denenmiş
rebootbaşarılı olmuş amahaltsonrasında Digital Ocean sistemi hâlâ açık sanmış ve web arayüzünden Power Off yapmak gerekmiş- bu nedenle bırakmanın daha iyi olduğu sonucuna varılmış
-
/usr/bin/lxcfs /var/lib/lxcfs/lxcfs, LXC container’ları için tasarlanmış bir FUSE filesystem’idir/procaltındaki bazı dosyaların virtualized görünümünü ve host cgroup filesystem’ine filtrelenmiş erişim sağlar- container içinde uptime, top vb. daha “doğru” sonuçlar verir
- LXC container kullanılmıyorsa
sudo apt remove lxcfs -y --purgeile kaldırılabilir
-
/usr/lib/accountservice/accounts-daemon- AccountsService, user account bilgilerini query etmek ve değiştirmek için bir D-Bus interface’i ve bunun implementasyonunu sağlar
- implementasyon,
usermod(8),useradd(8),userdel(8)komutlarını temel alır
-
Kaldırıldıktan sonra neyin bozulacağı “Time will tell” olarak belirsiz bırakılmış
-
/sbin/mdadmmdadm, software RAID aygıtlarını yöneten ve izleyen bir Linux aracıdır- RAID, birden çok hard drive’ı tek bir sürücü gibi kullanma yöntemidir
- RAID 0, drive kapasitesini genişletir
- RAID 1, RAID 5, RAID 6, RAID 10 ise drive arızası durumunda data loss’u önlemeyi amaçlar
sudo apt remove mdadm -y --purgeile kaldırılabilir
-
/usr/lib/policykit-1/polkitd --no-debugpolkitd, PolicyKit daemon’ıdır; polkit ise bir Authorization Framework’tür- fine-grained sudo gibi düşünülebilir
- non-privileged user’a belirli action’ları root olarak yapma yetkisi verebilir
- Örnek: desktop Linux’ta reboot izni vermek
- server’da
sudo apt remove policykit-1 -y --purgeile kaldırılabileceği belirtiliyor - Neyin bozulacağı ise hâlâ belirsiz
-
/usr/sbin/sshd -Dsshd, OpenSSH Daemon’ıdır-Dseçeneği, ayrılmadan çalışmasını ve daemon’a dönüşmemesini sağlar; bu da monitoring’i kolaylaştırır
-
/sbin/iscsidiscsid, iSCSI configuration’a göre çalışan ve connection’ları yöneten bir background daemon’dır- iSCSI, IP tabanlı bir storage networking standard’ıdır; SCSI command’larını IP network üzerinden ileterek remote storage’ı local disk gibi kullanmayı sağlar
sudo apt remove open-iscsi -y --purgeile kaldırılabilir
-
/sbin/agetty --noclear tty1 linuxagetty, Linux için alternatif bir getty’dir- getty, physical veya virtual terminal’i yönetir; bağlantı algılandığında username prompt’unu gösterir ve ardından
loginprogramını çalıştırır - Digital Ocean’da droplet details içindeki
Consoleüzerinden bu terminal ile tarayıcıda etkileşim kurulabilir getty@tty1.serviceile ilgili dosyalar kaldırılıp reboot edildiğinde SSH bağlantısı yapılabilmiş, ancak Digital Ocean web console üzerinden login olunamamış
-
SSH oturumu, bash, htop
sshd: root@pts/0,rootkullanıcısının SSH session’ının pseudoterminalpts/0üzerinde kurulduğu anlamına gelir- pseudoterminal, gerçek bir text terminal’i taklit eder
bash, kullanılan shell’dir-bashgibi başında dash varsa bu, login shell olarak başlatıldığı anlamına gelir- argument zero’nun ilk karakteri
-olan veya--loginoption’ı ile başlatılan shell, login shell’dir - Bu durumda farklı bir configuration file set’i okunur
htop, ekran görüntüsünde çalışmakta olan interactive process viewer’dır
Hizmet kaldırma deneyi
- Genel kaldırma listesi şu şekildedir
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
- Extreme edition şu işlemleri içerir
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
- Ubuntu Server üzerinde WordPress'in gözetimsiz kurulumu yönergelerini izleyen nginx, PHP7 ve MySQL yapılandırması çalışır
Ek: inceleme araçları ve shell davranışı
-
Kaynak kodu bulma
stracetek başına yeterli olmadığında kaynak koda bakılabilirwhich uptimeile binary konumu bulunur,dpkg -S /usr/bin/uptimeile de Ubuntu paketi bulunur- Örnekte
uptime,procpspaketine aittir - packages.ubuntu.com üzerinde paket aranabilir ve source repository linki bulunabilir
-
File descriptor ve redirection
- stderr'i stdout'a yönlendirmek için
2>&1kullanılır echo something > file, stdout'ufiledosyasına yazar veecho something 1> fileile aynıdırecho something 2> file, stderr'ifiledosyasına yazarecho something 2>1, stderr'i1adlı bir dosya adına yönlendirmek anlamına gelir&içeren2>&1ifadesinde1, bir dosya adı değil stream ID'dir
- stderr'i stdout'a yönlendirmek için
-
PuTTY renk sorunu
- PuTTY'de
htopöğeleri eksik görünüyorsa Window → Colours ayarlarından çözülebilir - başlık çubuğuna sağ tıklayın
- Change settings...
- Window → Colours
- Both radio button seçin
- Apply
- PuTTY'de
-
C ile yazılmış basit shell
- C ile yazılmış basit bir shell,
fork,exec,waitsistem çağrılarının kullanımını gösterir - Girdi
exitise shell built-in olarak sonlanır - Diğer komutlar
forksonrasında child içindeexeclpile çalıştırılır, parent isewaitpidile çıkış durumunu bekler date,true,falseçalıştırma örneklerinde child exit code ayrı ayrı çıktılanırsleep 1 &gibi background process'lerin kapanış mesajının ancak Enter'a bastıktan sonra görünmesinin nedeni, shell'in girdi beklerken ancak komut girildiğinde background process durumunu kontrol etmesidir
- C ile yazılmış basit bir shell,
Kalan inceleme başlıkları ve değişiklik geçmişi
- Daha fazla araştırmak istenen başlıklar arasında process state substatus, kernel thread,
/dev/pts,CODE·DATA·SWAPbelleği, time slice uzunluğu, Linux scheduler algoritması, core pinning, manual page, CPU/memory bar renkleri, process ID limit ve fork bomb,lsof,ionice,schedtoolvb. bulunur - Başlıca düzeltme ve güncellemeler şunları içerir
/proc/uptimeidle time, tüm core'ların toplamıdır- zombie C örneğindeki parent/child
printfdüzeltilmiştir apt remove cronkomutunun MTA dependency nedeniylepostfixkurmaya çalıştığı bilgisi eklenmiştirid,/etc/nsswitch.confaracılığıyla/etc/passwddışındaki başka source'lardan da bilgi yükleyebilir/etc/shadowpassword hash formatı açıklaması eklenmiştir/etc/sudoersdosyası güvenli şekildevisudoile düzenlenmelidirMEM%açıklaması eklenmiştir- load average bölümü yeniden yazılmıştır
kill 1234için varsayılan signal'inINTdeğilTERMolduğu düzeltilmiştir- CPU ve memory color bar açıklaması eklenmiştir
1 yorum
Hacker News görüşleri
Son zamanlarda btop'a geçtim; ihtiyaç duyduğum kadar modern ve kullanışlı, aynı zamanda yeterince bilgi sunan bir arayüzü var
Başkalarının da söylediği gibi güç tüketimini (Watt) da gösteriyor gibi görünüyor; ayrıca ağ, GPU ve disk bilgileri de var
https://github.com/aristocratos/btop
Disk kullanım çubukları kapatılamıyor; bu yüzden konsol penceresi çok büyük değilse I/O hız grafiği fazla sıkışmış görünüyor
CPU/GPU grafikleri fazla büyük ayrılmış ve genel olarak açık dosya tablosunun daha fazla yer kaplamasını isterdim
htop kullanırken her seferinde değiştirdiğim 2 ayar var ve fark büyük
Birincisi, kullanıcı thread'lerini kapatıyorum. Genelde sadece htop ekranını kalabalıklaştırıyorlar ve neredeyse hiç faydalı bilgi vermiyorlar
İkincisi, process tree görünümünü açıyorum. Bir sürecin nereden başlatıldığı çoğu zaman diğer bilgilerden daha önemli oluyor; ayrıca çok sayıda dosya işleyip CPU tüketen derleyici süreçleri gibi şeyleri takip etmeyi kolaylaştırıyor
Bana göre ikisi de htop'un varsayılan davranışı olmalı
Sanal belleğe güvenmenin zor olduğuna dair açıklamayı görmek sevindirici. Windows Görev Yöneticisi bunu varsayılan olarak bu şekilde gösterdiği için oldukça kötü
Yerleşik küme boyutu (RSS) en güvenilir gösterge; diğer değerler, gerçekte sorun yaratmayan memory-mapped dosyalar gibi şeyler yüzünden yanlış biçimde şişebilir
Örneğin 2 GB'lık bir log dosyası memory-map edilse, ilgili kısım yalnızca okunduğunda sayfalar belleğe alınır; yani fiilen gerçek bellek kullanılıyor olmaz, ama kullanıcı sürece bakıp “bu uygulama neden bu kadar çok bellek kullanıyor?” der
Chrome da bir süre bu sorunu yaşadı ve bu yüzden memory-mapped dosya kullanımını azalttı; bunun nedeni memory-mapped dosyaların kötü olması değil, kullanıcıların gerçek fiziksel bellek kullanımı yerine başka bir değeri görüp aşırı tepki vermesiydi
İnternette kullanımın sanal bellek tahsisine göre değerlendirilmesi gerektiğini söyleyen rehberler de var, ama bu yazı en azından o noktayı doğru ele alıyor
Bkz.: https://en.wikipedia.org/wiki/Proportional_set_size
Normal dosya I/O kullanıldığında edilmez. Her işin bellek kullanımını izleyip istenen miktarı aşarsa öldüren HPC kümelerinde bu oldukça ilginç sonuçlar doğurur
Bellek baskısı başladığında artık temsil gücünü kaybeder. Bu yanlış anlama yüzünden birkaç kez hatalı karar verildiğini gördüm; hatta ekip arkadaşlarımın ters yönde karar vermesini engellemek için grafikten bu değeri kaldırdığım oldu
Adından da anlaşılacağı gibi yalnızca süreç için özel olarak ayrılmış fiziksel belleğe eşlenen kısmı gösterir ve Unix'teki Resident Set'e daha yakındır
Muhtemelen performans sekmesindeki bellek kullanımından söz ediliyordu ama tüm bellek kullanımı kalemleri için geçerliymiş gibi anlaşılabileceği için bunu ayırıyorum
top'ta
>karakterini kullanırsanız bellek kullanımına göre sıralama yapılırBunu bazen host'un neden yavaşladığını bulmak için kullanıyorum ve
swapd'nin CPU'yu sömürdüğünü de görebiliyorsunuzM, CPU için büyükPkullanmayı tercih ediyorumBöyle yazılar okuyunca, Linux'u 20 yılı aşkın süredir her gün kullanıyor olmama rağmen hâlâ onun potansiyelinin yalnızca bir kısmını kullandığımı fark ediyorum. Güzel yazı
HN sanki yeniden toparlanıyormuş gibi hissettiriyor
Umarım bu, HN'nin yürüyen hayalet dönemi değildir
nmon'u bilmeyenler buna da bir göz atabilirhtuşuna basınca kullanılabilir monitörlerin listesi çıkıyor, tekrar basınca kayboluyor veqile çıkılıyorhttps://nmon.sourceforge.io/pmwiki.php
Özellikle
dveDtuşlarıyla görülen disk throughput ve I/O oldukça faydalıGeniş CPU kullanım grafiği yüksek çekirdek sayılarını kolayca göstermesi açısından güzel
*topailesinden farklı bir kullanım tarzı olarak, sakinpstarzı diferansiyel raporlamayı vevmstatgibi sistem geneli raporları daha çok sevmeye başladımBöyle yapınca her şey terminal scrollback buffer'ında kalıyor: https://github.com/c-blake/procs
Nadir görülen ölçüde verimli ve ifade gücü yüksek Nim diliyle yazılmış
Bu yazıyı 2016'dan beri yer imlerimde tutuyorum ve yıllar içinde birçok kez tekrar dönüp baktım