8月21日 程式管理
1、程式概念
程式編號是PID,磁碟檔案編號是inode
程式(process)和執行緒(thread):一個程式可能包含一個或多個執行緒,比如蓋一座大樓,團隊就是一個程式,一個人就是一個執行緒,執行緒佔用的記憶體空間小,省資源。
如下圖http程式有很多個子程式,子程式又分成多個執行緒
2、程式優先順序
程式優先順序:
系統優先順序:數字越小,優先順序越高,各有140個執行佇列和等待佇列
0-139(CentOS4,5)
0-98,99(CentOS6)
實時優先順序realtime:99-0:值最大優先順序最高
nice值:-20到19,對應系統優先順序100-139或99
3、程式記憶體
記憶體分頁儲存,一頁是4k。
LRU演算法:來了一個資料就放到最上面,把下面的擠下去,如果來的資料記憶體中本來就有,則把它調到最上面。
4、程式分類
守護程式: daemon,在系統引導過程中啟動的程式,和終端無關程式
前臺程式:跟終端相關,通過終端啟動的程式,是使用者登入之後啟動的程式。
5、程式狀態
執行態:running
就緒態:ready
睡眠態:sleep,睡眠態又分為可中斷和不可中斷的睡眠態
可中斷:interruptable
不可中斷:uninterruptable
停止態:stopped,暫停於記憶體,但不會被排程,除非手動啟動
僵死態:zombie,在記憶體中,不會被啟動的程式,出了問題的程式,會一直佔用記憶體。
6、PS命令
[root@centos6 html]#ps axu ---檢視所有程式,包括前臺程式和守護程式,u表示顯示程式生效的所有者
VSZ: Virtual memory SiZe,虛擬記憶體集,線性記憶體,也就是系統承諾給的記憶體
RSS: ReSidentSize, 常駐記憶體集,實際用的記憶體
一般情況下系統承諾給的記憶體很多,但實際用的很少。
[root@centos6 ~]#ps auxf -- f表示顯示程式的父程式
[root@centos6 ~]#ps axo pid,cmd,nice --指定顯示哪些特性
[root@centos6 ~]#ps -C vim f1 -C vim f2 o pid,cmd,nice --- -C選項可以顯示單獨的某一個程式,預設是全部顯示
[root@centos6 ~]#ps axu |grep 2078 --還可以過濾
root 2078 0.0 0.3 177464 3880 ? Ss 09:37 0:00 /usr/sbin/httpd
root 2485 0.0 0.0 103328 868 pts/0 R+ 10:19 0:00 grep 2078
STAT:程式狀態
R:running 執行
S: interruptablesleeping 可中斷的睡眠態
D: uninterruptable sleeping 不可中斷的睡眠態
T: stopped --停止態,手動可以被啟動
Z: zombie ---僵死態,不可被啟動
+: 前臺程式
l: 多執行緒程式
L:記憶體分頁並帶鎖
N:低優先順序程式
<: 高優先順序程式
s: session leader,會話(子程式)發起者
7、程式優先順序的調整
[root@centos6 ~]#renice -n -10 2410 ---調整nice優先順序為-10,2410是程式編號
root@centos6 app]#nice -n -10 vim f1 ---指定優先順序開啟某個程式
8、搜尋程式pgrep
[root@centos6 ~]#pgrep -lu dufu ---顯示生效者
2493 bash
[root@centos6 ~]#pgrep -lU dufu ---顯示正真發起執行命令者
2493 bash
2571 passwd
[root@centos6 ~]#pgrep -lt pts/1 ---指定終端的程式
2307 bash
2492 su
2493 bash
2571 passwd
-l 顯示程式名
[root@centos6 ~]#pidof vim
[root@centos6 ~]#echo $?
1
[root@centos6 ~]#pidof httpd
2088 2087 2086 2085 2084 2083 2082 2081 2078
[root@centos6 ~]#echo $?
0
總結:檢視某個程式的編號,此方法可以寫到指令碼里,用來判斷電腦上是否跑了某個程式,如果跑了這個程式
9、uptime
顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1、5、10分鐘的平均負載,一般不會超過1)
系統平均負載:
指在特定時間間隔內執行佇列中的平均程式數
通常每個CPU核心的當前活動程式數不大於3,那麼系統的效能良好。如果每個CPU核心的任務數大於5,那麼此主機的效能有嚴重問題
如果linux主機是1個雙核CPU,當Load Average 為6的時候說明機器已經被充分使用
[root@centos6 ~]#uptime
10:41:06 up 2:28, 4 users, load average: 0.00, 0.00, 0.00
10、top命令
可以動態的顯示程式的資訊
選項:
-d #: 指定重新整理時間間隔,預設為3秒
-b: 全部顯示所有程式
-n #: 重新整理多少次後退出
[root@centos6 ~]#top
top - 11:02:49 up 2:50, 4 users, load average: 0.00, 0.00, 0.00
Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1004112k total, 210440k used, 793672k free, 9580k buffers
Swap: 4194300k total, 0k used, 4194300k free, 55164k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19236 1496 1228 S 0.0 0.1 0:01.43 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.01 migration/1
8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
10 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/1
11 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/2
欄位資訊簡介
us:使用者空間;sy:核心空間;ni:調整nice時間;id:空閒;wa:等待IO時間;hi:硬中斷;si:軟中斷(模式切換);st:虛擬機器偷走的時間
內建命令
排序:
P:以佔據的CPU百分比,%CPU
M:佔據記憶體百分比,%MEM
T:累積佔據CPU時長,TIME+
首部資訊顯示:
uptime資訊:l命令
tasks及cpu資訊:t命令
cpu分別顯示:1 (數字)
memory資訊:m命令
退出命令:q
修改重新整理時間間隔:s
終止指定程式:k
儲存檔案:W
查詢幫助資訊:h
11、vmstat命令
[root@centos6 yum.repos.d]#vmstat ---顯示虛擬記憶體資訊
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 710432 12100 135420 0 0 3 1 9 5 0 0 100 0 0
[root@centos6 yum.repos.d]#vmstat 5 10 ---表示5秒顯示一次,顯示10次
swap:
si:從磁碟交換進記憶體的資料速率(kb/s),從交換分割槽到進記憶體,
so:從記憶體交換至磁碟的資料速率(kb/s),從記憶體出到swap分割槽,因swap在磁碟上,所以是從記憶體到磁碟
io:
bi:從塊裝置讀入資料到系統的速率(kb/s),從塊裝置讀入資料寫到記憶體
bo: 儲存資料至塊裝置的速率,從記憶體讀資料寫到塊裝置
12、iostat命令
統計CPU和裝置IO資訊
[root@centos6 yum.repos.d]#iostat
Linux 2.6.32-696.el6.x86_64 (centos6.9.magedu.com) 08/22/2017 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.00 0.28 0.03 0.00 99.63
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.03 0.17 0.00 3628 0
sda 10.08 1768.54 319.54 37974826 6861312
[root@centos6 yum.repos.d]#iostat sda
只統計某個磁碟[root@centos6 yum.repos.d]#iostat 1 10
表示1秒顯示一次,顯示10次
13、用glances命令監控遠端主機
伺服器模式:
glances -s -B IPADDR
IPADDR: 指明監聽的本機哪個地址,也可以不用-B指監聽本地的所有IP地址。
客戶端模式:
glances -c IPADDR
IPADDR:要連入的伺服器端地址
例項
centos7做為伺服器,centos6做為客戶端,並且兩臺機器都安裝了glances
[root@redhat7 yum.repos.d]#glances -s ---指明glances服務已經開啟,埠是61209,可以監聽本地的所有ip地址
Glances server is running on 0.0.0.0:61209
[root@redhat7 yum.repos.d]#glances -s -B 172.18.21.7
-B指明監控本地的172.18.21.7的ip地址
Glances server is running on 172.18.21.7:61209
[root@centos6 yum.repos.d]#glances -c 172.18.21.7 ---在客戶端指明要監控遠端主機的哪個ip地址,就可以遠端監控別的主機了
14、dstat命令
系統資源統計,代替vmstat,iostat
-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: 顯示延遲最大的程式
15、kill命令
向程式傳送控制訊號,以實現對程式管理,每個訊號對應一個數字,訊號名稱以SIG開頭(可省略),不區分大小寫
顯示當前系統可用訊號:kill –l,trap-l
常用訊號:man 7 signal
- SIGHUP: 無須關閉程式而讓其重讀配置檔案
- SIGINT: 中止正在執行的程式;相當於Ctrl+c
- SIGQUIT:相當於ctrl+=quit
- SIGKILL: 強制殺死正在執行的程式
- SIGTERM:終止正在執行的程式
- SIGCONT:繼續執行
- SIGSTOP:後臺休眠
指定訊號的方法:
(1) 訊號的數字標識:1, 2, 9
(2) 訊號完整名稱:SIGHUP(3) 訊號的簡寫名稱:HUP
以下三種形式都可以
[root@centos6 app]#kill -1 4691
[root@centos6 app]#kill -HUP 3915
[root@centos6 app]#kill -SIGHUP 3915
[root@centos6 app]#kill -0 4691 &>/dev/null ||service httpd restart
發零訊號可以監控某個程式是否正常執行,但這種方法要知道程式編號,如果程式退出程式編號可能發生改變
[root@centos6 app]#killall -0 httpd &>/dev/null ||service httpd restart
killall 後面可以給跟名稱
按模式:pkill[options] pattern
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正發起執行命令者
-t terminal: 與指定終端相關的程式
-l: 顯示程式名(pgrep可用)
-a: 顯示完整格式的程式名(pgrep可用)
-P pid: 顯示指定程式的子程式
[root@centos6 app]#pkill -9 -u dufu ---強制殺死dufu這個使用者的所有程式
16、作業管理
[root@centos6 ~]#ping 172.8.0.1 & ---表示直接後臺執行
[root@centos6 ~]#ping 172.18.0.1 ---按ctrl+z ping程式進入後臺休眠
PING 172.18.0.1 (172.18.0.1) 56(84) bytes of data.
64 bytes from 172.18.0.1: icmp_seq=1 ttl=64 time=0.535 ms
64 bytes from 172.18.0.1: icmp_seq=2 ttl=64 time=0.453 ms
64 bytes from 172.18.0.1: icmp_seq=3 ttl=64 time=0.407 ms
^Z
[1]+ Stopped ping 172.18.0.1
[root@centos6 ~]#sleep 100 ---按ctrl+z sleep程式進入後臺休眠
^Z
[2]+ Stopped sleep 100
[root@centos6 ~]#jobs ---檢視當前終端所有作業,注意每個程式的前面的號碼,用於轉入後臺執行和後臺休眠時用
[1]- Stopped ping 172.18.0.1
[2]+ Stopped sleep 100
[root@centos6 ~]#bg 2 ---將sleep程式轉入後臺執行,因sleep的jobs號碼是2,所以bg 後面加2,bg為background後臺的簡寫
[2]+ sleep 100 &
[root@centos6 ~]#jobs ---只能看當前這個終端,不能在其他終端裡看
[1]+ Stopped ping 172.18.0.1
[2]- Running sleep 100 &
其中用killall 或者kill命令發訊號時,可以在其他終端進行,發19訊號是由後臺執行轉為後臺休眠,發18訊號是由後臺休眠轉為後臺執行
17 斷網恢復後仍可以在後臺執行
之前學過的方法是用screen可以將斷網後的程式恢復,先輸入screen,然後執行程式,斷網後,輸入screen -ls檢視一下,再輸入screen -r 就可以恢復,下面是一種新的方法。
[root@centos6 ~]#nohup ping 172.18.0.1&>/dev/null & ---使用nohup並且後臺執行
[1] 4737
[root@centos6 ~]#jobs
[1]+ Running nohup ping 172.18.0.1 &>/dev/null &
斷網後恢復
[root@centos6 ~]#pstree -p ---檢視程式樹,發現仍然在執行
init(1)─┬─atd(1681)
├─auditd(1424)───{auditd}(1425)
├─automount(1505)─┬─{automount}(1506)
│ ├─{automount}(1507)
│ ├─{automount}(1522)
│ └─{automount}(1525)
├─crond(1666)
├─dhclient(1367)
├─master(1652)───qmgr(1659)
├─mingetty(1694)
├─mingetty(1696)
├─mingetty(1698)
├─mingetty(1700)
├─mingetty(1702)
├─mingetty(1704)
├─ping(4737) ---仍然在執行
├─rsyslogd(1446)─┬─{rsyslogd}(1447)
│ ├─{rsyslogd}(1448)
│ └─{rsyslogd}(1449)
├─sshd(1573)─┬─sshd(4691)───bash(4696)
│ └─sshd(4742)───bash(4747)───pstree(4766)
└─udevd(576)─┬─udevd(1711)
└─udevd(1712)
[root@centos6 ~]#ps aux|grep ping ---搜尋也可以搜到
root 4737 0.0 0.0 103268 740 ? S 19:53 0:00 ping 172.18.0.1
root 4769 0.0 0.0 103328 880 pts/0 S+ 19:55 0:00 grep ping
[root@centos6 ~]#killall ping ---殺死程式
[root@centos6 ~]#ps aux|grep ping
root 4815 0.0 0.0 103328 880 pts/0 S+ 20:00 0:00 grep ping
[root@centos6 ~]#nohup ping 172.18.0.1 ---使用nohup並且前臺執行
斷網後恢復
[root@centos6 ~]#ps aux |grep ping ---發現仍然在執行
root 4872 0.0 0.0 103268 740 ? S 20:07 0:00 ping 172.18.0.1
root 4897 0.0 0.0 103328 880 pts/0 S+ 20:08 0:00 grep ping
[root@centos6 ~]#pstree -p
init(1)─┬─atd(1681)
├─auditd(1424)───{auditd}(1425)
├─automount(1505)─┬─{automount}(1506)
│ ├─{automount}(1507)
│ ├─{automount}(1522)
│ └─{automount}(1525)
├─crond(1666)
├─dhclient(1367)
├─master(1652)─┬─pickup(4767)
│ └─qmgr(1659)
├─mingetty(1694)
├─mingetty(1696)
├─mingetty(1698)
├─mingetty(1700)
├─mingetty(1702)
├─mingetty(1704)
├─ping(4872) ---程式樹發現也在執行
├─rsyslogd(1446)─┬─{rsyslogd}(1447)
│ ├─{rsyslogd}(1448)
│ └─{rsyslogd}(1449)
├─sshd(1573)─┬─sshd(4691)───bash(4696)
│ └─sshd(4873)───bash(4877)───pstree(4898)
└─udevd(576)─┬─udevd(1711)
└─udevd(1712)
採用此種方法,將正在前臺執行的程式或者正在後臺執行的程式,斷網後,恢復網路程式仍然在後臺正在進行,直到執行結束程式才會終止。
18、kill命令終止後臺正在執行的程式和後臺休眠的程式
[root@centos6 ~]#ping 172.18.0.1
PING 172.18.0.1 (172.18.0.1) 56(84) bytes of data.
64 bytes from 172.18.0.1: icmp_seq=1 ttl=64 time=0.494 ms
64 bytes from 172.18.0.1: icmp_seq=2 ttl=64 time=0.486 ms
64 bytes from 172.18.0.1: icmp_seq=3 ttl=64 time=0.481 ms
^Z[1] Terminated ping 172.18.0.1 ---ctrl +z 轉為後臺休眠
[2]+ Stopped ping 172.18.0.1
[root@centos6 ~]#jobs
[2]+ Stopped ping 172.18.0.1
[root@centos6 ~]#kill %2 ---2是jobs的編號
[2]+ Stopped ping 172.18.0.1
[root@centos6 ~]#jobs ---顯示已經終止
[2]+ Terminated ping 172.18.0.1
[root@centos6 ~]#ps aux |grep ping ---檢視程式已經查不到了
root 4867 0.0 0.0 103328 884 pts/0 S+ 20:05 0:00 grep ping
對於後臺正在執行的程式,此種方法也可以使用,先用jobs查一下編號,然後用kill %jobnum 就可以終止在後臺執行的程式,此種方法必須在同一個終端,因為jobs只能顯示在本終端的作業。
19 centos6和centos7斷網後的區別
[root@centos6 ~]#ping 172.18.0.1&
斷網後恢復
[root@centos6 ~]#ps aux|grep ping ---發現仍然在後臺執行
root 4958 0.0 0.0 103268 744 ? S 20:20 0:00 ping 172.18.0.1
root 4985 0.0 0.0 103328 884 pts/2 S+ 20:21 0:00 grep ping
[root@centos6 ~]#pstree -p
init(1)─┬─atd(1681)
├─auditd(1424)───{auditd}(1425)
├─automount(1505)─┬─{automount}(1506)
│ ├─{automount}(1507)
│ ├─{automount}(1522)
│ └─{automount}(1525)
├─crond(1666)
├─dhclient(1367)
├─master(1652)─┬─pickup(4767)
│ └─qmgr(1659)
├─mingetty(1694)
├─mingetty(1696)
├─mingetty(1698)
├─mingetty(1700)
├─mingetty(1702)
├─mingetty(1704)
├─ping(4958) ---發現程式仍然在進行
├─rsyslogd(1446)─┬─{rsyslogd}(1447)
│ ├─{rsyslogd}(1448)
│ └─{rsyslogd}(1449)
├─sshd(1573)─┬─sshd(4691)───bash(4696)
│ └─sshd(4960)───bash(4964)───pstree(4988)
└─udevd(576)─┬─udevd(1711)
└─udevd(1712)
[root@redhat7 app]#ping 172.18.0.1&
斷網後恢復
[root@redhat7 ~]#ps aux |grep ping --發現已經查不到了
root 5684 0.0 0.0 112660 972 pts/0 S+ 20:21 0:00 grep --color=auto ping
總結:centos6中後臺執行的程式即使斷網了恢復後仍然在後臺執行,但centos7卻不可以。
相關文章
- Supervisor管理Laravels,Laravels程式管理Laravel
- Linux程式管理Linux
- Linux 程式管理Linux
- Linux:程式模型和程式管理Linux模型
- Linux系統管理之程式管理Linux
- vps管理系統 批次管理程式
- golang程式版本管理Golang
- Linux-程式管理Linux
- hhdesk程式組管理
- 程式管理程式supervisor安裝和使用
- Git命令程式碼管理Git
- 安裝及管理程式
- supervisor 程式管理入門
- Linux詳解 --- 程式管理Linux
- Python程式管理神器——SupervisorPython
- Linux:使用systemd管理程式Linux
- Node.js的程式管理Node.js
- 第二章 程式管理
- Sonar程式碼質量管理
- 檔案管理程式:ForkLift for MacMac
- 計算機原理:程式管理計算機
- Git操作和程式碼管理Git
- Linux程式管理工具Linux
- Linux運維之程式管理①Linux運維
- Linux安裝及管理程式Linux
- Linux程式及作業管理Linux
- LINUX程式如何管理控制(二)Linux
- php多程式管理器PHP
- linux 基礎(10)程式管理Linux
- systemd程式管理工具
- 模擬supervisor的程式管理
- 作業系統-程式管理作業系統
- 程式碼管理 | 建立並管理自己的公有Cocopods庫
- 初識程式(一)——作業系統,程式管理,程式狀態作業系統
- 前端程式碼質量管理(一)前端
- 小程式全域性狀態管理
- 圖書管理系統(小程式)
- AllClips for mac(剪貼簿管理程式)Mac
- 程式碼管理工具——GitHubGithub