1 進程管理
進程和程序的卻別:一個時動態的一個是靜態的
進程的基本狀態和轉換:(以下七種狀態)
一個時間片沒有執行完等待下一個時間片再次執行。
進程的優先級
系統優先級:數字越小優先級越高
0-139:(在centos4,5中) ? 各有140個運行隊列和過期隊列 ,每個運行隊列里又有優先級相同的進程在排隊,如果在一個時間片里1隊列里的進程未執行完 ,則備安排到過期隊列里,下一個時間到來,先運行1運行隊列里的程序,什么時候1運行隊列里的進程執行完畢后,過期1隊列里的程序又變成1運行隊列了,依次順序執行下去
0-98,99(CentOS6)
實時優先級:99-0 值最大優先級最高
進程內存
LRU:Least Recently Used?近期最少使用算法,釋放內存
進程訪問的時間順序來排列,最近執行的進程排到第一位原本的第一位被擠到第二位了依次類推 內存里的物理塊為8個。被擠到最后一個的進程在被擠將清除除內存塊里。
查看進程進程ps ? (常用的 ps? aux? )BSD類型的選項
? a? 包括所有終端中的進程
? x? 包括不鏈接終端的進程 (不在終端上顯示的 系統內部運行的進程)
? u? 顯示進程所有者的信息
f 選項顯示進程樹,相當于 –forest
? k|–sort 屬性 對屬性排序,屬性前加 – 表示倒序
? o 屬性… 選項顯示定制的信息 pid、cmd、%cpu、%mem? (o和其他選項組和是必須要和他后面的參數緊挨著不然命令有錯例如:ox pid,cmd,%cpu 則不行 auxo pid ,cmd ,%cpu 則可以)
UNIX類型的選項
-C cmdlist 查找命令的進程列表例如;ps -C bash (查找名字為bash 的進程列表還可以在C后面跟上腳本,來查看腳本的各種信息如:ps -C f1.sh -C f2.sh o pid,%mem,%cpu )
-L 顯示線程 ?
-e: 顯示所有進程,相當于-A ?
-f: 顯示完整格式程序信息 ?
-F: 顯示更完整格式的進程信息 ?
-H: 以進程層級格式顯示進程相關信息 ?
-u userlist 指定有效的用戶ID或名稱 ?
-U userlist 指定真正的用戶ID或名稱 ?
-g gid或groupname 指定有效的gid或組名稱 ?
-G gid或groupname 指定真正的gid或組名稱 ?
-p pid 顯示指pid的進程 ?
–ppid pid 顯示屬于pid的子進程 ?
-M 顯示SELinux信息,相當于Z
查找占用最多內存和CPU的進程:(centos6上不支持排序)
ps axo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head? (占內存最多-代表倒序)
ps axo pid,ppid,cmd,%mem,%cpu –sort=-%cpu | head ?(占cpu最多 —代表倒序由大到?。?/p>
其中 –sort / k 選項某某 可以單獨使用例如 ps aux? –sort? -%mem
搜索進程
按預定義的模式:pgrep ?(支持正則表達式來搜索某個進程pgrep -a “vim”)
pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
pidof + 進程名稱 :可顯示某個進程的進程id 例如:pidof vim
ps -fp 1234? :直顯示某個進程的信息 如1234進程
系統工具
uptime:
顯示當前時間,系統已啟動的總時間、當前上線人數,系統平均負載(1、5、10分 鐘的平均負載,一般不會超過1) ?
系統平均負載: 指在特定時間間隔內運行隊列中的平均進程數 ?
通常每個CPU內核的當前活動進程數不大于3,那么系統的性能良好。
如果每 個CPU內核的任務數大于5,那么此主機的性能有嚴重問題 ?
如果linux主機是1個雙核CPU,當Load Average 為6的時候說明機器已經被 充分使用
進程優先級
進程默認啟動時的nice值為0,優先級為120
nice的優先級數值為-20-19之間
查看nice 的優先級
ps axo pid,comm,ni
調整nice 的優先級
renice -n ? -20 ? 進程pid號
進程管理工具? (動態查看)
top:有許多內置命令:
排序:
P:以占據的CPU百分比,%CPU? (從大到小來查看)
M:占據內存百分比,%MEM ? ? (從大到小來查看)
T:累積占據CPU時長,TIME+
首部信息顯示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分別顯示:1 (數字)
memory信息:m命令
退出命令:q
修改刷新時間間隔:s
終止指定進程:k (默認殺掉占用cpu最大的進程?)
保存文件:W ? (把當前的信息瞬間保存到家目錄下 ,是個隱藏文件 .toprc)
top欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閑cpu
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機偷走的時間
top工具的選項:
-d #: 指定刷新時間間隔,默認為3秒
-b: 全部顯示所有進程
-n #: 刷新多少次后退出
htop命令:EPEL源 (需要安裝)
選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程
-s COLUME: 以指定字段進行排序
子命令:(在htop界面里使用的)
s: 跟蹤選定進程的系統調用
l: 顯示選定進程打開的文件列表
a:將選定的進程綁定至某指定CPU核心
t: 顯示進程樹
查看內存空間:
free [OPTION]
-b 以字節為單位
-m 以MB為單位
-g 以GB為單位
-h 易讀格式
-o 不顯示-/+buffers/cache行
-t 顯示RAM + swap的總和
-s n 刷新間隔為n秒 (free -s 2 查看內存使用情況每2s刷新查看一次)
-c n 刷新n次后即退出
vmstat命令:查看虛擬內存信息
vmstat 2 5? (2s執行一次,執行5次后退出)
iostat:統計CPU和設備IO信息
iostat 1 10? (1s查看一次執行10次后退出)
pmap命令:進程對應的內存映射
pmap -x 234? : 顯示進程234詳細的信息對應的內存映射。
系統監控工具
glances命令:EPEL源
常用選項:
-b: 以Byte為單位顯示網卡數據速率
-d: 關閉磁盤I/O模塊
-f /path/to/somefile: 設定輸入文件位置
-o {HTML|CSV}:輸出格式
-m: 禁用mount模塊
-n: 禁用網絡模塊
-t #: 延遲時間間隔
-1:每個CPU的相關數據單獨顯示
實現遠程監控:
在一臺作為服務器的機器上開啟glances
服務器模式: glances -s -B IPADDR ? (IPADDR: 指明監聽的本機哪個地址的IP號)
在另一臺客戶機開啟監視模式
客戶端模式: glances -c IPADDR ? ?? (IPADDR:要連入的服務器端開啟監視的地址IP)
系統監控工具
dstat命令:系統資源統計,代替vmstat,iostat? (動態更新默認1s一次)
-c: 顯示cpu相關信息
-d: 顯示disk相關信息
-g:顯示page相關統計數據
-m: 顯示memory相關統計數據
-n: 顯示network相關統計數據
-p: 顯示process相關統計數據
-r: 顯示io請求相關的統計數據
-s: 顯示swapped相關的統計數據
dstat –top-cpu:
–top-cpu:顯示最占用CPU的進程
–top-io: 顯示最占用io的進程 ?
–top-mem: 顯示最占用內存的進程 ?
–top-latency: 顯示延遲最大的進程
進程管理工具 kill 命令? kill -1 4556 ? (可以按選項編號來代替選項命令 進程只能是進程ID號可加多個進程ID)
1) SIGHUP: 無須關閉進程而讓其重讀配置文件
2) SIGINT: 中止正在運行的進程;相當于Ctrl+c
3) SIGQUIT:相當于ctrl+\? (退出)
9) SIGKILL: 強制殺死正在運行的進程
15) SIGTERM:終止正在運行的進程? (正常退出此進程)
18) SIGCONT:繼續運行
19) SIGSTOP:后臺休眠
按名稱來殺進程:killall? sleep ? (把同樣名字的進程都給殺掉)
按模式來殺掉進程:pkill ? (正則表達式模糊搜索)
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名(pgrep可用)
-a: 顯示完整格式的進程名(pgrep可用)
-P pid: 顯示指定進程的子進程
作業管理
讓作業運行于后臺
(1) 運行中的作業: Ctrl+z? (進程是放到后臺了但進程停止了)
(2) 尚未啟動的作業:? 命令后面跟 &
后臺執行的進程,無法用ctrl+c關掉 可以使用jobs查看后臺執行的列表的作業編號
用命令fg +作業編號 將它變為前臺終端執行,然后關掉。
或者用kill %+作業編號
fg? +作業編號? :將后臺的進程變為前臺來執行
bg +作業編號 ? :將后太臺停止的進程開始在后臺繼續運行
進程運行的三種模式及相互切換
前臺(未運行的程序)—–>后臺運行:命令后+&
前臺(已運行的程序)—–>后臺休眠:ctrl +z
后臺休眠和后臺運行——->前臺 :fg jobs的 進程編號
后臺休眠——–>后臺運行 :bj jobs的 進程編號
后臺運行——->后臺休眠: kill -19? 進程
后臺休眠和后臺運行——–>結束: kill % jobs的進程編號
后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望 送往后臺后,剝離與終端的關系 ? nohup ping 172.20.0.1 &? (后臺運行剝離終端在服務器上繼續執行 ,即使終端斷網或關機也也可以繼續執行)?
或者用screen會話也能實現:screen ping 172.20.0.1 &
在另一臺終端:screen -r 可查看執行
并行運行多個進程:(提高效率)
方法1 :
寫入一個腳本中:
vim all.sh
進程1&
進程2&
進程3&
然后運行腳本all.sh
方法2:
(進程1&);(進程2&);(進程3&)
方法3 :
{ ? 進程1& ? 進程2& ?? 進程3&? }
任務計劃
Linux任務計劃、周期性任務執行
at ? (未來的某時間點執行一次性的任務 )
at 18:30? (寫入磁盤里的)? 或者 at? now? +15minutes? (在未來的15分鐘執行)
02pm + 3 days? (三天之后的下午2點執行)
ctrl +d 結束保存任務計劃
at的計劃任務存放在 /var/spool/at 目錄下
-l:? 查看計劃任務列表
-d: 刪除任務列表中的計劃任務(加任務號)或者刪除/var/spool/at下的文件也可以
-c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務
創建任務時添加-m:當任務被完成之后,強制給用戶發送一個空郵件,即使沒有標準輸出(at -m 18:00)
注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶 如果寫腳本,將這些標準輸出和錯誤重定向到/dev/null里以防止有大量的垃圾郵件占用磁盤空間
寫入腳本里的計劃任務可以用多行重定向來輸入:
at 18:00? <<EOF
reboot
ls
EOF
/etc/at.{allow,deny}控制用戶是否能執行at任務
用戶白名單:/etc/at.allow 默認不存在,只有該文件中的用戶才能創建at計劃任務
用戶黑名單:/etc/at.deny 默認存在,拒絕該文件中用戶 創建at計劃任務,(默認黑名單里的用戶為空)
如果連個文件都存在,則只時白名單里的用戶才能執行,不在這兩個名單里的用戶也不可 創建計劃任務
如果兩個文件都不存在則只有root用戶才能 創建計劃任務
用戶如在在兩個文件里,也是可以創建計劃任務的,白名單的優先級較高。
cron (周期性運行某任務)計劃周期性執行的任務提交給crond,到指定時間會自動運行
查看crond 是否處于運行狀態:
CentOS 7: systemctl status crond
CentOS 6: service crond status
如果沒有啟動需要手工的啟動起來:
centos6: service start crond
centos7: systemctl start crond
下此開機自動啟動
centos7 : systemctl enable crond
新建計劃任務
vim /etc/crontab
格式為:分鐘 ;小時;天;月;周(0-6)? 以下案例:
10 21 *? * ? * ? echo “hello” ? : 代表每天21:10執行此計劃任務
0 */3 * * * ?? echo “hello” ?? : 代表每3個小時執行
*/20 *? *? *? *? echo “hello” :? 代表每20分鐘執行 (如果被60除不盡則不能這樣用但可用sleep腳本代替例如:cmd0? sleep X ? cmd0 ? sleepX ? 其中X代表任意時間 sleep 默認為秒)
sleep: ? ?? m: 分 h: 小時 d: 天 ? sleep ?? 1m :為一分鐘(1m必須連著寫且不能顛倒)
* ? * ? 10-20 ? * ? *? : 代表每個月的10-20號執行
* ? * ? 10,20 ? * ?? * ?? : 代表每個月的10和20號執行
* ? * ?? 10,20? * ?? 3? :? 他們倆是或的關系
如果有標準輸出則需要重定向到/dev/null里防止發過多的垃圾郵件。
此文件只能是root用戶去創建和修改此文件普通用戶無法修改和創建,但可以通過下面的命令來實現 。
每個用戶都有專用的cron任務文件: /var/spool/cron/
crontab -e :編輯任務
-l: 列出所有任務
-r: 移除所有任務
-i:同-r一同使用,以交互式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務 (crontab -e -u lv 編輯其他用戶的計劃任務)
控制用戶執行計劃任務: /etc/cron.{allow,deny}
當機器因為修改計劃任務開機就重啟時 無法進入到界面
cetnos7上操作;
一種是進入救援模式:另一種不用進入救援模式也可以
重啟后按 e 鍵 然后再
linux16 加 rd.break
再按ctrl +x 進入
首先用戶沒有權限,所以要先加權限
mount -o remount? rw /sysroot
再進去修改文件即可。
centos6 上的操作:關機重啟
進入此界面按任意鍵進入到下面模式
再按a 鍵進入并再后面加 1? 回車即可修改文件保存 再按 init 5 進入到圖形界面即可。
練習
?1、每周的工作日1:30,將/etc備份至/backup目錄中,保存的文件名稱格式 為“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的時間
? mkdir -p /backup ?
? 30? 13? *? *? 1-5? root ? tar Jcvf? /backup/etcbak-`date +F\%-H\%
`.tar.xz &>/dev/null
也可將上述命令寫入腳本,執行腳本即可(%號可能轉義不成功,則必須寫入腳本里執行)
2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至 /tmp/meminfo.txt文件中
0? */2? *? *? * ?grep -e “^S” -e “^M” /proc/meminfo >>/tmp/meminfo.txt
?3、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高 于80%,就執行wall警報
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97419