Linux基礎五(系統管理)

Linux 系統管理

1. 進程管理

1.1 進程管理簡介

進程的簡介:linux

  1. 一個程序在運行的時候會佔用系統的資源,即系統分配資源給某個程序使用,進程就是正在運行中的某個程序或者命令。進程又能夠細分爲線程,即一個進程能夠調用系統資源去進行多個任務併發執行。
  2. 對於使用源碼包進行安裝的 Apache,開啓 Apache 服務時其通常會產生 6 個進程,而且每有一個客戶端訪問就會添加一個進程,通常 Apache 的默認併發鏈接數量是 400,能夠手動改爲 2048,即最多能夠同時產生 2048 個進程。

進程管理的做用:shell

  1. 判斷服務器的健康狀態(最主要)緩存

    1. CUP 的使用率
    2. 物理內存的佔用
    3. 空閒內存的查看
  2. 查看系統中的全部進程bash

    1. 看看系統中運行了哪些程序
    2. 這些程序都佔用了什麼資源
    3. 進程樹
  3. 殺死進程服務器

    1. 殺死進程不是關閉程序的正確方式
    2. 只有程序不能正常關閉或者沒有正確關閉方式的狀況下再判斷該進程是不是系統中的合理進程?如果非法進程,則找到文件位置並清理掉後殺死進程;如果合理進程,則考慮是不是服務器性能不足,想辦法提高性能

優先級 1. > 2. > 3.併發

1.2 進程的查看(ps and pstree)

1.2.1 ps

ps 命令不在與怎麼用,看得懂纔是最重要的ssh

ps aux  查看系統中的全部進程,使用 BSD 操做系統格式
ps -le  查看系統中的全部進程,使用 Linux 標準命令格式

選項:
    -a:顯示一個終端的全部進程,除了會話引線
    -u:顯示內存的歸屬用戶及內存的使用情況
    -x:顯示沒有控制終端的進程
    -l:長格式顯示(顯示更加詳細的信息)
    -e:顯示全部進程,和 -a 做用同樣

以 pa aux 爲例,主要看系統當前運行了哪些程序:工具

ps aux 命令顯示內容

USER:絕大部分進程都是 root 產生的,產生 Apache 的用戶是 daemon 
PID:是進程的 ID 號,其中 /sbin/init 進程的 PID 號永遠是 1,由於它是系統啓動時的第一個進程,也是全部進程的父進程。PID 爲 1000 之內的進程通常都是系統的默認進程
%CUP 和 %MEM 分別是進程佔用的 CPU 和內存的百分比,比例越高說明佔用的資源越多
VSZ:表示該進程佔用的虛擬內存的大小(KB)
RSS:表示該進程佔用的實際內存的大小(KB)
TTY:表示該進程是在哪一個終端下運行的。其中,TTY1-TTY7 表明本地控制檯終端,TTY1-TTY6 是字符界面終端,TTY7 是圖形界面終端;
pts/0-255 表明虛擬終端;?表明不是從終端啓動的進程,通常是內核啓動的
STAT:進程狀態。常見的有 睡眠(S) 運行(R) 中止(T) 包含子進程(s) 位於後臺(+)
START:當前進程啓動的時間
TIME:當前進程耗費 CPU 的時間,越大說明越耗費 CPU 資源
COMMAND:進程的名稱(主要看這個),若是想看某個進程究竟是什麼,能夠自行百度
1.2.2 patree

顯示進程樹,能夠看到以下:性能

pstree 顯示進程樹

選項:
    -p 顯示當前全部進程,(重疊進程展開)
    -u 顯示進程所屬用戶

