Linux 進程及作業管理

Linux 進程及作業管理



概述:

     我們在實際的運維工作中經常要對服務器做各種監控,以了解其相關狀態,比如,CPU利用率,磁盤空間利用率,等等,這就需要我們了解相關的數據并學會使用各種工具來分析數據。本章就將總結Linux系統中進程管理和作業管理的相關命令、參數和工具,包括:進程的相關定義、分類、狀態以及進程查看和管理工具,如:pstree、ps、pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill ,以及作業管理的相關內容:job, bg, fg, nice,renice


第一篇:進程管理



一、進程的相關概念:

1.相關定義:

  • 內核的功用:
       進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等;     

  • 通俗的來說進程是運行起來的程序。唯一標識進程的是進程描述符(PID),在linux內核中是通過task_struck和task_list來定義和管理進程的 ;

  • 進程 Process: 
       運行中的程序的一個副本,是被載入內存的一個指令集合;
         ˙進程ID(Process ID,PID)號碼被用來標記各個進程;
         ˙UID、GID、和SELinux語境決定對文件系統的存取和訪問權限;
         ˙通常從執行進程的用戶來繼承;
         ˙存在生命周期;   

  • task struct:Linux內核存儲進程信息的數據結構格式;

  • task list:多個任務的的task struct組成的鏈表;

2.進程創建  

  • init:第一個進程
            父子關系        

  • 進程:都由其父進程創建,COW(寫實復制)
            fork(), clone()        

  • 創建過程:

       1.系統首先以fock的方式復制(cow)一個與父進程相同的進程,這個進程與父進程唯一的差別就是PID不同,但是這個進程還會多一個PPID的參數,PPID就是父進程的程序識別碼PID;   

       2.然后新產生的進程開始加載實際要運行的程序進行執行。


3.進程優先級

  • 進程的優先級是用數字0-139來表示的,分為兩類:
         99-1:實時優先級,由內核維護(數字越大,優先級越高)

        100-139:靜態優先級,使用nice值來調整(數字越小,優先級越高);

  • Nice值
        -20,19對應靜態優先級100-139

  • Big O
        時間復雜度,用時和規模的關系
          O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)
            

4.進程內存:  

  • Page Frame: 頁框,用存儲頁面數據,存儲Page 4k;

  • LRU:Least Recently Used 近期最少使用算法,釋放內存;

        注:內存管理的一種頁面置換算法,對于在內存中但又不用的數據塊(內存塊)叫做LRU,                      操作系統會根據哪些數據屬于LRU而將其移出內存而騰出空間來加載另外的數據。

  • 物理地址空間和線性地址空間;

  • MMU(內存管理單元):負責轉換線性和物理地址

        注:MMU是Memory Management Unit的縮寫,中文名是內存管理單元,它是中央處理器(CPU)                中用來管理虛擬存儲器、物理存儲器的控制線路,同時也負責虛擬地址映射為物理地址以                  及 提供硬件機制的內存訪問授權,多用戶多進程操作系統。


5.IPC: 進程間通信 Inter Process Communication 

  • 在計算機網絡體系中,主機與主機之間的通信,實質上是主機進程與主機進程之間的通信,也就是進程間的通信;

  • 同一主機上
          signal:信號指令;
          shm: shared memory 共享內存空間
          semophore:信號量,一種計數器

  • 不同主機上:
          rpc: remote procedure call
          socket: 套接字,IP和端口號


6.Linux內核搶占式多任務


7.進程類型:     

   根據進程與終端的關系可以分為:

  • 守護進程: daemon,在系統引導過程中啟動的進程,和終端無關的進程;

  •  前臺進程:跟終端相關,通過終端啟動的進程;
     注意:兩者可相互轉化


8.進程狀態:

   進程被內核調度的過程中的狀態可以分為:

  • 運行態:running

  • 就緒態:ready

  • 睡眠態:

       可中斷:interruptable
       不可中斷:uninterruptable,
           
通常是指被IO阻塞的過程,等待IO滿足之前無法繼續運行。

  • 停止態:stopped,暫停于內存中,但不會被調度,除非手動啟動;

  • 僵死態:zombie,結束進程,父進程結束前,子進程不關閉

9.進程的分類:

  • CPU-Bound:CPU密集型,非交互;

  • IO-Bound:IO密集型,交互;

  • 根據在linux不同模式下運行分為:

       核心態:這類進程運行在內核模式下,執行一些內核指令(Ring 0)。
       用戶態:這類進程工作在用戶模式下,執行用戶指令(Ring 3)。          

  • 如果用戶態的進程要執行一些核心態的指令,此時就會產生系統調用,系統調用會請求內核指令完成相關的請求,就執行的結果返回給用戶態進程。


