vmstat
vmstat - Report virtual memory statistics
vmstat [options] [delay [count]]
其結果中的內容:
Procs
r: The number of runnable processes (running or waiting for run time).
b: The number of processes in uninterruptible sleep.
Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)
Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).
System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.
CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
選項:
-s:從/proc/meminfo文件中抽取的信息並加工後輸出;
delay:按照deley所指示的時間重複執行vmstat命令,默認單位爲秒;
count:重複執行vmstat命令的次數;
pmap:
pmap - report memory map of a process
pmap [options] pid [...]
選項:
-x,--extended:顯示擴展的信息
htop,glances,dstat
http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/
htop:
htop - interactive process viewer
htop [-dChusv]
常用選項:
-d #:htop刷新的間隔時間;
-u USERNAME:顯示指定用戶的進程;
-s COLUME_NAME:根據指定字段進行排序;
交互式命令:
l:顯示指定進程打開的文件列表;
t F5:顯示進程樹結構,以顯示進程之間的父子關係;
a:將選定的進程綁定到某指定的CPU核心運行;
glances:
glances - A cross-platform curses-based monitoring tool
glances [-bdmn1] [-t refresh] [-f file] [-o output]
常用選項:
-b:以KByte爲單位顯示網卡的數據速率;
-d:關閉磁盤I/O模塊;
-m:關閉Mount模塊;
-n:關閉Network模塊;
-1:單獨顯示每顆CPU核心的數據統計信息;
-t #:設定刷新時間間隔;
-o {HTML|CSV}:爲輸出數據指定輸出的格式;
-f /PATH/TO/OUTPUT_DIR:指定輸出文件的路徑,glances.html
glances可以工作於C/S模型下:
S:服務器模式
glances -s -B IPADDR
IPADDR:服務器本地的某個IP地址;
C:客戶端模式
glances -c IPADDR
IPADDR:遠程服務器指定監聽的IP地址;
進程之間可以通信的;IPC,Inter-Process Communication
1.signal
2.semaphore
3.shared memory (SHM)
4.socket
dstat:
dstat - versatile tool for generating system resource statistics
dstat [-afv] [options..] [delay [count]]
常用選項:
-c, --cpu:顯示CPU相關的信息;
-d, --disk:顯示磁盤相關信息;
-g, --page:顯示page相關信息;
-n, --net:顯示與Interface相關信息;
-y, --sys:顯示與系統相關的信息;
--tcp:顯示與TCP連接狀態相關的信息;
--udp:顯示與UDP連接有關的信息;
--ipc:
--raw:
--socket:
--top-cpu:顯示最佔用CPU資源的進程;
--top-io:顯示最佔用IO的進程;
進程管理類:
kill, pkill, killall
kill:
kill - terminate a process
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 - kill processes by name
# killall PROCESS_NAME
pkill:
跟據pattern進行進程終止;有可能誤傷其他進程;
進程作業管理命令:
jobs, bg, fg, nohup
進程作業:
前臺作業:
foreground job,通過終端啓動並且啓動後會一直佔據終端的進程;
後臺作業:
background job,可以通過終端啓動,但啓動後立即轉入後臺運行,釋放終端;
如何讓作業工作於後臺:
1.正在運行的前臺作業:
Ctrl+z
注意:實際上是向此進程發送SIGSTOP信號,使得該進程轉入後臺以後即停止運行;
2.尚未啓動的作業,使其啓動並轉入後臺:
# COMMAND &
注意:此類作業是從前臺啓動,啓動後立即轉入後臺,但即便如此,此進程也是與終端相關的進程;如果終端關閉,則此類進程也會終止;
3.尚未啓動的作業,使其啓動並轉入後臺,同時剝離其與終端的關聯;
# nohup COMMAND &
查看後臺作業的信息:
jobs
將後臺作業轉入前臺運行:
fg [JOB_ID]
使後臺作業在後臺運行:
bg [JOB_ID]
終止後臺作業:
kill %JOB_ID
kill %1
調整進程優先級的命令:
nice, renice
調整進程優先級:
0-139
100-139:
使用NICE值調整進程的靜態優先級:
NICE值的取值範圍是:-20~19
默認情況下,所有用戶進程的初始NICE值都是0;默認優先級爲120;
注意:只有超級用戶root才能使用負NICE值提升進程的優先級;普通用戶只能使用正NICE值來降低進程的優先級;
nice:啓動進程的時候直接指定進程的NICE值;
nice - run a program with modified scheduling priority
nice [OPTION] [COMMAND [ARG]...]
選項:
-n NICE:指定NICE值
renice:針對於已經啓動的進程修改其NICE值;
renice - alter priority of running processes
renice [-n] priority [[-p] pid ...]
選項:
-n NICE:調整指定的進程的優先級,在原有的NICE值的基礎上,在加上此處指定的NICE值;
其他相關命令:sar, iostat, mpstat, pidstat, tsar, iftop, nethog...
Linux系統的進程調度(任務調度)
進程調度:在未來某個時間點,讓系統自動執行我們事先編寫好的命令或腳本的列表,從而使得即使用戶不在計算機旁邊也可以按時完成任務;
爲了能夠進行進程調度,就必須要有一種機制能夠識別事件發生的時間並且能夠運行用戶所預期的命令;這種機制在Linux中是通過特定的守護進程來實現的;
這類守護進程包括:
atd:
將預先編寫好的命令在未來某個時間點執行一次;
crond:
將預先編寫好的命令在未來的符合條件的時間點重複執行;
查看此類守護進程是否正常運行:
CentOS6:
]# service {atd|crond} status
結果爲running或者"正在運行",都表示其正常工作
CentOS7:
]# 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 Version 4,互聯網郵件訪問協議第四版,TCP/143
整個電子郵件系統分成四大部分:
MUA:Mail User Agent,郵件用戶代理,幫助用戶發送電子郵件到服務器或者幫助用戶從服務器接收電子郵件的應用程序;
MTA,MDA,MRA
常用的MUA:
瀏覽器,Outlook,Foxmail,mail|mailx
mail [-s SUBJECT] USERNAME[@HOSTNAME]
/var/spool/mail/USERNAME就是每個用戶的郵箱;
爲了能夠非交互式的發送郵件,可以使用輸入重定向或管道;
atd守護進程能夠識別和完成由at命令、batch命令製作的任務計劃;
at命令:
at, batch, atq, atrm - queue, examine or delete jobs for later execution
at [option] TIME
TIME:
1.HH:MM [YYYY-mm-dd]
2.noon, midnight, teatime
3.tomorrow
4.now+#UNIT UNIT:min, hours, days, weeks, months, years...
at定義的作業有隊列的概念,通常隊列使用單個字母來表示,默認是a;
at -q QUEUE_NAME TIME
選項:
-q QUEUE
-f FILE
-l:查看隊列,相當於atq
-d JOB_ID:清除指定的計劃作業,相當於atrm
-c:查看指定的作業的內容
batch命令:
batch命令在定義任務的時候,無需指定時間,是由系統自行選擇在系統比較空閒的時候,完成此計劃任務;其他的配置與at完全相同;
週期性執行任務計劃:cron
cronie軟件包,提供crond守護進程以及cron的其他管理工具;
cron任務通常分爲兩類:
系統cron任務:/etc/crontab
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
# | | | | |
# * * * * * user-name command to be executed
注意:
1.
* * * * *:定義週期執行任務的時間
user-name:運行此任務的用戶賬戶身份;
command to be executed:應該執行的任務命令及命令行參數;
注意:爲了保證任務能夠準確執行,命令通常是用絕對路徑填寫;
2.各個字段之間使用一個或多個空白字符進行分隔;
3.任務運行的結果以郵件的方式直接發送給root用戶;
用戶cron任務:/var/spool/cron/USERNAME
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 * * * *
*/7 * * * * 此種方式無法實現每7分鐘爲間隔執行計劃任務;
注意:
1.指定的步長必須能被時間點的數值整除,否則,無意義;
2.最小的時間單位是分鐘,如果計劃以秒爲執行計劃任務的時間單位,必須藉助於其他機制;
crontab命令:
crontab - maintain crontab files for individual users
crontab [-u user] [-l | -r | -e] [-i]
-u USERNAME:超級用戶爲其他用戶設置或編輯用戶cron任務時使用;
-l:查看所有的已經被定義的計劃任務
-e:使用vi編輯器編輯crontab文件;
-r:移除所有的計劃任務;不推薦使用;
-i:在使用-r選項時,進行交互;