Linux htop/top स्क्रीन पर दिखने वाले मानों की व्याख्या (2019)
(peteris.rocks)- Ubuntu Server 16.04 x64 की htop स्क्रीन को शुरुआती बिंदु बनाकर यह देखा गया है कि uptime, load average, Tasks, PID, process tree, state, CPU time, priority और memory indicators वास्तव में क्या मतलब रखते हैं, और इन्हें
/procव command output के जरिए ट्रेस किया गया है - स्क्रीन पर दिखने वाले कई मान procfs और
/etc/passwd,/etc/group,/etc/shadow,/etc/nsswitch.confजैसी system files से आते हैं, औरstraceसे यह जांचा जा सकता है कि program कौन-सी files पढ़ रहा है - Load average CPU usage rate जैसा मान नहीं है, बल्कि running, run queue में प्रतीक्षा कर रहे processes और uninterruptible state वाले processes को शामिल करने वाला exponential decay moving average है
R,S,D,Z,T,tजैसे state codes signal,kill,fork/exec/waitव्यवहार से जुड़े होते हैं, इसलिए ये समझने में मदद करते हैं कि process क्यों रुका हुआ है या क्यों बना हुआ हैVIRT,RES,SHR,MEM%virtual memory, physical memory और shareable memory को अलग-अलग दृष्टिकोण से दिखाते हैं, इसलिए केवल एक संख्या देखकर वास्तविक memory usage तय करना कठिन है
htop के मान कहाँ से आते हैं
uptimeदिखाता है कि system कितनी देर से चल रहा है, और यही जानकारीuptimecommand से भी देखी जा सकती हैuptimeprogram/proc/uptimeपढ़ता है- पहली संख्या system के चालू रहने का कुल समय सेकंड में बताती है
- दूसरी संख्या system के idle state में रहने का समय सेकंड में बताती है
- multi-core system में idle time हर core के लिए जोड़कर गिना जाता है, इसलिए यह कुल uptime से बड़ा हो सकता है
strace uptime 2>&1 | grep openयाstrace -e open uptimeसे देखा जा सकता है किuptimeकौन-सी files खोलता है- उदाहरण output में
/proc/uptime,/var/run/utmp,/proc/loadavgशामिल होते हैं
- उदाहरण output में
/proc/uptimeकी संख्याएँ program या script में इस्तेमाल करने के लिए सुविधाजनक हैं, जबकिuptimeoutput इंसानों के पढ़ने के लिए format किया गया होता है
Load average और CPU usage rate
/proc/loadavgके पहले तीन मान पिछले 1 मिनट, 5 मिनट, 15 मिनट के system load average को दिखाते हैं- चौथा मान वर्तमान में running processes की संख्या और कुल processes की संख्या को
1/120जैसे रूप में दिखाता है, और आख़िरी मान आख़िरी बार इस्तेमाल किया गया PID है - जब कोई नया process चलाया जाता है, तो उसे PID दिया जाता है; PID आम तौर पर बढ़ता जाता है और खत्म होने पर दोबारा इस्तेमाल किया जाता है
- PID 1 boot के समय शुरू होने वाले
/sbin/initका होता है
- PID 1 boot के समय शुरू होने वाले
- अगर
htopमें केवल एक running process दिख रहा है, तो वहhtopखुद भी हो सकता है sleep 30running नहीं बल्कि sleep state में होता है, इसलिए यह running process count नहीं बढ़ाताcat /dev/urandom > /dev/nullजैसा लगातार CPU इस्तेमाल करने वाला काम running process count और load average बढ़ाता है- Load number वह मान है जो running, run queue में प्रतीक्षा कर रहे और uninterruptible state वाले processes को गिनता है
- load average साधारण average नहीं बल्कि exponential decay moving average है
- 1-minute load average भी केवल पिछले 60 seconds को ही नहीं दर्शाता, बल्कि हाल के 1 minute को ज़्यादा weight देते हुए उससे पहले की activity का कुछ हिस्सा भी शामिल करता है
- single CPU system में अगर एक CPU-bound process हो, तो load average
1.00को सरल रूप में CPU 100% usage माना जा सकता है- 2-core system में वही स्थिति CPU usage 50% के बराबर मानी जा सकती है
- 2-core system में CPU 100% usage के अनुरूप load average को सरल रूप में
2.00माना जा सकता है
- यह सरलीकरण हमेशा सही नहीं होता, क्योंकि load में uninterruptible state वाले processes भी शामिल होते हैं
- ऐसा भी हो सकता है कि load average ऊँचा हो लेकिन CPU usage rate ऊँचा न हो
- तात्कालिक CPU usage rate
mpstatसे देखा जा सकता हैsudo apt install sysstat -ympstat 1
Tasks, PID, process tree
htopके ऊपर दाईं ओर दिखने वाला Tasks कुल processes की संख्या और running processes की संख्या दिखाता है- Linux kernel अंदरूनी तौर पर process को task कहता है, और
htopscreen space बचाने के लिए Processes की जगह Tasks शब्द का उपयोग करता है Shift+Hसे thread display को toggle किया जा सकता हैTasks: 23, 10 thrजैसा दिखे तो इसका मतलब है कि thread display चालू है
Shift+Kसे kernel thread display को toggle किया जा सकता हैTasks: 23, 40 kthrजैसा दिखे तो इसका मतलब है कि kernel thread display चालू है
- हर नए process के शुरू होने पर PID दिया जाता है
sleep 1000 &की तरह background में चलाने पर job number और PID दिखता हैbashमें$!आख़िरी background process ID में expand होता है
- process से जुड़ी जानकारी
/proc/<pid>/के नीचे होती है/proc/<pid>/cmdlineexecution command रखता है और arguments\0byte से अलग किए जाते हैंtr '\0' '\n' < /proc/<pid>/cmdlineयाstrings /proc/<pid>/cmdlineसे इसे आसानी से पढ़ा जा सकता है/proc/<pid>/cwdcurrent working directory का link है, और/proc/<pid>/exeexecuted binary का link है
htop,top,psजैसे diagnostic tools process details को/proc/<pid>/<file>से पढ़ते हैं- नया process बनाने वाले को parent process और नए बने हुए को child process कहा जाता है, और यही संबंध process tree बनाता है
htopमेंF5दबाने पर process hierarchy देखी जा सकती हैps fऔरpstree -aभी यही संबंध दिखाते हैं
bashमेंdateचलाने परbashforkसे अपनी copy बनाता है, फिरexecसे/bin/dateको memory में लोड करता है, और parentbashchild के खत्म होने का इंतज़ार करता है/sbin/initboot के समय शुरू होता है औरsshdको चलाता है; SSH connection होने परsshdsession process बनाता है और वह sessionbashshell चलाता है
प्रोसेस उपयोगकर्ता और permissions
- हर प्रोसेस किसी उपयोगकर्ता के स्वामित्व में होता है, और उपयोगकर्ता को संख्यात्मक ID से दर्शाया जाता है
/proc/<pid>/statusकेUidentry से प्रोसेस का user ID देखा जा सकता हैid 1000जैसे कमांड उस संख्यात्मक ID से जुड़े user name और group दिखाते हैंid/etc/nsswitch.confसेटिंग के अनुसार name resolution source चुनता है- उदाहरण सिस्टम में यह
/etc/passwdऔर/etc/groupको पढ़ता है compatCompatibility mode है, जोfilesजैसा है लेकिन special entries की अनुमति देता है- उपयोगकर्ता जानकारी LDAP जैसे अन्य database या service में भी संग्रहीत हो सकती है
- उदाहरण सिस्टम में यह
/etc/passwdऔर/etc/groupplain text फाइलें हैं जो संख्यात्मक ID को इंसानों के पढ़ने योग्य नामों से map करती हैं- वास्तविक password जानकारी
/etc/shadowमें होती है$6$का मतलबsha512hashing algorithm है- इसके बाद rainbow table हमलों को रोकने के लिए random salt और password+salt का hash आता है
- प्रोग्राम डिफ़ॉल्ट रूप से उसे चलाने वाले उपयोगकर्ता की permissions के साथ चलते हैं
- executable file का मालिक कोई दूसरा उपयोगकर्ता हो, तब भी यही लागू होता है
- किसी दूसरे उपयोगकर्ता या
rootके रूप में चलाने के लिएsudoका उपयोग किया जाता हैsudo idrootके UID 0 के साथ चलता हैsudo -u daemon idकी तरह किसी खास उपयोगकर्ता के रूप में चलाया जा सकता है
/etc/sudoersमें direct redirect से लिखने पर सिर्फechoही root के रूप में चलता है और append मौजूदा उपयोगकर्ता के रूप में होता है, इसलिए यह विफल हो सकता हैecho "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoerssudo bash -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers"
/etc/sudoersकोsudo visudoसे ही संपादित करना चाहिए- यह save करने से पहले सामग्री validate करता है ताकि ऐसी गलती न हो जाए जिससे
sudoका उपयोग ही बंद हो जाए
- यह save करने से पहले सामग्री validate करता है ताकि ऐसी गलती न हो जाए जिससे
/usr/bin/passwdसामान्य उपयोगकर्ता द्वारा चलाए जाने पर भी/etc/shadowमें लिख सकता है- file permissions में
sहोने के कारण यह setuid executable की तरह काम करता है - यह executable file के मालिक
rootकी permissions के साथ चलता है - root स्वामित्व वाले setuid executables को
find /bin -user root -perm -u+sसे खोजा जा सकता है
- file permissions में
प्रोसेस state code
htopका state columnSनाम से दिखता है, और मुख्य मान इस प्रकार हैंR: running या runnable, यानी चल रहा है या run queue में प्रतीक्षा कर रहा हैS: interruptible sleep, किसी event के पूरा होने की प्रतीक्षाD: uninterruptible sleep, आमतौर पर I/O waitingZ: defunct zombie, समाप्त हो चुका है लेकिन parent ने reap नहीं कियाT: job control signal से रोका गयाt: tracing के दौरान debugger द्वारा रोका गयाX: dead, यह state दिखनी नहीं चाहिए
psSs,R+,Ss+जैसे substate भी दिखाता है-
R: चल रहा है या चलने योग्य
Rstate का मतलब है कि प्रोसेस या तो अभी चल रहा है या execution queue में प्रतीक्षा कर रहा है- प्रोग्राम का source code compile होने के बाद CPU instructions बन जाता है, और execution के समय memory में load होकर CPU उन instructions को चलाता है
- running होने का अर्थ है कि CPU वास्तव में उन instructions को भौतिक रूप से execute कर रहा है
-
S: interruptible sleep
Sstate में प्रोसेस की instructions CPU पर execute नहीं हो रहीं होतीं, बल्कि वह किसी event या condition की प्रतीक्षा कर रहा होता है- event होने पर kernel उसकी state को running में बदल देता है
sleep 1000निश्चित समय तक प्रतीक्षा का एक उदाहरण है- इस state को signal से interrupt किया जा सकता है
htopमेंF9दबाकर signal भेजा जा सकता हैkillsignal भेजने वाली system call है, और/bin/killuserland में इसे call करने वाला प्रोग्राम है- default signal
TERMहै, जो प्रोसेस से समाप्त होने का अनुरोध करता है - signal संख्यात्मक होते हैं, और इनके नाम आमतौर पर uppercase में लिखे जाते हैं तथा उनके आगे
SIGprefix हो सकता है - उदाहरण:
INT,KILL,STOP,CONT,HUP kill -INT 10089,kill -2 10089,/bin/kill -2 10089एक ही काम करते हैंCTRL+Cदबाने परbashforeground process कोSIGINTभेजता हैSIGINTयाSIGTERMभेजने से यह ज़रूरी नहीं कि प्रोसेस अवश्य समाप्त हो जाए- प्रोग्राम signal handler सेट करके cleanup के बाद समाप्त होने जैसी processing कर सकता है
SIGKILLया9में kernel प्रोसेस को प्रतिक्रिया का मौका दिए बिना उसे forcefully समाप्त कर देता है
-
D: uninterruptible sleep
Dstate को signal से जगाया नहीं जा सकता, औरSIGKILLभी signal ही है, इसलिए ऐसे प्रोसेस को kill नहीं किया जा सकता- यह state तब उपयोगी होती है जब प्रोसेस को बिना interruption के प्रतीक्षा करनी हो, या जब event के जल्दी होने की उम्मीद हो
- उदाहरण: disk read/write
- uninterruptible process अक्सर page fault के बाद I/O की प्रतीक्षा में हो सकता है
- NFS read/write latency के दौरान ऐसी state बन सकती है
- उपलब्ध memory बहुत कम होने और प्रोसेस के अधिक swap करने की स्थिति में भी यह दिख सकती है
- उदाहरण के लिए
sudo mount 8.8.8.8:/tmp /tmp &चलाने पर/sbin/mount.nfsDstate में चला जाता है straceमें देखने परmountsystem call प्रोसेस को block करती दिखती हैmountमेंintroption देने पर इसे interruptible बनाया जा सकता हैsudo mount 8.8.8.8:/tmp /tmp -o intr
-
Z: zombie प्रोसेस
Zstate का मतलब है कि प्रोसेस समाप्त हो चुका है लेकिन parent ने अभी तक उसे reap नहीं किया है- zombie प्रोसेस थोड़े समय के लिए मौजूद रहे तो यह सामान्य हो सकता है
- लंबे समय तक बने रहने वाले zombie प्रोसेस किसी प्रोग्राम bug का संकेत हो सकते हैं
- zombie प्रोसेस memory consume नहीं करते, सिर्फ PID घेरते हैं
- zombie प्रोसेस को स्वयं
killनहीं किया जा सकता - parent process को
SIGCHLDभेजकर zombie को reap करने के लिए कहा जा सकता है - parent process को kill करने पर parent और उसका zombie दोनों हट सकते हैं
forkके बाद child काexit(0)करना और parent काsleep(20)करना, ऐसे C प्रोग्राम से zombie state को दोहराया जा सकता है- parent के समाप्त होते ही zombie गायब हो जाता है
- zombie के बने रहने का कारण यह है कि parent को
waitsystem call के जरिए child का exit code देखना पड़ सकता है
-
T और t: रुके हुए प्रोसेस
Tstate job control signal से रोकी गई state हैcat /dev/urandom > /dev/nullचलाते समयCTRL+Zदबाने पर यहTstate में चला जाता हैfgसे इसे फिर से चलाया जा सकता हैSTOPsignal से रोका औरCONTsignal से फिर शुरू किया जा सकता हैtstate वह है जिसमें debugger tracing के दौरान प्रोसेस को रोक देता हैnc -l 1234 &से चलाए गए प्रोसेस परsudo gdb -p <pid>से attach करने पर वहtstate में चला जाता है
CPU समय, niceness, priority
- Linux एक multitasking operating system है, इसलिए एक ही CPU पर भी कई process ऐसे दिखते हैं मानो वे एक साथ चल रहे हों
- वास्तव में एक single CPU एक समय में केवल एक ही command चला सकता है, इसलिए time sharing का उपयोग किया जाता है
- एक process थोड़ी देर चलता है और फिर रुक जाता है
- execution का इंतज़ार कर रहे दूसरे process बारी-बारी से चलते हैं
- जिस छोटे अंतराल में एक process चलता है, उसे time slice कहा जाता है
- time slice आमतौर पर कुछ millisecond का होता है, इसलिए अगर system load ज़्यादा न हो तो यह आसानी से महसूस नहीं होता
- single core पर load average
1.0हो तो इसे CPU के 100% उपयोग के रूप में देखा जा सकता है- अगर यह
1.0से अधिक हो, तो इसका मतलब है कि चलने की प्रतीक्षा कर रहे process की संख्या CPU की क्षमता से अधिक है, जिससे slowdown या delay हो सकता है - अगर यह
1.0से कम हो, तो CPU कभी-कभी idle स्थिति में होता है
- अगर यह
- process का running time वास्तविक बीता हुआ समय से बिल्कुल समान न हो, इसका कारण भी time sharing से समझा जा सकता है
- अगर उपलब्ध CPU core की संख्या से ज़्यादा task चलाने हों, तो यह तय करना पड़ता है कि पहले किस task को चलाया जाए
- Linux kernel का scheduler run queue से अगला process चुनता है, और यह kernel के scheduler algorithm पर निर्भर करता है
- आम तौर पर scheduler को सीधे नियंत्रित नहीं किया जा सकता, लेकिन यह बताया जा सकता है कि कौन-सा process अधिक महत्वपूर्ण है
NIके रूप में दिखने वाला niceness user-space priority है- इसकी range
-20से19तक होती है -20सबसे ऊँची priority है और19सबसे नीची priority है- अधिक nice process को कम nice process के लिए ज़्यादा जगह छोड़ने वाला माना जा सकता है
- इसकी range
PRIवह kernel-space priority है जिसका उपयोग Linux kernel करता है- इसकी range
0से139तक होती है 0~99real time के लिए है, और100~139user के लिए है
- इसकी range
- nice value और priority का संबंध
PR = 20 + NIसे समझाया जाता हैNIका-20~+19PRके0~39में बदलता है, और यह100~139पर map होता है
- execution से पहले niceness को
nice -n niceness programसे set किया जाता है - चल रहे process की niceness को
renice -n niceness -p PIDसे बदला जाता है - CPU usage के रंग इस प्रकार हैं
- Blue: low-priority thread,
nice > 0 - Green: सामान्य priority thread
- Red: kernel thread
- Blue: low-priority thread,
मेमोरी संकेतक: VIRT, RES, SHR, MEM%
- process को ऐसा दिखाई देता है मानो वह मेमोरी में अकेला मौजूद हो, और यह virtual memory के ज़रिए लागू किया जाता है
- process physical memory तक सीधे पहुँच नहीं करता, बल्कि उसका अपना virtual address space होता है
- kernel virtual memory address को physical memory में बदल सकता है या उसके कुछ हिस्सों को disk पर map कर सकता है
- इसी वजह से ऐसा लग सकता है कि कोई process कंप्यूटर में लगी वास्तविक मेमोरी से भी अधिक मेमोरी इस्तेमाल कर रहा है
- process की memory usage इस बात पर निर्भर करती है कि उसमें नीचे दिए गए items शामिल हैं या नहीं
- shared library
- disk-mapped memory
- swapped out memory
- memory usage के रंग इस प्रकार हैं
- Green: used memory
- Blue: buffers
- Orange: cache
-
VIRT/VSZ
VIRTtask द्वारा उपयोग की जाने वाली कुल virtual memory की मात्रा है- इसमें code, data, shared library, swapped out page, और mapped लेकिन उपयोग न किए गए page शामिल होते हैं
- यदि application 1GB request करे और केवल 1MB ही उपयोग करे, तब भी
VIRT1GB दिख सकता है - अगर 1GB file को
mmapकिया गया हो और वास्तव में उपयोग न किया गया हो, तब भीVIRT1GB दिख सकता है - अधिकांश मामलों में
VIRTकोई बहुत उपयोगी संख्या नहीं होती
-
RES/RSS
RESswapped out न हुई physical memory, यानी वर्तमान में physical memory में मौजूद resident memory usage हैRES,VIRTकी तुलना में वास्तविक memory usage को बेहतर दिखा सकता है, लेकिन इसकी भी सीमाएँ हैं- इसमें swapped out memory शामिल नहीं होती
- कुछ memory दूसरे process के साथ shared हो सकती है
- अगर कोई process 1GB memory उपयोग करे और फिर
fork()करे, तो दोनों process काRESअलग-अलग 1GB दिख सकता है, लेकिन Linux के copy-on-write के कारण वास्तव में केवल 1GB ही उपयोग हो सकता है
-
SHR
SHRtask द्वारा उपयोग की जाने वाली shared memory की मात्रा है- यह उस memory को दर्शाता है जिसे संभावित रूप से दूसरे process के साथ share किया जा सकता है
- उदाहरण C program यह दिखाता है कि
malloc, कुछ memory उपयोग,fork, और अतिरिक्त memory write के बादVIRT,RES,SHRvalues कैसे बदलती हैं - संबंधित memory example section अभी TODO के रूप में छोड़ा गया है
-
MEM%
MEM%task द्वारा वर्तमान में उपयोग की जा रही available physical memory का प्रतिशत है- यह
RESको कुल RAM से भाग देने पर आधारित है - उदाहरण: अगर
RES400Mहै और RAM 8GB है, तो400/8192*100 = 4.88%
Ubuntu Server 16.04 की डिफ़ॉल्ट प्रोसेसें
-
fresh Digital Ocean droplet के Ubuntu Server 16.04.1 LTS x64 पर शुरू होने वाली प्रोसेसों की जाँच की गई
-
/sbin/init/sbin/initboot process के बाकी हिस्से को समन्वित करता है और user environment को कॉन्फ़िगर करता है- यह अपने-आप शुरू होने वाली प्रोसेसों का parent या grandparent बनता है
dpkg -S /sbin/initका परिणामsystemd-sysv: /sbin/initआता है, यानी इस सिस्टम पर यह systemd है- इसे kill करने पर भी कुछ नहीं होता
-
/lib/systemd/systemd-journaldsystemd-journaldlogging data को इकट्ठा और स्टोर करने वाली system service है- यह कई source से मिली log जानकारी के आधार पर structured, indexed journal बनाती और बनाए रखती है
- साधारण plain text log file की जगह log message के लिए optimized विशेष file format का उपयोग करती है
- इसे
journalctlसे देखा जा सकता है journalctl _COMM=sshdjournalctl _COMM=sshd -o json-prettyjournalctl --since yesterdayjournalctl -bjournalctl -fjournalctl --disk-usagejournalctl --vacuum-size=1G- इसे हटाना या disable करना संभव नहीं लगता, केवल logging बंद की जा सकती है
-
/sbin/lvmetad -flvmetadLVM metadata को cache करता है ताकि LVM command disk scan के बिना metadata पढ़ सकें- disk scan में समय लगता है और यह सिस्टम व disk के सामान्य काम में बाधा डाल सकता है
- LVM को ऐसे “dynamic partitions” की तरह देखा जा सकता है जिनमें Linux चलते समय logical volume बनाना, resize करना और हटाना संभव है
- अगर आप LVM इस्तेमाल कर रहे हैं, तो इसे बनाए रखना चाहिए
-
/lib/systemd/udevdsystemd-udevdkernel uevent को सुनता है और हर event के लिए udev rules की matching instruction चलाता है- udev Linux kernel का device manager है और मुख्य रूप से
/devdirectory के device node को मैनेज करता है - virtual server में इसकी ज़रूरत है या नहीं, इस पर निश्चित नहीं है
-
/lib/systemd/timesyncdsystemd-timesyncdremote NTP server और local system clock को sync करने वाली system service है- यह
ntpdका विकल्प है - उदाहरण सिस्टम में
timedatectl statusnetwork time और NTP synchronized कोyesदिखाता है netstatoutput में केवल SSH port listening दिखता है, और Ubuntu 14.04 केntpdकी तरह कई UDP 123 port नहीं खुलते
-
/usr/sbin/atd -fatdqueue में डाले गए job को बाद में चलाता हैatऔरbatchstdin या file से command पढ़कर बाद में चलाते हैं- cron के विपरीत, जो बार-बार चलने वाले task schedule करता है,
atकिसी निश्चित समय पर एक बार चलता है - उदाहरण में
echo "touch /tmp/yolo.txt" | at now + 1 minuteसे 1 मिनट बाद file बनाई जाती है - अगर उपयोग नहीं करते, तो
sudo apt remove at -y --purgeसे हटा सकते हैं
-
/usr/lib/snapd/snapd- Snappy Ubuntu Core को transactional update इस्तेमाल करने वाले Ubuntu rendition के रूप में बताया गया है
- snap को universal Linux package format के रूप में समझाया गया है, जिसमें एक binary package Linux desktop, server, cloud और device पर चल सकता है
- इसे simplified deb package की तरह समझा जा सकता है, जिसमें dependency को एक single snap में बाँधकर distribute किया जाता है
- server पर snappy से application deploy या distribute करने का अनुभव न होने के कारण इसे
sudo apt remove snapd -y --purgeसे हटा दिया गया
-
/usr/bin/dbus-daemon- D-Bus एक ही machine पर एक साथ चल रहे कई process के बीच IPC और RPC mechanism है
- desktop environment में इसकी ज़रूरत होती है, लेकिन web app चलाने वाले server पर इसकी ज़रूरत है या नहीं, इस पर सवाल है
dbusहटाने परtimedatectl statusFailed to create bus connection: No such file or directoryके साथ fail हो गया- इसलिए इसे रखना बेहतर माना गया
-
/lib/systemd/systemd-logindsystemd-loginduser login को मैनेज करने वाली system service है
-
/usr/sbin/cron -fcronscheduled command चलाने वाला daemon है-fका मतलब foreground mode है, यानी यह daemonize नहीं करता- समय-समय पर चलने वाले काम cron से schedule किए जा सकते हैं
crontab -e- Ubuntu में आम तौर पर
/etc/cron.hourly,/etc/cron.dailyआदि का उपयोग किया जाता है - log निम्न तरीके से देखे जा सकते हैं
grep cron /var/log/syslogjournalctl _COMM=cronjournalctl _COMM=cron --since="date" --until="date"- cron को बनाए रखने की संभावना अधिक है
- अगर हटाना न हो, तो
sudo systemctl stop cron,sudo systemctl disable cronसे इसे रोक और disable कर सकते हैं apt remove cronpostfix आदि को install करने की कोशिश कर सकता है- क्योंकि cron mail transport agent को suggest करता है
-
/usr/sbin/rsyslogd -nrsyslogdmessage logging को सपोर्ट करने वाली system utility है- यह
/var/log/auth.logजैसे/var/log/के log file भरने का काम करता है - configuration file
/etc/rsyslog.dमें होती हैं - remote server पर log भेजकर centralized logging बनाया जा सकता है
loggercommand से background script में/var/log/syslogमें message छोड़ा जा सकता हैsystemd-journaldपहले से होने पर भी rsyslog और journal की विशेषताएँ अलग हैं, इसलिए दोनों को साथ इस्तेमाल करना उपयोगी हो सकता है- इसलिए फिलहाल इसे बनाए रखा गया
-
/usr/sbin/acpidacpidएक ACPI event daemon है- इसे इस तरह डिज़ाइन किया गया है कि यह user-space program को ACPI event की जानकारी दे
- ACPI का उपयोग hardware component discovery/configuration, power management, status monitoring आदि में होता है
- virtual server में suspend/resume का इरादा न होने के कारण इसे हटाकर देखा गया
rebootसफल रहा, लेकिनhaltके बाद भी Digital Ocean ने सिस्टम को चालू माना, इसलिए web interface से Power Off करना पड़ा- इसलिए इसे बनाए रखना बेहतर माना गया
-
/usr/bin/lxcfs /var/lib/lxcfs/lxcfsLXC container के लिए डिज़ाइन किया गया FUSE filesystem है- यह
/procकी कुछ file का virtualized view और host cgroup filesystem तक filtered access देता है - इससे container के अंदर uptime, top आदि अधिक “correct” परिणाम दे सकते हैं
- अगर LXC container इस्तेमाल नहीं करते, तो
sudo apt remove lxcfs -y --purgeसे हटाया जा सकता है
-
/usr/lib/accountservice/accounts-daemon- AccountsService user account जानकारी को query और manipulate करने के लिए D-Bus interface और उसका implementation देता है
- इसका implementation
usermod(8),useradd(8),userdel(8)command पर आधारित है
-
हटाने के बाद क्या टूटेगा, यह “Time will tell” पर छोड़ दिया गया है
-
/sbin/mdadmmdadmएक Linux utility है जो software RAID device को manage और monitor करती है- RAID कई hard drive को एक की तरह इस्तेमाल करने का तरीका है
- RAID 0 drive capacity को बढ़ाता है
- RAID 1, RAID 5, RAID 6, RAID 10 का उद्देश्य drive failure के समय data loss को रोकना है
- इसे
sudo apt remove mdadm -y --purgeसे हटाया जा सकता है
-
/usr/lib/policykit-1/polkitd --no-debugpolkitdएक PolicyKit daemon है, और polkit एक Authorization Framework है- इसे fine-grained sudo की तरह समझा जा सकता है
- यह non-privileged user को root के रूप में कुछ specific action करने की permission दे सकता है
- उदाहरण: desktop Linux में reboot की अनुमति देना
- server में इसे
sudo apt remove policykit-1 -y --purgeसे हटाया जा सकता है, ऐसा बताया गया है - क्या टूटेगा, यह अब भी सवाल बना हुआ है
-
/usr/sbin/sshd -DsshdOpenSSH Daemon है-Doption detach नहीं करता और daemon mode में नहीं जाने देता, जिससे monitoring आसान होती है
-
/sbin/iscsidiscsidएक background daemon है जो iSCSI configuration के अनुसार काम करता है और connection को manage करता है- iSCSI एक IP-आधारित storage networking standard है, जो SCSI command को IP network के जरिए भेजता है ताकि remote storage को local disk की तरह इस्तेमाल किया जा सके
- इसे
sudo apt remove open-iscsi -y --purgeसे हटाया जा सकता है
-
/sbin/agetty --noclear tty1 linuxagettyLinux getty का एक alternative है- getty physical या virtual terminal को manage करता है, और connection detect होने पर username prompt दिखाने के बाद
loginprogram चलाता है - Digital Ocean में droplet details के
Consoleके जरिए browser में इस terminal के साथ interact किया जा सकता है getty@tty1.serviceसे जुड़ी files हटाकर reboot करने पर SSH access तो संभव था, लेकिन Digital Ocean web console में login नहीं हो सका
-
SSH सेशन, bash, htop
sshd: root@pts/0का मतलब है किrootuser का SSH session pseudoterminalpts/0पर सेट है- pseudoterminal वास्तविक text terminal को emulate करता है
bashइस्तेमाल में आ रहा shell है-bashकी तरह आगे dash लगा हो तो इसका मतलब है कि यह login shell के रूप में शुरू हुआ है- argument zero का पहला character
-हो, या--loginoption के साथ शुरू हुआ shell, login shell होता है - इस स्थिति में यह configuration files के अलग set को पढ़ता है
htopscreenshot में चल रहा interactive process viewer है
सेवा हटाने के प्रयोग
- सामान्य हटाने की सूची इस प्रकार है
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 में निम्न कार्य शामिल हैं
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
- unattended installation of WordPress on Ubuntu Server निर्देशों का पालन करने वाला nginx, PHP7, MySQL कॉन्फ़िगरेशन काम करता है
परिशिष्ट: जांच के टूल और shell का व्यवहार
-
source code ढूंढना
- जब केवल
straceपर्याप्त न हो, तब source code देखा जा सकता है which uptimeसे binary का स्थान पता करें, औरdpkg -S /usr/bin/uptimeसे Ubuntu package खोजें- उदाहरण में
uptime,procpspackage का हिस्सा है - packages.ubuntu.com पर package खोजकर source repository link पाया जा सकता है
- जब केवल
-
file descriptor और redirection
- stderr को stdout पर redirect करते समय
2>&1का उपयोग किया जाता है echo something > fileका मतलब stdout को file में लिखना है, और यहecho something 1> fileके बराबर हैecho something 2> filestderr को file में लिखता हैecho something 2>1का अर्थ stderr को1नाम की filename पर redirect करना है&लगे हुए2>&1में1filename नहीं बल्कि stream ID है
- stderr को stdout पर redirect करते समय
-
PuTTY रंग समस्या
- यदि PuTTY में
htopके कुछ तत्व गायब दिखें, तो इसे Window → Colours सेटिंग में ठीक किया जा सकता है - title bar पर right-click करें
- Change settings...
- Window → Colours
- Both radio button चुनें
- Apply
- यदि PuTTY में
-
C में बना सरल shell
- C में लिखा गया एक सरल shell,
fork,exec,waitsystem call के उपयोग को दिखाता है - यदि input
exitहो, तो shell built-in के रूप में बंद हो जाता है - अन्य कमांड
forkके बाद child मेंexeclpसे चलाए जाते हैं, और parentwaitpidसे exit status का इंतज़ार करता है date,true,falseचलाने के उदाहरण में child exit code क्रमशः प्रिंट होते हैंsleep 1 &जैसे background process का समाप्ति संदेश Enter दबाने के बाद ही दिखने का कारण यह है कि shell input की प्रतीक्षा करते हुए, कमांड दर्ज होने पर background process की स्थिति जांचता है
- C में लिखा गया एक सरल shell,
बाकी जांच के विषय और संशोधन इतिहास
- जिन विषयों के बारे में और जानना बाकी है, वे हैं process state substatus, kernel thread,
/dev/pts,CODE·DATA·SWAPमेमोरी, time slice की लंबाई, Linux scheduler algorithm, core pinning, manual page, CPU/memory bar के रंग, process ID limit और fork bomb,lsof,ionice,schedtoolआदि - मुख्य संशोधन और अपडेट में निम्न शामिल हैं
/proc/uptimeका idle time सभी core का कुल योग है- zombie C उदाहरण में parent/child
printfको ठीक किया गया - यह जोड़ा गया कि
apt remove cron, MTA dependency के कारणpostfixinstall करने की कोशिश करता है id,/etc/nsswitch.confके जरिए/etc/passwdके अलावा अन्य source से भी जानकारी लोड कर सकता है/etc/shadowpassword hash format की व्याख्या जोड़ी गई/etc/sudoersको सुरक्षित रूप सेvisudoसे edit करना चाहिएMEM%की व्याख्या जोड़ी गई- load average सेक्शन को फिर से लिखा गया
kill 1234का default signalINTनहीं बल्किTERMहै, यह सुधार किया गया- CPU और memory color bar की व्याख्या जोड़ी गई
1 टिप्पणियां
Hacker News की राय
हाल में मैं btop पर आ गया हूँ; इसका इंटरफ़ेस जितना आधुनिक और उपयोगी चाहिए था, उतना है और जानकारी भी पर्याप्त देता है
जैसा दूसरों ने कहा, यह बिजली की खपत (Watts) भी दिखाता लगता है, और साथ में network, GPU, disk की जानकारी भी दिखती है
https://github.com/aristocratos/btop
disk usage bar बंद नहीं किया जा सकता, इसलिए console window बहुत बड़ी न हो तो I/O speed graph बुरी तरह दबा हुआ दिखता है
CPU/GPU graphs बहुत ज्यादा बड़े रखे गए हैं, और कुल मिलाकर चाहता हूँ कि open files table ज़्यादा जगह ले
htop इस्तेमाल करते समय मैं 2 settings हमेशा बदलता हूँ, और फर्क काफी बड़ा होता है
पहली, user threads बंद करता हूँ। ज़्यादातर वे htop screen को ही उलझाते हैं और उपयोगी जानकारी बहुत कम देते हैं
दूसरी, process tree view चालू करता हूँ। process कहाँ से शुरू हुआ, यह अक्सर बाकी जानकारी से ज़्यादा महत्वपूर्ण होता है, और बहुत सारी files process करते हुए CPU खाने वाले compiler process जैसी चीज़ों को track करना भी आसान हो जाता है
निजी तौर पर मुझे लगता है कि ये दोनों htop का default behavior होना चाहिए
virtual memory पर भरोसा करना मुश्किल है, यह explanation देखकर अच्छा लगा। Windows Task Manager default में इसी तरह दिखाता है, इसलिए बहुत खराब है
resident set size (RSS) सबसे भरोसेमंद metric है, और बाकी values memory-mapped files जैसी चीज़ों की वजह से गलत तरीके से फूल सकती हैं जो असल में समस्या पैदा नहीं करतीं
उदाहरण के लिए, 2GB log file को memory map करने पर भी वह हिस्सा तभी pages में आता है जब उसे पढ़ा जाता है, इसलिए वह असली memory इस्तेमाल नहीं कर रहा होता; लेकिन user process देखकर कहता है, “यह app इतनी memory क्यों खा रहा है?”
Chrome ने भी कुछ समय तक यह समस्या झेली और memory-mapped files का इस्तेमाल घटाया; इसलिए नहीं कि memory-mapped files खराब थीं, बल्कि इसलिए कि users actual physical memory usage नहीं, बल्कि एक अलग value देखकर overreact कर रहे थे
web पर ऐसे guides भी हैं जो virtual memory allocation के आधार पर usage judge करने को कहते हैं; यह लेख कम से कम उस हिस्से को सही तरह से पकड़ता है
संदर्भ: https://en.wikipedia.org/wiki/Proportional_set_size
सामान्य file I/O इस्तेमाल करने पर शामिल नहीं होते। जिन HPC clusters में हर job की memory usage monitor करके request से ज़्यादा होने पर उसे मार दिया जाता है, वहाँ इससे काफी दिलचस्प नतीजे निकलते हैं
memory pressure शुरू होने पर यह अब representative नहीं रहता। इस गलतफहमी की वजह से मैंने कई गलत फैसले देखे हैं, और एक बार तो team member को उलटा निष्कर्ष निकालने से रोकने के लिए मैंने chart से यह value हटा ही दी थी
नाम के मुताबिक, यह सिर्फ process के लिए निजी तौर पर allocated physical memory में mapped हिस्सा दिखाता है, और Unix के Resident Set के ज्यादा करीब है
शायद बात Performance tab की memory usage की हो रही है, लेकिन इसे सभी memory usage items समझने की गलतफहमी हो सकती है, इसलिए फर्क स्पष्ट कर रहा हूँ
top में
>character इस्तेमाल करने पर memory usage के आधार पर sorting हो जाती हैhost धीमा क्यों हो रहा है, यह पता करने के लिए कभी-कभी इस्तेमाल करता हूँ, और
swapdको CPU खाते हुए भी देख सकते हैंM, CPU के लिए uppercasePइस्तेमाल करना मुझे पसंद हैऐसे लेख पढ़कर एहसास होता है कि Linux को 20 साल से ज़्यादा रोज़ इस्तेमाल करने के बावजूद मैं अभी भी इसकी क्षमता का सिर्फ एक हिस्सा ही इस्तेमाल कर रहा हूँ। अच्छा लेख है
HN फिर से सुधरता हुआ लग रहा है
उम्मीद है कि यह HN का walking ghost वाला दौर नहीं है
जो लोग
nmonनहीं जानते, वे इसे भी एक बार देख सकते हैंhदबाने पर available monitors की list आती है, फिर दबाने पर गायब हो जाती है, औरqसे exit होता हैhttps://nmon.sourceforge.io/pmwiki.php
खासकर
dऔरDkeys से दिखने वाला disk throughput और I/O काफी उपयोगी हैWide CPU usage graph बड़ी core count को आसानी से handle करता है, यह अच्छा है
*topजैसी चीज़ों से अलग usage style के तौर पर, मुझे शांतps-style differential reporting औरvmstatजैसी system-wide reporting ज्यादा पसंद आने लगी हैइस तरह सब कुछ terminal scrollback buffer में रह जाता है: https://github.com/c-blake/procs
यह असामान्य रूप से efficient और expressive Nim language में लिखा गया है
मैंने इस लेख को 2016 से bookmark कर रखा है, और कई वर्षों में कई बार वापस reference के लिए देखा है