10.進程與線程的關系:

  • 進程是程序執行時的一個實例,即它是程序已經執行到課中程度的數據結構的匯集。從內核的觀點看,進程的目的就是擔當分配系統資源(CPU時間、內存等)的基本單位

  • 線程是進程的一個執行流,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。一個進程由幾個線程組成(擁有很多相對獨立的執行流的用戶程序共享應用程序的大部分數據結構),線程與同屬一個進程的其他的線程共享進程所擁有的全部資源。

  • 進程——資源分配的最小單位,線程——程序執行的最小單位

  • 從函數調用上來說,進程創建使用fork()操作;線程創建使用clone()操作


參考資料:《Linux內核設計與實現》《深入理解Linux內核》




二、進程的系統管理工具

  • Linux系統狀態的查看及管理工具
     pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill          pkill, job, bg, fg, nohup    

  •  CentOS 5:SysV init

     CentOS 6:upstart

     CentOS 7:systemd
   

1.pstree命令

   pstree-display a tree of processes(顯示查看進程樹)

   以下為CentOS 6 和 CentOS 7 的區別

[root@CentOS6 ~]# pstree
init─┬─abrtd           #可以看到都是有init生成的
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─automount───4*[{automount}]
     ├─bonobo-activati───{bonobo-activat}
     ├─clock-applet
     ├─console-kit-dae───63*[{console-kit-da}]
     ├─crond
     ├─cupsd
     ├─2*[dbus-daemon]
     ├─2*[dbus-launch]
     ├─devkit-power-da
     ├─dhclient
     ├─gconf-im-settin
     ├─gconfd-2