[root@localhost ~]# pstree
init─┬─abrtd
 ├─acpid
 ├─atd
 ├─auditd───{auditd}
 ├─automount───4*[{automount}]      // 多個同樣的進程會放在一塊兒顯示,能夠用 -p 參數顯示所有進程
 ├─certmonger
 ├─console-kit-dae───63*[{console-kit-da}]
 ├─crond
 ├─cupsd
 ├─dbus-daemon───{dbus-daemon}
 ├─dhclient
 ├─hald─┬─hald-runner─┬─hald-addon-acpi
 │      │             ├─hald-addon-inpu
 │      │             └─hald-addon-rfki
 │      └─{hald}
 ├─login───bash
 ├─master─┬─pickup
 │        └─qmgr
 ├─mcelog
 ├─5*[mingetty]
 ├─rpc.statd
 ├─rpcbind
 ├─rsyslogd───3*[{rsyslogd}]
 ├─sshd───sshd───bash───pstree      // 其中,咱們敲的這條 pstree 命令是經過 Linux Shell 的 bash 通過遠程鏈接工具調用遠程服務啓動的進程
 ├─udevd───2*[udevd]
 └─xinetd

1.3 進程的查看(top)

動態顯示系統中的進程信息(默認每隔3s刷新一次),用於查看系統健康狀態

命令:ui

top 動態顯示系統進程信息,但只能顯示一個頁面的進程而不能顯示全部進程信息

選項:
    -d 秒數:指定 top 更新的時間間隔(默認3秒)
    -b 使用批處理模式輸出,即能顯示所有進程。通常和 "-n" 同時使用
    -n 次數:指定 top 執行的次數,通常和 "-b" 同時使用
交互:
    ? 或者 h:顯示交互模式的幫助
    P:以 CPU 的使用率進行排序(默認)
    M:之內存的使用率進行排序
    N:以 PID 進行排序
    q:退出 top 進程

top 前五行顯示的信息:

top前五行信息

  1. 第一行:22:50:32 是當前系統時間;up 1:28 系統運行了1小時28分鐘;2 users 系統登陸了兩個用戶;load average:0.00,0.00,0.00 是系統在1分鐘以前,5分鐘以前,15分鐘以前的平均負載狀況,通常有CPU有幾核則不大於幾就能夠了
  2. 第二行:Tasks 是當前系統中運行的進程,其中:共有91個進程,1個正在執行,90個在睡眠,0個被中止,0個是殭屍
  3. 第三行:Cpu:CPU狀態;其中:us 是被用戶佔用CPU的百分比,sy 是被系統佔用CPU的百分比,ni 是被改過優先級的進程佔用CPU的百分比,id 是系統空閒的百分比(不能低於20%),wa 是等待輸入/輸出的進程佔用CPU的百分比,hi 和 si 是硬/軟中斷請求服務佔用CPU的百分比,st 是虛擬時間百分比
  4. 第四行:Mem:內存佔用率;總共有多少,多少被用了,還剩多少,緩衝區有多大
  5. 第五行:Swap:交換分區的佔比,總共有多少,多少被用了,還剩多少,有多少被用做緩存
緩衝(buffer):加速數據寫入硬盤,即將要寫入硬盤的數據先放到內存中,當緩衝區滿了以後再一塊兒向硬盤寫入
緩存(cache):加速數據從硬盤中讀取,即將硬盤中的熱數據預先拿到內存中來,當 CPU 要用的時候就不用再到硬盤中去取了

1.4 殺死進程

只有在程序沒法正確關閉的狀況下才考慮去殺死進程,kill 只是最後被迫的選擇。

kill 命令:殺死單一進程(後面跟進程號)
killall 命令:按照進程名殺死一類(組)進程
pkill 命令:按照進程名殺死一類(組)進程

命令格式:
kill [信號] 進程號(PID)
killall [選項][信號] 進程名
pkill [選項][信號] 進程名

進程信號(經常使用):
可用 kill -l 查看
    -1:平滑重啓進程,即不斷開已鏈接的用戶重啓進程
    -9:強制殺死進程

選項:
    -i:交互式,即執行時會詢問是否殺死該進程
    -I:忽略進程名大小寫
    -t:按照終端號剔除用戶(只有超級用戶能夠剔除其餘用戶)

命令示例:
kill -1 2535        // 平滑重啓 PID 爲 2535 的進程
kill -9 2535        // 強制殺死 PID 爲 2535 的進程
killall -9 httpd    // 殺死 Apache 進程
pkill -9 -t pts/1   // 剔除第二個遠程登陸的用戶(-9和-t不能寫反)

