回顧:
CentOS6的啓動過程
開機自檢->找硬盤->操做系統->內核->進程->登陸html
Systemd借鑑了不少launchd的思想,他的重要特性以下:
1.同SysVinit和系統初始化腳本兼容。
CentOS5 init
CentOS6 upstart
CentOS7 systemd
2.更快的啓動速度
3.經過按需啓動能力
4.更優的進程跟蹤特性和管理進程的生命週期
5.內建自動掛載服務
6.實現事務性依賴關係管理
7.可以對系統進行快照和恢復
8.自帶journeald日誌服務
centos5/6 sysloglinux
什麼是進程web
進程是已啓動的可執行程序的運行實例,進程有如下部分組成
分配內存,已分配內存的地址空間
安全屬性,進程的運行身份和權限
進程代碼,運行一個或多個線程
進程狀態,進程運行後的多種狀態apache
靜態程序,二進制文件,靜態/usr/bin/ls,/usr/bin/sshd
動態進程,程序運行的過程,有生命週期及運行狀態centos
進程的運行狀態,包括如下部分
局部和全局變量
當前的調度上下文
分配給進程使用的系統資源,例如文件描述符、網絡端口等
給進程分配對應的PID,PPID安全
進程生命週期bash
程序運行時進程的狀態關係
父進程複製本身的地址空間建立新的子進程,子進程能夠繼承父進程(PPID)的環境變量。
每一個進程都有本身的惟一ID(PID)
進程是由systemd這個父進程派生出來的子進程
子進程在運行本身的程序代碼的時候,父進程每每會進入到睡眠狀態
子進程完成程序代碼發出退出信號請求
子進程已經關閉或丟棄其資源環境,剩餘的部分稱之爲僵停(殭屍Zombie)
父進程在子進程退出時收到信號會被喚醒,清理剩餘的結構,而後繼續執行其本身的程序代碼網絡
監控和管理進程併發
在多任務處理操做系統中,每一個CPU(或核心)在一個時間點上只能處理一個進程
在進程運行時,它對CPU時間和資源分配的要求會不斷變化,從而爲進程分配一個狀態,它隨着環境要求而改變。less
靜態監控進程
靜態查看進程退出使用ps命令
瞭解進程以下選項:
PID,PPID
當前的進程狀態
內存的分配狀況
CPU和已花費的時間
用戶UID決定進程的特權
[root@localhost ~]# ps aux|less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 125336 3800 ? Ss 10:39 0:01 /usr/lib/systemd/systemd --switched-root --system
USER: //運行進程的用戶
PID: //進程ID
%CPU: //CPU 佔用率
%MEM: //內存佔用率
VSZ: //佔用虛擬內存
RSS: //佔用實際內存 駐留內存
TTY: //進程運行的終端
STAT: //進程狀態 man ps (/STATE)
R //進程運行
S //可中斷睡眠
D //不可中斷睡眠
Z //殭屍進程
X //進程已經退出
T //進程被暫停
Ss s //進程的領導者,父進程
S< < //優先級較高的進程
SN N //優先級較低的進程
R+ + //表示是前臺的進程組
Sl //以線程的方式運行
START: //進程的啓動時間
TIME: //進程佔用CPU的總時間
COMMAND: //進程文件,文件名
ps -ef
//對進程的cpu進行排序展現
[root@localhost ~]# ps aux --sort %cpu | less
[root@localhost ~]# ps aux --sort -%cpu | less
//顯示進程的子進程
[root@localhost ~]# yum install -y httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# ps auxf | grep httpd
root 1990 0.0 0.0 112728 972 pts/0 S+ 20:02 0:00 \_ grep --color=auto httpd
root 1963 0.0 0.1 224064 5004 ? Ss 19:50 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1964 0.0 0.0 224064 2940 ? S 19:50 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 1965 0.0 0.0 224064 2940 ? S 19:50 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 1966 0.0 0.0 224064 2940 ? S 19:50 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 1967 0.0 0.0 224064 2940 ? S 19:50 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 1968 0.0 0.0 224064 2940 ? S 19:50 0:00 \_ /usr/sbin/httpd -DFOREGROUND
//自定義顯示字段
[root@localhost ~]# ps axo user,pid,ppid,%mem,command | grep httpd
root 1963 1 0.1 /usr/sbin/httpd -DFOREGROUND
apache 1964 1963 0.0 /usr/sbin/httpd -DFOREGROUND
apache 1965 1963 0.0 /usr/sbin/httpd -DFOREGROUND
apache 1966 1963 0.0 /usr/sbin/httpd -DFOREGROUND
apache 1967 1963 0.0 /usr/sbin/httpd -DFOREGROUND
apache 1968 1963 0.0 /usr/sbin/httpd -DFOREGROUND
root 1992 1884 0.0 grep --color=auto httpd
//查看指定進程PID
[root@localhost ~]# ps aux | grep sshd
root 1123 0.0 0.1 112920 4360 ? Ss 10:40 0:00 /usr/sbin/sshd -D
root 1882 0.0 0.1 161528 6084 ? Ss 19:34 0:00 sshd: root@pts/0
root 1997 0.0 0.0 112728 968 pts/0 R+ 20:18 0:00 grep --color=auto sshd
[root@localhost ~]# cat /run/sshd.pid
1123
[root@localhost ~]# ps aux |grep ssh|awk 'NR==1{print $2}'
1123
//pgrep經常使用參數,-l,-a
[root@localhost ~]# pgrep sshd
1123
1882
[root@localhost ~]# pidof sshd
1882 1123
//查看進程樹
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─httpd───5*[httpd]
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
動態監控進程
[root@localhost ~]# top
[root@localhost ~]# top -d 1
[root@localhost ~]# top -d 1 -p 31 查看指定進程的動態信息
[root@localhost ~]# top -d 1 -p 1372,1
[root@localhost ~]# top -d 1 -u apache
[root@localhost ~]# top -d 1 -b -n 2 > top.txt
top常見指令
h 查看幫助
z 以彩色信息展現
l 顯示全部cpu的負載
s 設置刷新時間
b 高亮顯示處於R狀態的進程
M 按內存使用百分比排序輸出
P 按cpu使用百分比排序輸出
R 對排序進行反轉
f 自定義顯示字段
k kill掉指定PID進程
w 保存top環境設置 ~/.toprc
q 退出
案例:web壓力測試
ab -c 10 -n 1000 https://www.baidu.com/index.html
-c 10表示併發用戶數爲10
-n 1000表示請求總數爲1000
https://www.baidu.com/index.html 表示請求的目標url
請求10次,1000個併發
linux有兩個特殊的設備文件
/dev/zero 無窮大的文件
/dev/null 黑洞文件
系統負載的計算和意義
進程以及子進程和線程產生的計算指令都會讓cpu執行,產生請求的這些進程組成「運行隊列」,等待cpu執行,這個隊列就是系統負載,系統負載是全部cpu
的運行隊列的總和
[root@localhost ~]# w
13:16:13 up 21 min, 2 users, load average: 0.00, 0.01, 0.05
//假設當前計算機有4個核心的cpu,當前的負載是2.94
cpu1 cpu2 cpu3 cpu4
2.94/4(個cpu核心)=73%的cpu資源被使用,剩下的27%的cpu計算資源是空閒的
//假設當前計算機有2個核心的cpu,當前的負載是2.92
2.92/2=146% 已經驗證超過了cpu的處理能力
top的進程優先級
nice
priority
值越小,越優先
0 FIFO 先進先出 first input first output
-20 RR LL 低延遲隊列
20
作優先級爲了區分服務
企業流量優先級
音頻
視頻
總結:
進程查看命令:
靜態:
ps pstree pgrep pidof
動態:
top
zabbix