[root@centos7 ~]# pstree
systemd─┬─NetworkManager─┬─2*[dhclient]
        │                └─2*[{NetworkManager}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─alsactl
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─chronyd
        ├─crond
        ├─cupsd
        ├─dbus-daemon
        ├─gssproxy───5*[{gssproxy}]
        ├─login───bash
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───5*[{polkitd}]


2./proc:內核中的狀態信息;

  Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中   

  • Linux 內核提供了一種通過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。proc文件系統是一個偽文件系統,它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。

  • 內核參數:
        可設置其值從而調整內核運行特性的參數,在/proc/sys/下;
        狀態變量:其用于輸出內核中統計信息或狀態信息,僅用于查看;

  • 參數:模擬成文件系統;

  • 進程:
         /proc/#:
              #:PID
      

wKioL1fSaF-jS6pgAACz_p36FR8002.png


2.啟動進程的方式:

   系統啟動過程中自動啟動:與終端無關的進程;

      用戶通過終端啟動:與終端相關的進程




三、顯示系統當前進程的運行情況

psprocess state 

      ps-report a snapshot of the current processes  


1.使用ps來查看進程信息

  • 語法:ps[OPTION]…

  • 支持三種選項:
       UNIX選項 如 -a
       BSD選項  如 a
       GUN選項  如 –help

  • 選項和參數

      默認顯示當前終端中的進程;
      a 所有與終端相關的進程;
      x 所有與終端無關的進程;
      
    u 顯示進程所有者的信息;

      f 顯示進程的父進程;
      o 屬性… 選項顯示定制的信息

示例如下:

[root@CentOS6 1]# ps a
   PID TTY      STAT   TIME COMMAND
  2024 tty2     Ss+    0:00 /sbin/mingetty /dev/tty2
  2026 tty3     Ss+    0:00 /sbin/mingetty /dev/tty3
  2028 tty4     Ss+    0:00 /sbin/mingetty /dev/tty4
  2030 tty5     Ss+    0:00 /sbin/mingetty /dev/tty5
  2032 tty6     Ss+    0:00 /sbin/mingetty /dev/tty6
  2105 tty1     Ss+    0:00 -bash
  3922 pts/1    Ss+    0:00 /bin/bash
  4864 pts/2    Ss     0:00 -bash
  5142 pts/2    R+     0:00 ps a
[root@CentOS6 1]# ps
   PID TTY          TIME CMD
  4864 pts/2    00:00:00 bash
  5144 pts/2    00:00:00 ps

2.常用組合之一:aux

[root@CentOS6 1]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19344  1632 ?        Ss   08:27   0:01 /sbin/init
root          2  0.0  0.0      0     0 ?        S    08:27   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:27   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    08:27   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S    08:27   0:00 [stopper/0]
root          6  0.0  0.0      0     0 ?        S    08:27   0:00 [watchdog/0]
root          7  0.0  0.0      0     0 ?        S    08:27   0:18 [events/0]
root          8  0.0  0.0      0     0 ?        S    08:27   0:00 [events/0]
root          9  0.0  0.0      0     0 ?        S    08:27   0:00 [events_long/0]
root         10  0.0  0.0      0     0 ?        S    08:27   0:00 [events_power_ef]
root         11  0.0  0.0      0     0 ?        S    08:27   0:00 [cgroup]
root         12  0.0  0.0      0     0 ?        S    08:27   0:00 [khelper]

首行代表的含義如下:

USER:進程的發起者;
PID: 進程號;
%CPU:進程使用掉的cpu資源百分比;
%MEM:進程所占的物理內存百分比;
VSZ: Virtual memory SiZe,虛擬內存集,線性內存
RSS: ReSidentSize, 常駐內存集
STAT:進程狀態
    R:running
    S: interruptable sleeping 可中斷睡眠
    D: uninterruptable sleeping 不可中斷睡眠
    T: stopped 停止狀態
    Z: zombie  僵死態
    +: 前臺進程
    l: 多線程進程
    N:低優先級進程
    <: 高優先級進程
    s: session leader,會話(子進程)發起者;
 START:進程被觸發的時間;
 TIME: 進程實際使用cpu的時間;
 COMMAND:觸發此進程的命令


3.常用組合之二:-ef

     -e: 顯示所有進程

      -f: 顯示完整格式程序信息

[root@CentOS6 1]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 08:27 ?        00:00:01 /sbin/init
root          2      0  0 08:27 ?        00:00:00 [kthreadd]
root          3      2  0 08:27 ?        00:00:00 [migration/0]
root          4      2  0 08:27 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 08:27 ?        00:00:00 [stopper/0]
root          6      2  0 08:27 ?        00:00:00 [watchdog/0]
root          7      2  0 08:27 ?        00:00:20 [events/0]
root          8      2  0 08:27 ?        00:00:00 [events/0]
root          9      2  0 08:27 ?        00:00:00 [events_long/0]
root         10      2  0 08:27 ?        00:00:00 [events_power_ef]
root         11      2  0 08:27 ?        00:00:00 [cgroup]
root         12      2  0 08:27 ?        00:00:00 [khelper]
root         13      2  0 08:27 ?        00:00:00 [netns]
root         14      2  0 08:27 ?        00:00:00 [async/mgr]

首行代表的含義:

UID/PID/PPID: 代表該進程的發起者/進程號/父進程號;
C:            代表cpu的使用率,單位為百分比;
STIME:        表示進程的啟動時間,就是指從什么時候啟動的進程;
TTY: 登陸者的終端位置,遠程登錄則顯示pts/n,本地登錄的顯示ttyn,?表示系統進程
TIME:表示實際花費cpu運行時間,不是系統時間;
CMD: command的縮寫,觸發此命令的進程


4.常用組合之三:-eFH

    -F: 顯示更完整格式的進程信息

            C:cpu utillization(cpu使用率)

            PSR:運行于哪顆cpu之上

    -H: 以進程層級格式顯示進程相關信息

[root@CentOS6 1]# ps -eFH
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          2      0  0     0     0   0 08:27 ?        00:00:00 [kthreadd]
root          3      2  0     0     0   0 08:27 ?        00:00:00   [migration/0]
root          1      0  0  4836  1632   0 08:27 ?        00:00:01 /sbin/init
root        581      1  0  2709   952   0 08:27 ?        00:00:00   /sbin/udevd -d
root       2033    581  0  2708   940   0 08:27 ?        00:00:00     /sbin/udevd -d
root       2034    581  0  2708   920   0 08:27 ?        00:00:00     /sbin/udevd -d
root       1525      1  0  6899   868   0 08:27 ?        00:00:00   auditd
root       1559      1  0 62288  1696   0 08:27 ?        00:00:00   /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
rpc        1610      1  0  4745   892   0 08:27 ?        00:00:00   rpcbind
dbus       1630      1  0  5559  1700   0 08:27 ?        00:00:00   dbus-daemon --system
rpcuser    1652      1  0  5838  1380   0 08:27 ?        00:00:00   rpc.statd
root       1687      1  0 47243  3360   0 08:27 ?        00:00:00   cupsd -C /etc/cups/cupsd.conf

常用組合之四 :-eo axo

  • o field1,field2…:自定義要顯示的字段,以逗號分隔

  • 常用的字段:pid,ni,pri,pcpu,stat,comm,tty,ppid

        ni:  nice值
        priority:優先級
        psr: processor, CPU編號
        rtprio: 實時優先級

示例如下

[root@CentOS6 1]# ps -eo pid,tty,ni,comm
   PID TT        NI COMMAND
     1 ?          0 init
     2 ?          0 kthreadd
     3 ?          - migration/0
     4 ?          0 ksoftirqd/0
     5 ?          - stopper/0
     6 ?          - watchdog/0
     7 ?          0 events/0
     8 ?          0 events/0
     9 ?          0 events_long/0
    10 ?          0 events_power_ef
    11 ?          0 cgroup



四、搜索進程


1.最靈活:ps選項| 其它命令

   如下所示:

[root@CentOS6 ~]# ps aux |grep postfix
root       1945  0.0  0.3  80896  3436 ?        Ss   08:27   0:00 /usr/libexec/postfix/master
postfix    1952  0.0  0.3  81144  3440 ?        S    08:27   0:00 qmgr -l -t fifo -u
postfix    5960  0.0  0.3  80976  3400 ?        S    21:48   0:00 pickup -l -t fifo -u
root       5971  0.0  0.0 103320   944 pts/2    S+   21:50   0:00 grep --color=auto postfix

2.pgrep,pkill 

   按預定義的模式檢索,顯示指定的進程信息

  語法pgrep[options] patter

 選項:

      -u uid: effective user,生效者

      -U user: real user,顯示以指定用戶身份運行的進程;

[root@CentOS6 ~]# pgrep -U postfix
1952
5960

      -t terminal: 與指定終端相關的進程

      -l: 顯示pid和進程名

      -a: 顯示完整格式的進程名

[root@centos7 ~]# pgrep -U postfix -l
1180 qmgr
2896 pickup
[root@centos7 ~]# pgrep -U postfix -a
1180 qmgr -l -t unix -u
2896 pickup -l -t unix -u

      -P pid: 顯示父進程為此處指定的進程的進程列表

[root@centos7 ~]# ps -eFH |grep sshd
root       2236   1088  0 36394  5572   0 14:34 ?        00:00:02     sshd: root@pts/1
[root@centos7 ~]# pgrep -P 1088
2236

    直接按模式搜索:

[root@centos7 ~]# pgrep ssh  #按ssh 開頭的的進程搜索
1088
2236
[root@centos7 ~]# pgrep ss
821
1088
2236
[root@centos7 ~]# pgrep http

3.pidof 命令

  根據進程名取其pid

  語法:pidof PROGRAM(給定命令行程序)

[root@centos7 ~]# pidof sshd
2236 1088



五、進程管理工具

1.uptime 命令

  • 顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1、5、10分鐘的平均負載,一般不會超過1);

  • 系統平均負載:指在特定時間間隔內運行隊列中的平均進程數;

  • 如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題;

  • 如果linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了。