1.5 修改進程優先級

CPU 的每個核在同一個時鐘週期內只能運算一個指令,進程的優先級決定了每一個進程處理的前後順序。

  1. Intel(R) Core(TM) i5-5200 CPU @2.20GHz 表示該 CPU 的頻率爲 2.20GHz,表明一秒能運算(振動) 2.20G 次;若是系統是 64 位,則每次運算能運算 8 個字節,一秒就能運算 8Byte*2.20GB 的數據;若 CPU 是 4 核 8 線程,則一秒就能運算 8Byte*2.20GHz*8線程=140GB 的數據。系統中通常是有不少個進程按照優先級排序,CPU 爲每一個進程分配必定的時間,一遍又一遍地執行不一樣的進程,在宏觀上看就是不少進程並行的(即一邊聽歌一邊打遊戲)。
  2. 而內存如 DDR4 3200 則表示讀寫速度能夠達到 3200 MB/s 即 3.2 GB/s 左右
  3. 硬盤(機械)的讀寫速度看轉速,5400 轉大體在 60-90MB,7200 轉大體在 130-190MB,接口(SATA or SCSI or IDE)與讀寫速度基本上是匹配的;硬盤(SSD)的工做機制與機械硬盤不一樣,並沒有較爲準確的範圍,通常爲 200M-500M/s,目前仍不斷被刷新。
  4. 因此能夠有一個概念:CPU 130G/s >> 內存 3G/s >> 硬盤 400M/s

用 ps -le 能夠看到每一個進程的優先級:

ps -le 能夠顯示進程優先級

其中,PRI 和 NI 都是優先級,分別表明 Priority 和 Nice。對系統真正起做用的是 PRI,用戶不能修改 PRI,可是 PRI 的值受 NI 的影響,用戶能夠經過修改 NI 來影響 PRI 的值從而影響進程的優先級。NI 的取值範圍是 range(-20,20),其中只有 root 才能將 NI 的值改成負數,也就是說普通用戶改了 NI 的值也對進程起不到做用。

說白了若是不涉及內核開發,基本上不用修改進程的優先級。

nice 命令:修改進程的優先級

命令格式:
nice -n [優先級]   PID // 只能修改不存在的進程,即要先關閉進程再修改而後從新打開才生效
renice [優先級] PID    // 能夠修改正在運行中的進程

命令示例:
nice -n -5 2535     // 將 2535 進程的 NI 優先級改成 -5
renice -10 2535     // 將 2535 進程的 NI 優先級改成 -10

2. 工做管理

2.1 工做管理簡介

工做管理(任務管理或者進程管理)指的是在單個登陸終端中(也就是shell界面中)同時管理多個工做的行爲。實際上就是把任務(進程)放到後臺執行,Windows 把任務放到後臺處理就是經過最小化窗口實現的,而 Linux 要敲命令罷了,本質是同樣的。

注意事項:

  1. 當前的登陸終端,只能管理當前終端下的工做,而不能管理其餘登陸終端的工做
  2. 放入後臺執行的命令必須能持續一段時間,這樣咱們才能夠捕捉和操做這個任務
  3. 放入後臺的任務不能與前臺用戶進行交互或者與須要前臺輸入,不然該任務放入後臺只能暫停而不能執行,如 vi 命令等

操做方法:在命令後加上 "&" 符號就好了

2.2 工做管理方法

2.2.1 把進程放入後臺的方法

把進程放入後臺的方法有兩種:一種是在命令後面加"&"符號;另外一種是按組合鍵Ctrl+Z,兩者的區別是:

"&" 符號法把命令放入後臺,並在後臺執行
Ctrl+Z 法把命令放入後臺,並在後臺暫停
2.2.2 查看後臺命令

當咱們把多個進程放入到後臺執行,則可使用 jobs 命令來查看後臺的進程

jobs 命令:查看後臺的工做

命令格式:
jobs [-l]   // 其中,-l 是選項,加上 -l 會顯示工做的 PID

