htop Explain - uptime
htop က Linux နဲ့ Apple OSX မှာ အသုံးများတဲ့ process monitoring tool တခု ဖြစ်ပါတယ်။ terminal based ဖြစ်ပြီးတော့ lightweight လည်းဖြစ်တယ်။ ကိုယ့်ရဲ့ စက်မှာ CPU ဘယ်လောက်သုံးနေလဲ Memory(RAM) ဘယ်လောက်သုံးနေလဲဆိုတာကို process လိုက် အသေးစိတ် အချိန်နဲ့ တပြိုင်တည်း ကြည့်လို့ရပါတယ်။
ဒီ post series မှာ htop ရဲ့ အစိတ်အပိုင်းတခုချင်းစီလိုက် data က ဘယ်ကနေလာလဲ Operating System (OS) ရဲ့ အစိတ်အပိုင်းတွေ ဘယ်လိုအလုပ်လုပ်သလဲဆိုတာ ကြည့်သွားမှာပါ။ ဒီ series ရဲ့ original article ကို https://peteris.rocks/blog/htop မှာ သွားဖတ်လို့လည်း ရပါတယ်။
Uptime
ပထမဆုံးကတော့ ကိုယ့် system က ဘယ်အချိန်ထဲက run နေတာလဲဆိုတာကို uptime
လို့ ရိုက်ပြီး ကြည့်လို့ရပါတယ်။
အဲဒီ information ကိုပဲ ကိုယ့်ရဲ့ command line terminal ထဲမှာ အခုလို ကြည့်လည်း ရပါတယ်။
[email protected]:~$ uptime
12:54:42 up 91 days, 10:27, 1 user, load average: 0.25, 0.11, 0.04
[email protected]:~$ which uptime
/usr/bin/uptime
ဒီ information က /proc/uptime
ကနေ လာပါတယ်
[email protected]:~$ cat /proc/uptime
7900062.71 7869738.32
ပထမ ဂဏန်း (7900062.71) က ကိုယ့် system run နေတဲ့ အချိန်ကို second နဲ့ ပြောတာဖြစ်ပါတယ်
6252710.37 seconds = 91.43591099537 days
ဒုတိယ ဂဏန်းက ကိုယ့်ရဲ့ system က ဘယ်လောက်ကြာကြာ idle ဖြစ်နေလဲဆိုတာကို ပြောတာ ဖြစ်တယ်။ ကိုယ့် system မှာ ရှိတဲ့ CPU core အရေအတွက်ပေါ်မူတည်ပြီးတော့ Core တခုဘယ်လောက် idle ဖြစ်နေလဲဆိုတာကို တွက်တဲ့အတွက် ပထမဂဏန်းထက် ပိုများနေတာလည်း ဖြစ်နိုင်ပါတယ်
ဒီနေရာမှာ ထပ်ပြီး စဥ်းစားလို့ရတာက uptime
လို့ ရိုက်လိုက်တာနဲ့ /proc/uptime
က data ကို သွားဖတ်တယ်ဆိုတာဘယ်လို သိနိုင်လဲ
အဲလို process တွေ ဘယ် file တွေကို သွားဖတ်နေလဲကို သိအောင်လုပ်တဲ့ နည်းတခုကတော့ program ကို trace လုပ်တဲ့ နည်းပါ။ trace လုပ်တဲ့ tool တွေထဲကအသုံးများတဲ့ strace ကို သုံးပြီး ကြည့်လို့ရပါတယ်။
[email protected]:~$ strace uptime # output အများကြီးထွက်လာပါလိမ့်မယ်
# ပုံမှန်အားဖြင့် strace က output က STDERR ကို ရောက်သွားတဲ့အတွက်
# STDOUT ကို 2>&1 နဲ့ redirect လုပ်ကြည့်ရအောင်
[email protected]:~$ strace uptime 2>&1 | grep open
.....
open("/proc/filesystems", O_RDONLY) = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY) = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY) = 4
ထွက်လာတဲ့ output တွေထဲထားမှာ uptime လို့ရိုက်လိုက်တာနဲ့ အဲ process ကနေ တခြား ဘယ် file တွေကို သွားဖတ်တယ်ဆိုတာကို တွေ့ပါလိမ့်မယ်။
အဲထဲကထွက်လာတဲ့ information တွေကနေ /proc/uptime
ဆိုတဲ့ file ကို သွားဖတ်တယ်ဆိုတာတွေ့နိုင်ပါတယ်။
uptime က ပြတဲ့ data တွေထဲမှာ မှာ Load Average (load average: 0.25, 0.11, 0.04
) ဆိုတာလည်း တွေ့ပါတယ်။ strace
ရဲ့ထွက်လာတဲ့ output မှာလည်း /proc/loadavg
လည်းပါတဲ့အတွက် uptime
က /proc/loadavg
က information ကို သွားဖတ်တယ်ဆိုတာလည်း သိရပါတယ်။
အဲတော့ /proc/loadavg
ရဲ့ output ကို ကြည့်ကြည့်ရအောင်
[email protected]:~$ cat /proc/loadavg
0.00 0.00 0.00 2/211 4258
ဒီတခါ နောက်ဆုံး ဂဏန်းကနေ အရင် စကြည့်ရအောင်။ နောက်ဆုံးဂဏန်း 4258
က ကိုယ့် system မှာ နောက်ဆုံး run လိုက်တဲ့ process ID ဖြစ်ပါတယ်။ ပုံမှန်အားဖြင့် program တခုကို foreground မှာပဲ ဖြစ်ဖြစ် background မှာပဲ ဖြစ်ဖြစ် run ရင် process id တခုကို integer ဂဏန်းတခုအနေနဲ့ပေးပါတယ်။ 1, 2, 3, .. ကနေ တိုးသွားပြီးတော့ process id တွေ ကုန်သွားတဲ့အခါမှသာ recycle ပြန်လုပ်ပါတယ်။
ကိုယ့် system မှာ process ဘယ်နှစ်ခုထိ run နိုင်လဲဆိုတာကိုတော့ /proc/sys/kernel/pid_max
မှာ သွားကြည့်လို့တယ်။
[email protected]:~$ cat /proc/sys/kernel/pid_max
32768
Load Average ကနောက် ဂဏန်းတခု 1/190
ကတော့ ကိုယ့် system မှာ process 190 run နေတယ် နောက် process တခုက idle ဖြစ်နေတယ် ဒါမှမဟုတ် run နေတယ်လို ပြောတာပါ။
random bytes တွေကို generate ထုတ်ပေးတဲ့ အောက်က program ကို background မှာပဲ run တယ်ဆိုပါတော့
[email protected]:~$ cat /dev/urandom > /dev/null &
[1] 24837 # <-- အပေါ်က program ကို run လိုက်တဲ့ process id ပါ
[email protected]:~$ cat /proc/loadavg
0.08 0.10 0.08 2/190 24843 # အပေါ်က process id
ပြီးရင် /proc/loadavg
ကို ကြည့်မယ်ဆို 2/190
ဆိုပြီး process နှစ်ခု run နေတယ်လို့ ပြောမှာ ဖြစ်ပါတယ်။
ပထမဆုံး ဂဏန်းသုံးခုက ပြီးခဲ့တဲ့ ၁ မိနစ် / ၅ မိနစ် / ၁၅ မိနစ်အတွင်းမှာ ကိုယ့်ရဲ့ system ရဲ့ average load ကို ပြပါတယ်။ သူ့အကြောင့်ကို အသေးစိတ်သိချင်ရင် အောက်က link တွေမှာ သွားဖတ်လို့ရပါတယ်။
Linux Load Averages: Solving the Mystery
နောက်တစ်ပိုင်းမှာဆိုရင်တော့ process information တွေကို ဘယ်သူကသွားယူတယ်ဆိုတာကိုပြောပေးမှာ ဖြစ်ပါတယ်။