示例如下:

[root@centos7 ~]# uptime
 22:22:11 up 13:54,  2 users,  load average: 0.00, 0.01, 0.05


2.top命令

   – display Linux processes

     相對于ps而言,ps顯示的是某個時間點的進程狀態信息,然而在實際的運用當中,我們可能需要動態持續監控進程的運行狀態,top命令就可以實現這一功能。

top - 22:29:39 up 14:02,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 359 total,   2 running, 357 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1001332 total,   660132 free,   157192 used,   184008 buff/cache
KiB Swap:  2098172 total,  2098172 free,        0 used.   678584 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                           
  2982 root      20   0  146276   2268   1424 R  0.3  0.2   0:00.09 top                                                                                               
     1 root      20   0   41340   3812   2396 S  0.0  0.4   0:03.32 systemd                                                                                           
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.04 kthreadd                                                                                          
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.51 ksoftirqd/0                                                                                       
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.32 kworker/u256:0                                                                                    
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                                                                       
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                                                                            
     9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0                                                                                           
    10 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/1                                                                                           
    11 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/2                                                                                           
    12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/3                                                                                           
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/4                                                                                           
    14 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/5                                                                                           
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/6                                                                                           
    16 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/7                                                                                           
    17 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/8

1)排序:
     P:以占據cpu百分比排序;
     M:以占據內存百分比排序;
     T:累計占用cpu時間排序
