• Windows 開機過程與架構

    這篇文章主要說明 Windows  開機時,會啟動相關服務與基本架構。

    Windows 系統程序的主要特性。

    最後介紹一個工具 Autoruns 可以用來觀察 Windows 開機會啟動的所有相關程序與服務。

     

    資料來源:http://forum.sysinternals.com/

    Windows 架構

     

    開機過程

    1. Session Manager (SMSS.exe )

    smss.exe 是第一個 user mode 的process。

    這個process 會負責啟動 csrss.exe 與 winlogon.exe

    2. csrss.exe 負責 win32 相關的 process 與載入所需要的 DLL

    3. winlogon.exe 這個就是常見的登入畫面,同時會啟動相關的服務 services.exe 與 lsass.exe 。其中,

    • lsass.exe 負責密碼驗證、與AD 密碼加解密認證過程。
    • services.exe 負責啟動/停止相關服務

    4. svchost.exe: 負責啟動系統服務

    5. Userinit.exe 負責啟動 explorer.exe. 也就是 Windows 桌面

    6. Internat.exe 輸入法

     

    Windows系統Process

    要知道什麼是異常,必須先區分哪些是正常,這列這張表列出相關系統 process 的屬性,例如:

    • # of instance: 特別注意的是某些 process 在系統中只有一個。如果有多個就算是異常。
    • Image Path: 多半的系統 process 都在 %systemroot%\system32\ 。如果有出現在 C:\windows 那也算是異常
    • User Account: 多半的系統 process 會透過 “Local System”執行。相反的,如果 user account 為,使用者名稱的話,也是異常的一種。
    • Parent Process: 系統的 process 呼叫與起動都有一定的方式。如果 Parent process 非表列所述,那麼該  process  也是異常。

    這些狀況下,都有可能是潛在病毒,透過與系統process 相同的名稱,隱藏執行在電腦中。

    Image Path Parent Process # of Instance User Acount
    Smss.exe %systemroot%\system32\ System One or more Local System
    Wininit.exe %systemroot%\system32\ Smss.exe One Local System
    Taskhost.exe %systemroot%\system32\ services.exe One or more userOr local service accounts
    Lsass.exe %systemroot%\system32\ wininit.exe One Local System
    Winlogon.exe %systemroot%\system32\ Smss.exe One or more Local System
    Iexplore.exe Program Files (x86)\Internet Explore Explorer.exe One or more Logon user
    Explorer.exe %systemroot%\ userinit.exe One per logged-on user Logon user
    Lsm.exe %SystemRoot%\System32 wininit.exe One Local System
    Svchost.exe %SystemRoot%\System32\ Services.exe 5+ Local Service accounts
    Services.exe %SystemRoot%\System32 wininit.exe One Local System
    Csrss.exe %SystemRoot%\System32 smss.exe 2+ Local System

     

    Autoruns

    那麼要如何檢查Windows 開機時會執行那些程序呢?

    這邊介紹一個工具 Autoruns,只要執行這個工具,它會把電腦所有的服務、程式、排程工作等,全部都列出來。

     

    https://technet.microsoft.com/en-us/sysinternals/bb963902.aspx

    Tags: , ,

  • Linux Performance Monitoring

    這篇文章主要介紹如何運用 Linux 的兩個常用的工具 (vmstat & iostat)

    來得知目前 Linux 系統運作的效能,並且舉幾個例子說明如何解讀結果,

    並且進一步分析是 CPU , memory or  disk 效能瓶頸

     

    記憶體效能瓶頸  vmstat

    首先介紹的工具是 vmstat ,該工具可以分析目前系統記憶體與CPU等的狀況。

    $ vmstat    5

    vmstat1

     

    如何解讀 vmstat 的結果?

    Procs

    • Procs > r : 有多少的 process 等待 CPU 執行。如果 r  的數值大於 # of CPU,則表示 CPU 效能瓶頸。
    • Procs > b: 有多少 process 等待 I/O (磁碟、網路、使用者輸入等)

    Memory

    • swap > si:  how many blocks per second the operating system is swapping in from Disk.
    • swap > so:   how many blocks per second the operating system is swapping out to disk
    • 多半的情況下,這個值 si & so 皆為 0 ,如果超過 > 10 ,表示記憶體效能瓶頸,做很多的 page in/out 的動作。

     

    io

    • io > bi : how many blocks per second are read in from (bi) disk
    • io > bo: written out to (bo) disk
    • 這個值可以佐證得知是否為 Disk I/O 的問題

     

    system

    • in: the number of interrupts per second (in)
    • cs: the number of context switches per second (cs).

    cpu

    • us:  CPU time spent running user application
    • sy:  CPU running system (kernel) code
    • id:  CPU idle
    • wa: CPU waiting for I/O

     

    如何觀察 I/O 效能瓶頸 iostat

    $ iostat -dx 5

    iostat

     

    這個結果主要觀察幾個重點,想像 CPU 是收銀機櫃台:

    • avgqu-sz: 平均有多少客戶在等待結帳
    • await: 平均每個客戶等待結帳的時間 (mili sec)
    • svctm: 平均每個櫃台處理每個客戶的時間 (不包含等待時間)
    • %util: 超過 80% 表示 I/O 效能瓶頸

     

    接著讓我們看幾個個案

    CPU Bound

    vmstat_CPU

    用 vmstat 觀察之後,如果是 CPU 忙碌的情況,通常會有下列特徵

    • r: # of process waiting for CPU > # of  CPU,有許多的 process 等待 CPU 執行
    • CPU > us:  CPU 主要花在 user application 的比率很高,這個例子中, 89%, 90%, 88%

    補充說明什麼是 cs (context switch)

    如果 CPU 要執行的資料沒有在記憶體中,那麼該 process 就會到 disk 讀取,並且等待 disk 讀取完成。這個動作就叫做  context switch。

     

    iostat_cpu

    另外看到 iostat的狀態,從上面這個圖中,通常我們會閱讀 %util , 這個例子中 47%  45% 不算很高的磁碟讀取,但是也表示有一定的 disk I/O 。如果該值達到 100%,就表示磁碟效能瓶頸。

     

    I/O Bound 個案

    這個例子,我們執行 vmstat 與iostat,比較明顯的值是 iostat 中 %util 超過 100%

    補充說明的是:通常磁碟效能瓶頸多半會發生在 “讀取”  而非 “寫入”

    因為讀取,通常是要讀完之後,process 才能夠繼續進行接下來的工作

    而寫入,通常是可以延遲讀寫,或是批次等到一定時間或是量之後再寫入磁碟。

    IOBound

     

     

    Memory swap 的狀況

    如果有 memory swap 的情況,最直接的方式就是看 Swap > si/so

    這兩個值 si/so 如果 > 0 ,則表示有 memory swap 的狀況。

    接著可以觀察:

    • b: # of process waiting for disk IO
    • System/cs:  context switch

    因為磁碟讀取,會導致更多的 disk I/O wait 與 context switch 增加。

    • wa: CPU waiting on I/O

    這個例子中,可以看到 22 -> 47 -> 77  ,I/O wait 越來越增加的趨勢。

     

    vmstat_swap

     

     

    Idle的情況

    當電腦不忙碌的情況下,有幾個值會接近 0

    procs > b:  接近 0,因為沒有 process 執行

    procs > r:  接近 0,因為沒有 process 執行

    cpu > us/sy: 接近 0,因為不管是 user mode or system mode 都沒有 cpu 使用

    cpu > id: Idle 會接近 100。表示 CPU 100% idle

    vmstat Idle

     

    摘要

    CPU

    • 如果 r 的數值大於 # of CPU,則表示 CPU 效能瓶頸。
      us: CPU time spent running user application
      sy: CPU running system (kernel) code

    Memory

    • 多半的情況下,這個值 si & so 皆為 0

     

    Disk IO

    • in: the number of interrupts per second (in)
      cs: the number of context switches per second (cs).
      io > bi : how many blocks per second are read in from (bi) disk
      io > bo: written out to (bo) disk
    • %util: 超過 80% 表示 I/O 效能瓶頸

    Tags: , , , , ,

  • 找出應用程式的疑難雜症 by process Monitor

    這篇文章主要說明應用程式出錯的幾種情況,例如:

    • 應用程式變得很慢
    • 異常錯誤
    • 耗用許多的 CPU 資源
    • 應用程式無法正常啟動

    建議可以使用 Process Monitor 觀察並且解決這些異常的狀況。

     

    如何取得 process Monitor

    相關的工具可以在這個網站上取得 www.microsoft.com/technet/sysinternals

     

    啟動 process Monitor

    工具下載之後,直接執行就會開始擷取系統所有的”事件”

    事件包含:網路、檔案存取、Registry Key 存取

    事件擷取之後,可以利用這個工具分析檔案、網路與CPU使用狀況,如下圖所示:

    Tools > Process Activity Summary

    ProcessActSummary

     

    Filter 

    由於抓取的電腦系統事件可能超過上千個,因此可以利用 Filter 的功能,

    將關鍵的事件過濾,筆者這邊建議幾種常用而且有效的過濾方式

    • Operation is “TCP Connect”
    • Operation is “RegSetValue”
    • Operation is “WriteFile”
    • “Category” is “Write”

    為什麼建議設定這些 filter 呢?

    主要是因為我們想要專注應用程式對於系統做那些改變?

    這個改變主要不外乎是檔案的寫入或是註冊碼的寫入

     

    另外 Operation is “TCP Connect”,主要看的是這個應用程式是否有異常或是往外連線的狀況,如果有往外連線,那麼主要的溝通內容與目的就必須進一步釐清。

    舉例來說,如果一個”小算盤”的應用程式,有大量的 TCP connect 對外部的電腦連線與溝通,那麼該連線的目的就很可疑,也是另外一個偵測可疑病毒的方法之一。

     

     

    processFilter

     

    Log量還是很大怎麼辦?

    這邊建議三個設定

    • Options > history Depth  (限制事件擷取的深度)
    • Filter > Drop Filtered Events (將部分不需要的系統事件排除)
    • File > Backing File > To Disk (擷取時儲存至檔案)

    ProcessMon_Logsize

     

     

    Analysis Summary

    Process Monitor 功能最強的就是它的分析功能

    可以針對 process ,  activity, File, Registry, Network  ..等提供各式歷史的分析摘要

    可以初步了解電腦主要都在忙什麼, CPU, process, Memory, Disk  or Network

    對於效能瓶頸分析,這是一個利器 !

    ProcAnalysis

     

     

    Tags: ,