注意:"+" 號表明最近一個放入後臺的工做,也是工做恢復時默認恢復的工做;"-" 號表明倒數第二個放入後臺的工做
2.2.3 工做恢復
fg %工做號 // 將工做恢復到前臺運行,其中 % 用來區別進程號
bg %工做號 // 將工做恢復到後臺運行,其中 % 用來區別進程號
若是不加工做號,默認會操做帶有 "+" 號的進程

2.3 後臺命令脫離終端執行

放入後臺的進程會和將其放入後臺的終端綁定,若終端被關閉,則後臺進程也被終結。但實際上咱們把任務放到後臺進行,同時也會但願即便個人終端關閉,該任務也能繼續進行下去,最多見的就是 MySQL 服務。MySQL 服務被放入後臺後,即便終端被關閉,它也能繼續進行下去。緣由是 MySQL 服務被設置成了守護進程 deamon 。

因此若是咱們想讓一個服務放入後臺運行後,不會由於終端的退出而終止,能夠將該服務設置爲守護進程。是不能夠的!

緣由有三個:1. 會很是複雜;2. 會讓 Linux 中的守護進程變得太多而沒法管理;3. 速度也會降低

那麼使後臺命令能脫離終端執行的方法有其餘三種:

  1. (推薦)把須要後臺執行的命令加入 /etc/rc.local 文件,適合隨着系統啓動自啓的服務
  2. 使用系統的定時任務,讓系統在指定時間執行某個後臺命令(有時候不能生效)
  3. 使用 nohup 命令(標準方法,每次重啓系統要手動輸入一遍。也推薦)

    nohup 命令:
    
     命令格式:
     nohup [命令] &

3. 系統資源查看

3.1 監聽系統資源

vmstat 命令:查看 CPU | 內存 | 硬盤 | 進程 的信息彙總

命令格式:
vmstat [刷新延時 刷新次數]

命令示例:
vmstat 1 3

vmstat 1 3

顯示信息:

procs:進程信息字段
    -r:等待運行的進程數,進程數越大,系統越繁忙
    -b:不可被喚醒的進程數量,數量越大,系統越繁忙
memory:內存信息字段(KB)
    -swpd:虛擬內存的使用狀況
    -free:空閒的內存容量
    -buff:緩衝的內存容量
    -cache:緩存的內存容量
swap:交換分區的信息字段(KB)
    -si:從磁盤中交換到內存中的數據量
    -so:從內存中交換到磁盤中的數據量
    這兩個數越大,證實數據須要在磁盤和內存之間交換頻繁,系統性能越差
io:磁盤讀寫信息字段(塊)
    -bi:從塊設備讀入的數據總和
    -bo:寫入到塊設備的數據總和
    這兩個數越大,系統性能越差
system:系統信息字段
    -in:每秒鐘被終端的進程數
    -cs:每秒鐘進行事件切換的次數
    這兩個數越大,系統性能越差
CPU:CPU字段
    -us:非內核進程消耗 CPU 運算時間的百分比
    -sy:內核進程消耗 CPU 運算時間的百分比
    -id:空閒 CPU 的百分比
    -wa:等待 I/O 所消耗的 CPU 的百分比
    -st:被虛擬機所盜用的 CPU 百分比

3.2 顯示內核自檢信息

dmesg 命令:

命令示例:
dmesg | grep CPU

3.3 查看內存使用狀態

free 命令:

命令格式:
free [選項]

選項:
    -b:以 Byte 位單位顯示
    -k:以 KB 爲單位顯示(默認)
    -m:以 MB 爲單位顯示
    -g:以 GB 爲單位顯示

命令示例:
free -m

[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           980        240        740          0         50         57
-/+ buffers/cache:        133        847
Swap:         1983          0       1983

3.4 查看 CPU 信息

cat /proc/cpuinfo // 其中,/proc目錄用於保存內存相關的信息,CPU 的信息也存在這兒

3.5 uptime 命令

實際上就是 top 命令的第一行

3.6 uname 查看系統與內核相關信息

uname 命令:查看系統與內核相關信息

命令格式:
uname [選項]

選項:
    -a:查看系統全部信息
    -r:查看內核版本
    -s:查看內核名稱

4. 系統定時任務

相關文章
相關標籤/搜索