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
2.啟動進程的方式:
系統啟動過程中自動啟動:與終端無關的進程;
用戶通過終端啟動:與終端相關的進程
三、顯示系統當前進程的運行情況
ps: process 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命令即可,
如下:
幫助如下:
選項:
-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、網絡流量、文件系統、系統溫度等信息。
如下:
-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可以很方便的監控系統運行狀況并用于基準測試和排除故障。
如下圖所示:
語法: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