Sar Yay Club

Do it first. You can do it right later.

25 May 2020

htop Explain - uptime

htop က Linux နဲ့ Apple OSX မှာ အသုံးများတဲ့ process monitoring tool တခု ဖြစ်ပါတယ်။ terminal based ဖြစ်ပြီးတော့ lightweight လည်းဖြစ်တယ်။ ကိုယ့်ရဲ့ စက်မှာ CPU ဘယ်လောက်သုံးနေလဲ Memory(RAM) ဘယ်လောက်သုံးနေလဲဆိုတာကို process လိုက် အသေးစိတ် အချိန်နဲ့ တပြိုင်တည်း ကြည့်လို့ရပါတယ်။

htop

ဒီ post series မှာ htop ရဲ့ အစိတ်အပိုင်းတခုချင်းစီလိုက် data က ဘယ်ကနေလာလဲ Operating System (OS) ရဲ့ အစိတ်အပိုင်းတွေ ဘယ်လိုအလုပ်လုပ်သလဲဆိုတာ ကြည့်သွားမှာပါ။ ဒီ series ရဲ့ original article ကို https://peteris.rocks/blog/htop မှာ သွားဖတ်လို့လည်း ရပါတယ်။

Uptime

ပထမဆုံးကတော့ ကိုယ့် system က ဘယ်အချိန်ထဲက run နေတာလဲဆိုတာကို uptime လို့ ရိုက်ပြီး ကြည့်လို့ရပါတယ်။

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 တွေကို ဘယ်သူကသွားယူတယ်ဆိုတာကိုပြောပေးမှာ ဖြစ်ပါတယ်။