2)首部信息:
     uptime信息:l 命令 是否顯示;
     tasks及cpu:t 命令 是否顯示;
     內存信息:  m 命令 是否顯示;
3)退出命令:    q
  刷新時間間隔:s
  終止指定進程:k
4)選項:
      -d #:指明延遲時長,單位為妙;
      -n #:顯示的批次數量;
      -b :batch,批次顯示;

每一行代表的含義如下:

第一行:uptime信息
   1.系統當前的時間,即:22:29:39
   2.系統啟動到現在所經過的時間,即:up 14:02
   3.當前已登錄系統的用戶數,即:2 users
   4.系統在1,5,15分鐘的平均負載,值越小表示系統越空閑,如果高于1,就需要注意當前系統負載過高。
   
第二行:
   顯示的是目前進程的總量與個別程序在什么狀態(running,sleeping,stopped,zombie),需要注意的是最后的zmobie值,如果不是0就要查看下哪個進程處于僵死狀態;
 
第三行:
   顯示的是cpu的整體負載,如果說是多核心的cpu,可以按下數字1來切換成不同cpu的負載率;
   us:user space用戶運行程序占用CPU的百分比;
   sy:system (kernel space)用于運行內核占用CPU百分比;
   ni:nice用戶進程空間所改變優先級的進程占用CPU的百分比;
   id:idle空閑CPU百分比;
   wa:wait io 等待I/O花費時間;
   hi:hardware interrupt 硬件中斷占用CPU百分比;
   si:software interrupt 軟件中斷占用CPU百分比;
   st:stolen,被虛擬機“偷走”的百分比
   
第四行:
  表示物理內存的使用情況;
第五行:
  表示交換分區的使用情況;
第六行:
  這里默認是空白顯示,當在top程序當中輸入命令時,顯示狀態的地方,這里可以輸入的命令有:
   P:以占據CPU百分比大小排序;
   M:以占據Memory空間大小排序;
   T:CPU累計占用時間排序;
   l:是否顯示系統負載行;
   t:是否顯示進程摘要信息及CPU負載狀態;
   1:這里是數字1,平均或單獨顯示CPU的負載狀態;
   m:是否顯示內存相關的狀態信息;
   q:退出命令;
   s:修改延遲時長;
   k:終止指定進程
   
top命令行代表含義
   PID: 每個進程ID;
   USER:進程所屬的使用者;
   PR:  Priority的簡寫,進程的優先級,越小優先級越高;
   NI:  Nice的簡寫,與Priority有關,也是越小越早被運行;
   VIRT:進程需要的虛擬內存大小,而非使用的虛擬內存大??;
   RES: 進程當前使用的內存大小,不包括swap;
   SHR: 進程與其他進程共享的內存大小,可通過RES-SHR來計算進程所占用的物理內存
   S:   進程狀態;
   %CPU:CPU的使用率;
   %MEM:物理內存是使用率;
   TIME+:CPU使用時間的累加
   


3.htop命令

   除了top命令外,還有一個top的增強版命令htop,系統默認情況下沒有安裝,需要epel源來進行安裝;(在工作中epel源,直接指定阿里云,網易或者搜狐的鏡像網站即可)

[epel]
name=Fedora-epel/7/x86_64
baseurl=http://10.1.0.1/fedora-epel/$releasever/$basearch/                       # 使用的是變量 6和7都適用
gpgcheck=0

  安裝好之后,直接通過 # yum install htop 命令進行安裝,安裝后執行htop命令即可,

  如下:

wKiom1fTfs-xCEpEAAEhHLXQP_k680.png

幫助如下:

wKiom1fThXfAcxccAACKdfToWiU616.png

選項:
  -d #: 指定延遲時間;
  -u UserName: 僅顯示指定用戶的進程;
  -s COLUME: 以指定字段進行排序;
htop界面所支持的一些交互式命令:
   s: 跟蹤選定進程的系統調用;
   l: 顯示選定進程打開的文件列表;
   a:將選定的進程綁定至某指定CPU核心;
   t: 顯示進程樹

詳細使用方法參考

   http://www.cnphp6.com/archives/65078

   https://linux.cn/article-3141-1.html


六、內存工具

 動態顯示系統資源的使用情況,這些資源包括:內存、磁盤、網絡、cpu等資源

1.vmstat命令:虛擬內存信息

   vmstat[options] [delay [count]]

