CentOS的進程管理二
在上一篇中已經寫了一些進程管理的相關命令:
pstree, ps,pgrep,pidof, top
下面繼續:
vmstat ---- 顯示虛擬內存統計
格式: vmstat [options] [delay [count]]
顯示結果摘要:
procs-----------memory-------------swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0172900 0 902768 0 0 4 0 16 24 0 0100 0 0
其結果中的內容:
Procs
r:可運行的進程數(運行或等待時間)
b: 不間斷睡眠中的進程數
Memory:
swpd:所使用的虛擬內存量
free:空閑內存量
buff:用作緩沖區的內存量
cache:用作緩存的內存量
inact:非活動內存量 (得加 -a 選項)
active:活動內存量 (得加 -a 選項)
Swap (過大, 說明系統內存應該升級了)
si:從磁盤交換的內存量
so:交換到磁盤的內存數量
IO (保持一定範圍居高不下
bi:從塊設備接受的塊
bo:發送到塊設備的塊
System
in:每秒中斷的次數, 包括時鐘
cs:每秒上下文開關的數目
CPU --- 這是總CPU 時間的百分比
us:運行非內核代碼的時間
sy:運行內核代碼所花費的時間
id:閑置時間. 在Linux 2.5.41之前, 這包括IO等待時間.
wa:等待IO的時間, Linux 2.5.41之前, 包括空閑時間.
st:從虛擬機中竊取的時間
選項:
-s:從
-a:顯示內存的活動與非活動信息
delay: 按照delay所指示的時間重復執行vmstat命令, 默認單位為秒;
count: 重復執行vmstat命令的次數;
註意: /proc下的內容通產只能用輸出重定向修改, 一般不用vi編輯器
pmap ---- 報告進程的內存映射
格式: pmap [options] pid [...]
顯示結果摘要:
00007f647a279000 44K r-x-- libnss_files-2.17.so
00007f647a284000 2044K----- libnss_files-2.17.so
64位內存地址 大小 權限 數據
選項:
-x,--extended: 顯示擴展的信息
htop(默認沒有, 需額外安裝) ---- 交互式進程查看器
格式: htop [-dChusv]
常用選項:
-d#:htop刷新的間隔時間;
-uUSERNAME: 顯示指定用戶的進程
-sCOLUME_NAME: 根據指定字段進行排序;
交互式命令:
l:顯示指定進程打開的文件列表
tF5: 顯示進程樹結構, 以顯示之間的父子關系
a:將選定的進程綁定到某指定的CPU核心上運行;
glances(默認沒有, 需額外安裝) ---- 基於跨平臺的監視工具(可訪問遠程的服務器資源)
格式: glances [-bdmnl] [-t refresh] [-f file][-o output]
常用選項:
-b:以KByte為單位顯示網卡的數據速率
-d:關閉磁盤I/O模塊
-m:關閉Mount模塊
-n:關閉Network模塊
-l:單獨顯示每顆CPU核心的數據統計信息;
-t#: 設定刷新時間間隔
-o{HTML|CSV}: 為輸出數據指定輸出的格式
-f/PATH/TO/OUTPUT_DIR: 指定輸出文件的路徑, glances.html
glances可以工作於C/S模型下:
S:服務器模式
glances-s-B IPADDR
IPADDR:服務器本地的某個IP地址
C:客戶端模式
glances-cIPADDR
IPADDR:遠程服務器指定監聽的IP地址;
dstat(默認沒有, 需額外安裝) ---- 生成系統資源統計的通用工具
格式: dstat [-afv] [options...] [delay[count]]
常用的選項:
-c,--cpu: 顯示CPU相關的信息;
-d,--disk: 顯示磁盤相關的信息;
-g,--page: 顯示page相關的信息;
-n,--net: 顯示與Interface相關信息;
-y,--sys: 顯示與系統相關的信息;
--tcp:顯示與TCP連接狀態相關的信息
--udp:顯示與UDP連接有關的信息
--socket:顯示網絡統計數據
--top-cpu:顯示最占用CPU資源的進程
--top-io:顯示最占用IO的進程;
--top-mem:顯示占用最多內存的進程;
--top-bio:指出塊I/O最大的進程
進程管理類命令: kill, pkill, killall
kill ---- 終止指定的進程
格式: kill [-s signal | -signal] pid ...
查看信號的信息:
kill-l[signal]
有效的信號表示方法:
1.使用信號的數字編碼進行表示
2.使用信號的完整名稱進行表示
3.使用信號的簡寫名稱進行表示, 簡寫名稱就是完整名稱中不包括"SIG"的其余部分
常用的信號:
1)SIGHUP: 無需關閉對應進程而讓其重新讀取自身的配置文件
2)SIGINT: 終止正在運行的前臺進程
9)SIGKILL: 沒有任何預兆的終止正在運行的進程
15)SIGTERM: 默認信號, 終止正在運行的進程
18)SIGCONT: 讓轉入後臺的進程繼續運行
19)SIGSTOP: 讓進程轉入後臺並停止運行
killall ---- 按名稱殺死進程
格式: killall PROCESS_NAME
pkill ---- 根據進程名進行殺死進程
進程作業管理命令: jobs, bg, fg, nohup
進程作業分為前臺作業與後臺作業;
前臺作業:(foreground job)通過終端啟動並且啟動後會一直占據終端的進程;
後臺作業:(background job)可以通過終端啟動,但啟動後立即轉入後臺運行,釋放終端;
如何讓作業工作於後臺:
1.正在運行的前臺作業:
快捷鍵:Ctrl+z
註意:實際上是向此進程發送SIGSTOP信號,使得該進程轉入後臺以後即停止運行;
2.尚未啟動的作業,使其啟動並轉入後臺;
在命令後面空格,然後再加&;示例:# COMMAND &
註意:此類作業是從前臺啟動,啟動後立即轉入後臺,但即便如此,此進程也是與終端相關的進程;如果終端關閉,則此類進程也會終止;
3.尚未啟動的作業,使其啟動並轉入後臺,同時剝離其與終端的關聯;
在命令前加nohup,命令後加&;示例:# nohup COMMAND &
查看後臺作業的信息: jobs
將後臺作業轉入前臺運行: fg [JOB_ID]
使前臺作業轉入後臺運行: bg [JOB_ID]
終止後臺作業: kill %JOB_ID
調整進程優先級的命令: nice, renice
使用nice調整進程的靜態優先級:
NICE值的取值範圍是: -20 ---- 19
默認情況下,所有用戶進程的初始NICE值都是0: 默認優先級為120;
註意;只有超級用戶root才能使用負NICE值提升進程的優先級;普通用戶只能使用正NICE值來降低進程的優先級;
nice:啟動進程的時候直接指定進程的NICE值;
格式:nice [OPTION] [COMMAND [ARG]...]
選項:
-n NICE:指定NICE值
renice:針對於已經啟動的進程修改其NICE值;
格式:renice [-n] priority [[-p] pid ...]
選項:
-n NICE:調整指定的進程的優先級,在原有的NICE值的基礎上,再加上此處指定的NICE值;
其他相關的命令:sar, iostar, mpstat, p1
idstat, tsar, iftop, nethog...
Linux系統的進程調度(任務調度)(Linux中不允許同時被兩個或多個進程修改文件)
進程調度:在未來某個時間點,讓系統自動執行我們實現編寫好的命令或腳本的列表,從而使得即使用戶不再計算機旁邊也可以按時完成任務;
為了能夠進行進程調度,就必須要有一種機制能夠識別時間發生的時間並且能夠運行用戶所預期的命令;這種機制在Linux中是通過特定的守護進程來實現的;
這類守護進程包括:
atd:將預先編寫好的命令在未來某個時間點執行一次;
crond:將預先編寫好的命令在未來的符合條件的時間點重復執行;
查看此類守護進程是否正常運行;
CentOS 6: service {atd|crond} status
結果為running或者"正在運行",都表示其正常工作
CentOS 7: systemctl status {atd.service|crond.service}
結果為active(running)就表示其正常工作
所有的進程調度的結果都會以電子郵件的方式發送到用戶的郵箱中;
本地電子郵件服務:
SMTP: Simple Mail Transfer Protocol, 簡單郵件傳輸協議, TCP/25
POP3: Post-Office Protocol Version 3, 郵局協議第三版, TCP/110
IMAP4: Internet Mail Access Protocol Version4, 互聯網郵件訪問協議第四版, TCP/43
整個電子郵件系統分成四大部分:
MUA:Mail UserAgent,郵件用戶代理,幫助用戶發送電子郵件到服務器或者幫助用戶從服務器接受電子郵件的應用程序;
MTA(Mail TransferAgent)郵件傳輸代理,將來自MUA的信件轉發給指定用戶的程序
MDA(Mail DeliveryAgent)郵件投遞代理,將MTA接受的信件依照信件的流向(送到哪裏)將該信件放置到本機賬戶下的郵件文件中(收件箱)
MRA
常用的MUA:瀏覽器, Outlook, Foxmail, mail|mailx
在linux中發送郵件的格式:
mail [-s SUBJECT]USERNAME[@HOSTNAME]
Linux中用戶的郵箱:/var/spool/mail/USERNAME
atd守護進程能夠識別和完成有at命令, batch命令制作的任務計劃;
at命令:
at,batch,atq,atq,atrm-queue,examine or delete jobs for later exection
at命令執行流程:
# at 2:05 tomorrow
at>/home/kyle/do_job
at> Ctrl+D
AT Time中的時間表示方法
格式:at [option] TIME
TIME:
1.HH:HH [YYYY-mm-dd]
2.noon, midnight, teatime, tomorrow
3.tomorrow
4.now+#UNIT UNIT:min, hours, days, weeks, months, years...
示例:at -f atfile(命令文本) 17.00
at定義的作業有隊列的概念,通常隊列使用單個字母來表示,默認是a;
at -q QUEUE_NAME TIME
選項:
-q QUEUE 使用指定的佇列(Queue)來儲存,at的資料是存放在所謂的queue中,使用者可以同時使用多個queue,而queue的編號為a,b,c... z以及A,B,...Z共52個
-f FILE 讀入預先寫好的命令檔。使用者不一定要使用交談模式來輸入,可以先將所有的指定先寫入檔案後再一次讀入網絡應用
-l:查看指定的計劃作業,相當於atq
-d JOB ID:清楚指定的計劃作業,相當於atrm
-c:查看指定的作業的內容
-v:列出所有已經完成但尚未刪除的指定
-V:印出版本編號
batch命令:
batch命令在定義任務的時候,無需指定時間,是由系統自行選擇在系統比較空閑的時候,完成此計劃任務;其他的配置與at完全相同;
周期行執行任務計劃:cron
cronie軟件包,提供crond守護進程以及cron的其他管理工具;
cron任務通常分為兩類:
系統cron任務:/etc/crontab 保存cron任務
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed
註意:
1. * * * * *:定義周期執行任務的時間
command to be executed: 應該執行的任務命令及命令行參數;
註意:為了保證任務能夠準確執行, 命令通常是用絕對路徑填寫;
2.各個字段之間使用一個或多個空白字符進行分隔;
3.任務運行的結果以郵件的方式直接發給發布任務的用戶;
時間表示法:
1.特定時間:給定時間點的有效取值範圍內的所有有效值;如:0 5 3 9 *
2.通配符時間:*,表示“每……“之意,給定時間點的所有有效值;如: * * * * *
3.離散時間:在給定的時間點上,使用逗號分隔;如:0 8,20 * * 1,3,5
4.連續時間:在給定的時間點上,使用減號分隔;如:0 8 * * 1-5
5.步長時間:在給定的時間點上,使用除號分隔;如:*/2 * * * *
註意:所除的數必須能整除,否則,無意義
crontab命令:
格式:crontab [-u user] [-l | -r | -e] [-i]
常用選項:
-u USERNAME: 超級用戶為其他用戶設置或編輯用戶cron任務時使用
-l: 查看所有的已經被定義的計劃任務
-e: 使用vi編輯器編輯crontab文件
-r: 移除所有的計劃任務, 不推薦使用
-i: 在使用-r選項時, 進行交互
CentOS的進程管理二