CentOS中的網絡管理+進程管理
nmcli命令:
command - line tool for controlling NetworkManager
格式:nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS: = {
-t [erse]
-p [retty]
-m [mode] tabular | multiline
-f [ields] <field1, field2, ...> | all | common
-e [scape] yes | no
-v [ersion]
-h [elp]
}
OBJECT: connection | device
device - show and manage network interfaces
COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }
status: 狀態顯示
connection - start, stop, and manage network connections
start: 啟動
stop: 停止
manage: 管理
COMMAD := { show | up | down | add | edit | modify | delete | reload | load }
示例: nmcli general status 狀態顯示
modify: 改文件
reload: 重新加載
load: 加載
show: 顯示所有網絡連接的屬性信息
up|down: 啟動或禁用指定的網絡連接
add: 添加新的網絡連接
autoconnect yes|no: 是否自動啟動此連接, 在配置文件中添加ONBOOT=yes|no;
ifname IF_NAME: 指定要創建連接的目標網絡接口設備名稱;
con-name CON_NAME: 為指定的網絡接口設備創建一個連接名稱;
type TYPE: 指定網絡設備的接口類型;
示例:
# nmcli connection add sutoconnect yes ifname eno67109432 con-name eno666 type ethernet
delete: 刪除指定的網絡連接
#nmcli connection delete CON_NAME
示例:
#nmcli connection delete eno666
reload: 不重啟網絡接口, 但重新加載其配置文件中的配置信息;
modify:
modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>
<setting>:
802-3-ethernet.mtu
connection.autoconnect
ipv4.addresses
ipv4.dns
ipv4.gateway
ipv4.method
示例:
# nmcli connection modify "系統\ eno50332208" ipv4.addresses 1.2.3.4/8 ipv4.dns 202.202.222.222 ipv4.gateway 1.1.1.1
nmtui:
nmtui - Text User Interface for controlling NetworkManager
CentOS6:
system-config-network[-tui]
setup --> 網絡配置
註意: 上述命令雖然可以使用簡單的圖形界面, 但都是修改了配置文件, 所以需要重啟網絡接口才能使配置生效;
網絡組(Network Teaming)
網絡組: 是將多個網絡接口設備聚合在一起的方法, 其目的是實現冗余容錯以及提高可用性和吞吐量;
網絡組與以往的Bonding技術相比, 具有更好的性能以及更好的擴展性;
在CentOS7中, 網絡組是由內核中的一個內核驅動和一個名為teamd的守護進程來實現的;
網絡組可以實現多個工作模式, 被稱為"運行器(runner)";
broadcast
roundrobin
activebackup
loadbalance
lacp(IEEE 802.3ad, Link Aggregation Control Protocol, 鏈路聚合控制協議)
網絡組連接的特點:
1.啟動網絡組接口並不會自動啟動網絡組中的其他port接口;
2.啟動網絡組終端port接口, 也不會自動啟動網路組接口;
3.禁用網絡組接口, 則會立即禁用網絡組中的port接口;
4.對於沒有port接口的網絡接口而言, 只能配置靜態IP地址, 不能設置從DHCP獲取; 如果設置了, 網絡組接口就會一直等待port接口的加入;
創建網絡組接口的方法:
nmcli connection add type team con-name TEAM_COM_NAME ifname IF_NAME config JSON
JSON是用來指定runner的方式, 其格式:
‘{"runner": {"name": "METHOD"}}‘
示例:
# nmcli connectin add type team con-name class17 ifname class17config ‘{"runner": {"name": "loadbalance"}}‘
# nmcli connection modify class17 ipv4.addresses 172.16.203.205/16
# nmcli connection modify class17 ipv4.method manual
創建port接口
nmcli connection add type team-slave [con-name CON_NAME] ifname IF_NAME master TEAM_NAME
註意: 如果不指定con-name, 則默認的con-name為team-slave-IF_NAME
示例:
# nmcli connectin add type team-slave con-name eno67109432 ifname eno67109432 master class17
# nmcli connectin up class17
# nmcli connectin up eno67109432
# nmcli device disconnect eno67109432
創建網絡組也可以直接改對應的連接的配置文件:
網絡組接口:
DEVICE=class17
TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}}"
DEVICETYPE=Team
BOOTPRORO=noe
NAME=class17
ONBOOT=yes
IPADDR=172.16.203.205
PREFIX=16
port接口:
NAME=team-slave-eno33554984
DEVICE=eno33554984
ONBOOT=yes
TEAM_MASTER=class17
DEVICETYPE=TeamPort
進程管理
在進程管理中, 經常會需要進行保存現場和恢復現場
保存現場: 將數據和狀態保存
恢復現場: 將數據和狀態恢復
在linux中進程和線程基本無差別
在windows中劃分明顯, 一個CPU只能執行一個進程;
寫時復制: 即在數據發生改變時, 對數據進行復制;
所謂進程: process, 一個活動的程序實體的副本;
生命周期可能包含一個或多個執行流;
創建進程:
每個進程的組織結構是一致的;
內核在正常啟動並且全面接管硬件資源之後, 會創建一個Init的進程; 而這個名叫init的進程負責用戶空間的進程管理;
CentOS5及以前: SysV Init, Classic Init
有缺陷: 在啟動系統時, Init通過寫腳本的方式來創建各個子進程; 利用shell來實現, 因此其執行速度非常慢; 導致系統的啟動速度和進程的創建速度都非常慢;
CentOS6: upstart, 由Ubuntu研發的新型的Init進程; 可以並行的啟動某些有關聯的服務進程; 在創建進程的時候, 可以多創建進程; 如果有多個CPU或這個多顆CPU核心的話, 其進程的創建速度會有比較明顯的變化; 第一個進程名稱仍然是init;
CentOS7: Systemd(系統的守護神), 參考了MAC OS的啟動邏輯開發的一款新款的init程序; 其可以自身獨立完成整個操作系統的啟動工作; 也就是說, 在開機並加載內核之後, 只需要啟動一個systemd進程就可以將其他各服務進程啟動起來, 從而引導整個系統啟動;
除了init進程之外, 其他的各個進程都是由其父進程創建的;
由fork()系統調用來實現的;
每個父進程通過fork()系統調用, 復制自身的數據給子進程使用; 這種復制方式不是立即復制, 而是寫時復制(CoW);
終止進程:
任何父進程創建的子進程都必須由父進程親自銷毀;
任何的進程的父子關系都保存在task struct中;
進程優先級:
0-139個等級;
0保留沒用
實則1-139
1-99: 實時優先級, 數字越大優先級越高; 在系統啟動時啟動的進程;
100-139: 靜態優先級, 數字越小優先級越高;
在用戶執行某些應用程序的時候啟動的進程;
nice值:
-20~19: 默認的nice值0;
只有管理員才能使用負整數的nice值, 以提升進程的優先級;
而普通用戶只能使用正整數的nice值, 以降低進程的優先級;
劃分了140個進程隊列;
Big O標準:
O(1), O(logN), O(N), O(N^2), O(2^N)
進程的類型:
按照進程的啟動方式:
守護進程:
Daemon, 通常是在系統引導的過程被啟動的, 與任何的終端無關; 也可以通過終端啟動;
用戶進程:
用戶登錄到系統之後, 通過終端啟動的進程;
按照進程的運行位置:
前臺進程:
在進程啟動之後, 進程一直占用標準輸出或者標準輸入或者同時占用標準輸出和標準輸入;
後臺進程:
在進程啟動之後, 進程不占用標準輸出和標準輸入;
按照進程對於資源消耗:
CPU-Bond: 非交互式的進程;
IO-Bond: 編輯器等各種交互式進程;
Linux系統上與進程有關的命令(查看命令和管理類命令):
pstree, ps, pidof, pgrep, pkill, top, htop, glances, dstat, pmap, vmstat, bg, fg, jobs, kill, killall, nohup, nice, renice, ......
pstree:
pstree - display a tree of processes
ps
ps - report a snapshot of the current pocesses.
ps [options]
1. UNIX options, which may be grouped and must be preceded by a dash.
2. BSD options, which may be grouped and must not be used with a dash.
3. GNU long options, which are preceded by two dashes.
常用選項:
BSD風格的選項:
a: 顯示所有與終端相關的進程;
x: 顯示所有與終端無關的進程;
u: 顯示發起進程的用戶的賬戶名稱;
常用的選項組合之一: aux
ps aux命令顯示的結果中各字段的含義:
USER: 進程的所有者
PID: 進程標識符
%CPU: 進程占用的CPU處理時間的百分比;
%MEM: 進程占用的物理內存的百分比;
VSZ: 虛擬內存集(可交換內存集)
RSS: 常駐內存集
TTY: 進程與哪個終端相關; ? 表示與終端無關
STAT
R: running, 正在運行的進程;
S: interuptible sleeping, 可中斷的睡眠狀態;
D: uninteruptible sleeping, 不可中斷的睡眠狀態; Disk Block;
T: Trace/STOPPED, 被跟蹤/已停止; (通常是子進程在等待父進程將其殺死)
Z: Zombie, 僵死態;
+: 前臺進程
l: 包含多線程的進程
<: 高優先級進程
N: 低優先級進程
s: session leader, 由子進程的父進程;
START: 進程開始執行的時候時間戳
TIME: 進程累計的CPU占用時間
COMMAND: 啟動進程的命令行參數
UNIX風格的選項:
-e: 顯示所有進程;
-f: 顯示完整格式的進程信息
-F: 顯示完整格式的進程信息, 與-f幾乎相同;
常用的選項組合之二: -ef
PPID: 父進程PID
C: 表示進程占用的CPU時間的百分比
常用的選項組合之二: -eF
SZ: 虛擬內存集
RSS: 常駐內存集
PSR: 表示此進程在哪個CPU核心上運行;
-H: 以層級結構顯示進程的父子關系;
常用的選項組合之四: -eFH
o|-o field1, field2, ...: 以自定義字段的方式顯示進程相關信息;
field: pid, ppid, ni, rtprio, psr, pcpu, stat, comm, user, tty, vsz, rss, ......
常用的選項組合之五: -eo | axo field1, field2, ...
pgrep, pkill:
pgrep, pkill - look up or signal processes based on name and other attributes
根據進程名稱或其他屬性查看進行或向進程發送信號;
pgrep [options] pattern
pkill [options] pattern
常用選項:
-u uuid: 顯示進程的有效用戶;
-U uid: 顯示進程的真實用戶;
-t TERM: 顯示指定的終端相關的進程;
-l: 顯示進程名稱;
-a: 顯示進程的完整的命令行參數;
pidof:
顯示指定進程名稱對應的進程ID;
top:
top - display Linux processes
top首部:
第一行: uptime信息:
當前系統時間
系統的運行時長
當前登錄系統的用戶總數
過去1分鐘, 5分鐘, 15分鐘的在CPU上等待運行的進程隊列的長度;
第二行:
系統中運行的進程總數;
正在運行的進程數;
處於睡眠狀態的進程數
已停止的進程數
僵死態的進程數
第三行: CPU時間占用百分比
us: user space, 用戶空間的進程占用的CPU時間的百分比
sy: system, 內核空間的內核進程占用的CPU時間的百分比
ni: nice, 使用nice值調整了進程優先級之後額外多占用的CPU時間百分比;
id: idle, CPU空閑時間的百分比
wa: waiting, 等待IO完成所消耗的CPU時間的百分比
hi: hardware interupting, 處理硬件中斷時間所消耗的CPU時間的百分比;
si: software interupting, 處理軟件中斷時間所消耗的CPU時間的百分比;
st: stolen, 被虛擬化程序等偷走的CPU時間的百分比
第四行: 以KB為單位顯示物理內存空間的使用情況;
total: 物理內存空間的總大小
free: 空閑的物理內存空間大小
userd: 已經被使用的物理內存空間大小
buffer/cache: 緩沖區和緩沖區消耗的物理內存空間大小
auail mem: 真正可用的內存空間大小;
第五行: 以KB為單位顯示swap空間的使用情況
交互式命令:
1: (數字) 顯示或隱藏CPU核心信息
P: 根據CPU占用百分比進行排序
M: 根據物理內存占用百分比進行排序
T: 根據累計CPU占用時間進行排序
l: (字母)關閉或顯示uptime信息
t: 關閉或顯示第二, 第三行信息
m: 關閉或顯示第四, 第五行信息
q: 退出top交互模式
s: 修改top的刷新時間間隔
k: 終止某個指定PID的進程的運行
常用的選項:
-d #: 指定top刷新的時間間隔, 默認是3秒;
-b: 按批次顯示進程信息
-n #: 通常與-b選項一起使用, 表示顯示多少批;
CentOS中的網絡管理+進程管理