示例:  

[root@centos7 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 458712   1372 295840    0    0     4     0   29   24  0  0 99  0  0
[root@centos7 ~]# vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 458664   1372 295840    0    0     4     0   29   24  0  0 99  0  0
 0  0      0 458664   1372 295840    0    0     0     0   21   21  0  0 100  0  0
 0  0      0 458664   1372 295840    0    0     0     0   21   13  0  0 100  0  0

  每一行所代表的含義:

  • procs:
      r:等待運行的進程的個數,CPU上等待運行的任務的隊列長度;
      b:處于不可中斷睡眠態的進程個數;被阻塞的隊列的長度;

  • memory:
      swpd: 交換內存的使用總量;
      free:空閑物理內存總量;
      buffer:用于buffer的內存總量;
      cache: 用于cache的內存總量;  

  • swap:
      si:數據進入swap中的數據速率(kb/s);
      so:數據離開swap的速率(kb/s);

  • io:
      bi:從塊設備讀入數據到系統的速度(kb/s);

      bo:保存數據至塊設備的速率(kb/s);

  • system:
      in:中斷速率,每秒被終端的次數;
      cs:上下文(進程)切換的速率;  

  • cpu:

      us:user space 用戶運行程序占用CPU的百分比;
      sy:system(kernel space)用于運行內核占用CPU的百分比;

      id:idle 空閑CPU百分比;
      wa:wait io 等到I/O花費的時間;  

      st:stolen,被虛擬化技術偷走的百分比;

選項:

     -s:顯示內存統計數據

[root@centos7 ~]# vmstat -s
      1001332 K total memory
       245032 K used memory
       188496 K active memory
       178356 K inactive memory
       458940 K free memory
         1372 K buffer memory
       295988 K swap cache
      2098172 K total swap
            0 K used swap
      2098172 K free swap
         8111 non-nice user cpu ticks
           36 nice user cpu ticks
        24887 system cpu ticks
      7004201 idle cpu ticks
         3772 IO-wait cpu ticks
            0 IRQ cpu ticks
          279 softirq cpu ticks
            0 stolen cpu ticks
       245987 pages paged in
        39707 pages paged out
            0 pages swapped in
            0 pages swapped out
      1998930 interrupts
      1654583 CPU context switches
   1473380853 boot time
         4787 forks



2.pmap命令 報告進程的內存映射

 report memory map of a process

 pmap[options] pid[…]

       -x: 顯示詳細格式的信息;

 如下:

[root@centos7 ~]# pmap 1
1:   /usr/lib/systemd/systemd --switched-root --system --deserialize 21
00007ff0a5d59000     16K r-x-- libuuid.so.1.3.0
00007ff0a5d5d000   2044K ----- libuuid.so.1.3.0
00007ff0a5f5c000      4K r---- libuuid.so.1.3.0
00007ff0a5f5d000      4K rw--- libuuid.so.1.3.0
00007ff0a5f5e000    224K r-x-- libblkid.so.1.1.0
00007ff0a5f96000   2048K ----- libblkid.so.1.1.0
00007ff0a6196000     12K r---- libblkid.so.1.1.0
00007ff0a6199000      4K rw--- libblkid.so.1.1.0

 另外一種實現:

       # cat /proc/PID/maps

 如下:

[root@centos7 ~]# cat /proc/1/maps
7ff0a5d59000-7ff0a5d5d000 r-xp 00000000 08:03 33782768        /usr/lib64/libuuid.so.1.3.0
7ff0a5d5d000-7ff0a5f5c000 ---p 00004000 08:03 33782768        /usr/lib64/libuuid.so.1.3.0
7ff0a5f5c000-7ff0a5f5d000 r--p 00003000 08:03 33782768        /usr/lib64/libuuid.so.1.3.0
7ff0a5f5d000-7ff0a5f5e000 rw-p 00004000 08:03 33782768        /usr/lib64/libuuid.so.1.3.0
7ff0a5f5e000-7ff0a5f96000 r-xp 00000000 08:03 34593175        /usr/li



七、系統監控工具:


1.glances

 glances是一款用于Linux、BSD的開源命令行系統監控工具。能夠監視CPU、負載、內存、磁盤I/O、網絡流量、文件系統、系統溫度等信息。

如下:

wKiom1fTuYSDYq6xAADlAuYhLYc183.png幫助信息如下:

wKioL1fTue2zcpnOAACDJaeZzus929.png常用選項:

    -b: 以Byte為單位顯示網卡數據速率

    -d: 關閉磁盤I/O模塊

    -f:/path/to/somefile: 設定輸入文件位置

    -o:{HTML|CSV}:輸出格式

    -m: 禁用mount模塊

    -n: 禁用網絡模塊

    -t #: 延遲時間間隔

    -1:每個CPU的相關數據單獨顯示

 

C/S模式下運行glances命令

  •  服務模式:

         glances -s -B IPADDR

         IPADDR: 指明監聽的本機哪個地址

  • 客戶端模式:

         glances -c IPADDR

         IPADDR:要連入的服務器端地址


2.dsate命令:系統監控工具(很重要)

   dstat是一個可以取代vmstat、iostat、netstat和ifstat這些命令的多功能產品。dastat可以很方便的監控系統運行狀況并用于基準測試和排除故障。

   如下圖所示:

wKioL1fTw_yAwcMGAACmLLSr1QE482.png

 語法:dstat[-afv] [options..] [delay [count]]

 常用選項:     

    -c:顯示cpu相關信息
      -C #,#,...,total
   -d,--disk: 顯示磁盤相關信息
      -D total,sda,sdb,...
   -g:顯示page相關統計數據;
   -m: 顯示memory相關統計數據;
   -n: 顯示network相關統計數據;
   -p: 顯示process相關統計數據;
   -r: 顯示io請求相關的統計數據;
   -s: 顯示swapped相關的統計數據;
   --tcp
   --udp
   --unix
   --raw
   --socket
   --ipc
   --top-cpu:顯示最占用CPU的進程;
   --top-io: 顯示最占用io的進程;
   --top-mem: 顯示最占用內存的進程;
   --top-latency: 顯示延遲最大的進程

使用參考:

https://linux.cn/article-3215-1.html




八、進程管理工具

   以上都是一些進程的查看、進程資源的獲取等命令,接下來是進程的管理,所謂進程的管理就是向進程發送一些控制信號,來完成對進程的管理控制。


  Kill命令

 顯示當前系統的信號,以及向進程發送信號指令,以實現對進程的管理。

 1.kill -l [signal]

  顯示當前系統可用信號(或者使用man 7 signal)  

   如下:

[root@CentOS6 ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
[root@CentOS6 ~]# kill -l 1
HUP

2.每個信號的表示方法有三種:

      1)信號的數字標識;如 1

      2)信號的完整名稱;如 SIGHUB

      3)信號的簡寫名稱;如 HUB

3.向進程發送信號:

      kill [-s signal|-SINGAL]pid…

[root@CentOS6 ~]# ps aux |grep httpd  
root       7654  0.0  0.3 186052  3920 ?        Ss   06:02   0:00 /usr/sbin/httpd
apache     7658  0.0  0.2 186052  2516 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7659  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7660  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7661  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7662  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7663  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7664  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
root       7697  0.0  0.0 103316   844 pts/0    S+   06:06   0:00 grep --color=auto httpd
[root@CentOS6 ~]# kill -s 15 7660
[root@CentOS6 ~]# ps aux |grep httpd
root       7654  0.0  0.3 186052  3920 ?        Ss   06:02   0:00 /usr/sbin/httpd
apache     7658  0.0  0.2 186052  2516 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7659  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7661  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7662  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7663  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7664  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
root       7700  0.0  0.0 103316   848 pts/0    S+   06:06   0:00 grep --color=auto httpd

4.常用的信號:

  • SIGHUP,1: 無須重新啟動進程而讓其重讀配置文件,并生效;

  • SIGINT,2: 打斷正在運行的進程;相當于Ctrl+c;

  • SIGKILL,9: 強行終止(殺死)正在運行的進程;

  • SIGTERM,15:安全終止正在運行的進程;

  • SIGCONT,18:繼續運行指定的進程;

  • SIGSTOP,19:暫停進程;


killall命令

  殺死所有的進程

  killall [-SIGNAL] program

[root@CentOS6 ~]# killall httpd
[root@CentOS6 ~]# ps aux |grep httpd
root       7759  0.0  0.0 103316   848 pts/0    S+   06:30   0:00 grep --color=auto httpd



第二篇:作業管理(job control)


Linux的作業控制


1.job:

    前臺作業(foreground):通過終端啟動,且啟動后一直占據終端

    后臺作業(background):可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)


2.如何讓作業運行于后臺?

   (1) 運行中的作業:

          Ctrl+z

         注意:送往后臺后,作業會轉為停止態;

   (2) 尚未啟動的作業:

         # COMMAND &

  注意:

     ◎此類作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。      ◎如果希望送往后臺后,剝離與終端的關系:

         # nohup COMMAND &


3.查看所有作業

    # jobs

[root@centos7 ~]# jobs
[1]-  Stopped                 ping 10.1.252.153
[2]+  Stopped                 vim /tmp/abc.txt

4.作業控制:

# fg[[%]JOB_NUM]:把指定的后臺作業調回前臺;

# bg[[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行;

# kill [%JOB_NUM]:終止指定的作業;(百分號和作業號是不可以省略的)

  示例:

[root@CentOS6 ~]# jobs
[1]-  Stopped                 ping 10.1.252.161
[2]+  Stopped                 htop
[root@CentOS6 ~]# kill %1

[1]-  Stopped                 ping 10.1.252.161
[root@CentOS6 ~]# jobs
[1]-  Terminated              ping 10.1.252.161
[2]+  Stopped                 htop
[root@CentOS6 ~]# jobs
[2]+  Stopped                 htop

5.進程優先級

  • 可通過nice值調整的優先級范圍:100-139;

  •  nice值分別對應于:-20,19;

  • 進程啟動時默認的nice值為0,優先級為120;

  • 只有根用戶才能降低nice值(提高優先性);

調整進程的nice值的方法

   1)對于尚未啟動的進程

      # nice -n N COMMAND :N表示nice值,范圍 -20~19;

       僅管理員可調低nice值

   2)對于已經啟動并處于運行中進程的nice值

      # renice [-n] N PID

   3)查看nice值和優先級

      # ps axo pid,comm,ni,priority

示例:

[root@CentOS6 ~]# nice -n -5 htop
[root@CentOS6 ~]# ps axo pid,comm,ni,priority |grep htop
  8275 htop             -5  15
[root@CentOS6 ~]# renice -n -3 8275
8275: old priority -5, new priority -3
[root@CentOS6 ~]# ps axo pid,comm,ni,priority |grep htop
  8275 htop             -3  17

 

原創文章,作者:zhumengxiaotao,如若轉載,請注明出處:http://www.www58058.com/45616

(0)
zhumengxiaotaozhumengxiaotao
上一篇 2016-09-11
下一篇 2016-09-11

相關推薦

  • shell腳本作業

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名, IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 腳本代碼 #!/bin/bash #author:wzc         echo Hostname:…

    Linux干貨 2016-08-15
  • N26第三周

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。        who -i或-u 顯示閑置時間, 若該用戶在前一分鐘之內有進行任何動作,將標示成"."號,如果該用戶已超過24小時沒有任何動作,則標示出"old"字符串   &n…

    Linux干貨 2017-01-16
  • Linux 第四天: (07月28日) 練習和作業

    Linux 第四天: (07月28日) 練習和作業         定義別名命令baketc, 每天將/etc/目錄下所有文件, 備份到/testdir獨立的子目錄下, 并要求子目錄格式為backupYYYY-mm-dd, 備份過程可見 alias baketc='cp -a /etc/ /testdir/b…

    Linux干貨 2016-08-08
  • rsync+inotify實現數據實時備份

    rsync+inotify實現數據實時備份 §·rsync簡單介紹 1 §·什么是rsync 1 §·rsync的功能特性 1 §·rsync的優點和不足 2 §·初識inotify 2 §·rsync命令工作模式 2 §·rsync常用命令選項 3 §·配置rsync以守護進程的方式運行 3 ※·安裝并啟動 xinetd 3 ※·為rsync服務器提供配置…

    Linux干貨 2016-10-30
  • oracle6.7使用udev作為asm

    1、需求 oracle6.7使用udev作為asm /dev/sdb <–> /dev/asm-diskb /dev/sdc <–> /dev/asm-diskc /dev/sdd <–> /dev/asm-diskd /dev/sde <–> /dev/asm-…

    Linux干貨 2016-07-29
  • 馬哥教育-第二周作業

    問題一:文件管理類命令 常規命令:mkdir、rmdir、stat、touch、copy、mv、rm (1).mkdir  創建目錄: 注意:路徑基名方為命令的作用對象;基名之前的路徑必須得存在; -p:自動按需創建父目錄; -v:顯示創建過程; -m 參數:直接給定所需權限; 例子:問題:創建 /tmp/x ; /tmp/x/y1 ; /tmp/…

    Linux干貨 2016-12-11
欧美性久久久久