進程管理

ps top dstat iotop bg fg nohup 并行

進程優先

   系統優先級:數字越小,優先級越高
      0-139(CentOS4,5) 
        各有140個運行隊列和過期隊列 
      0-98,99(CentOS6) 
   實時優先級:99-0 值最大優先級最高 
   nice值:-20到19,對應系統優先級100-139或99 
   Big O:時間復雜度,用時和規模的關系 O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n) 

進程相關概念 

   進程內存:
   Page Frame: 頁框,用存儲頁面數據,存儲Page 4k 
   LRU:Least Recently Used 近期最少使用算法,釋放內存 物理地址空間和線性地址空間 
   MMU:Memory Management Unit負責轉換線性和物理地址 
   TLB:Translation Lookaside Buffer 翻譯后備緩沖器,用于保存虛擬地址和物理地址 映射關系的緩存

IPC: Inter Process Communication 

   同一主機: signal:信號 
     shm: shared memory 
     semaphore:信號量,一種計數器 
   不同主機:socket: IP和端口號
     RPC: remote procedure call 
     MQ:消息隊列,Kafka,ActiveMQ

進程狀態 

 Linux內核:搶占式多任務 
   進程類型: 
     守護進程: daemon,在系統引導過程中啟動的進程,和終端無關進程 
     前臺進程:跟終端相關,通過終端啟動的進程 注意:兩者可相互轉化
   進程狀態: 
     運行態:running 
     就緒態:ready 
     睡眠態: 
       可中斷:interruptable 
       不可中斷:uninterruptable 
     停止態:stopped,暫停于內存,但不會被調度,除非手動啟動 
     僵死態:zombie,結束進程,父進程結束前,子進程不關閉 

Linux系統狀態的查看及管理工具:

    pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job
bg, fg, nohup 

pstree
  pstree -p查看進程樹
┌─[root@yyc]─[~]
└──? #pstree -p
init(1)─┬─NetworkManager(1758)
 ├─abrtd(2094)
 ├─acpid(1854)
 ├─atd(2136)
 ├─auditd(1637)───{auditd}(1638)
 ├─automount(1945)─┬─{automount}(1946)
 │ ├─{automount}(1947)
 │ ├─{automount}(1962)
 │ └─{automount}(1965)

ps
 ps [OPTION]... 
 支持三種選項: 
   UNIX選項 如-A -e 
   BSD選項 如a 
   GNU選項 如--help 
選項:默認顯示當前終端中的進程 
 a 選項包括所有終端中的進程 
 x 選項包括不鏈接終端的進程 
 u 選項顯示進程所有者的信息 
 f 選項顯示進程樹,相當于 --forest 
 k|--sort 屬性 對屬性排序,屬性前加- 表示倒序 
 o 屬性… 選項顯示定制的信息 pid、cmd、%cpu、%mem 
 L 顯示支持的屬性列表 

┌─[root@yyc]─[~]
└──? #ps axo cmd,pri,ni,psr,vsz,rss,rtprio,user
CMD           PRI  NI PSR VSZ  RSS  RTPRIO USER
/sbin/init    19   0   0 19356 1560   -    root
[kthreadd]    19   0   0  0     0     -    root
[migration/0] 139  -   0  0     0     99   root
[ksoftirqd/0] 19   0   0  0     0     -    root
[stopper/0]   139  -   0  0     0     99   root
[watchdog/0]  139  -   0  0     0     99   root
[migration/1] 139  -   1  0     0     99   root

  ps常見選項 
   -C cmdlist 指定命令,多個命令用,分隔 
   -L 顯示線程 
   -e 顯示所有進程,相當于-A 
   -f 顯示完整格式程序信息 
   -F 顯示更完整格式的進程信息
   -H 以進程層級格式顯示進程相關信息 
   -u userlist 指定有效的用戶ID或名稱 
   -U userlist 指定真正的用戶ID或名稱 
   -g gid或groupname 指定有效的gid或組名稱 
   -G gid或groupname 指定真正的gid或組名稱 
   -p pid 顯示指pid的進程 
   --ppid pid 顯示屬于pid的子進程 
   -M 顯示SELinux信息,相當于Z 
GQ(]NEO2Z%%`P[U~_K%Y
  LWP為light weight process or thread, 輕量級進程,即線程標識符
  NLWP為,number of lwps(threads) in the process, 線程的數量
  ps輸出屬性 
 
    VSZ: Virtual memory SiZe,虛擬內存集,線性內存
    RSS: ReSident Size, 常駐內存集
    STAT:進程狀態
     R:running
     S: interruptable sleeping
     D: uninterruptable sleeping 
     T: stopped 
     Z: zombie 
     +: 前臺進程 
     l: 多線程進程 
     L:內存分頁并帶鎖
     N:低優先級進程 
     <: 高優先級進程 
     s: session leader,會話(子進程)發起者 
  ps 

  ni: nice值 
  pri: priority 優先級 
  psr: processor CPU編號
  rtprio: 實時優先級 
   示例:
    ps axo pid,cmd,psr,ni,pri,rtprio 
   常用組合: 
      aux 
     -ef 
     -eFH 
     -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm 
     axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm 
 
  ps示例 
 
    查詢你擁有的所有進程:
      ps -x 
    顯示指定用戶名(RUID)或用戶ID的進程:
      ps -fU apache ,ps -fu 48 
    顯示指定用戶名(EUID)或用戶ID的進程: 
      ps -fu wang ,ps -fu 1000 
    查看以root用戶權限(實際和有效ID)運行的每個進程:
      ps -U root -u root 
    列出某個組擁有的所有進程(實際組ID:RGID或名稱): 
      ps -fG nginx 
    列出有效組名稱(或會話)所擁有的所有進程:
      ps -fg mysql ,ps -fG 27 
    通過進程ID來顯示所屬的進程: 
      ps -fp 1234 
    以父進程ID來顯示其下所有的進程,如顯示父進程為1154的所有進程:
      ps -f --ppid 1234 
    顯示指定PID的多個進程: 
      ps -fp 1204,1239,1263 
    要按tty顯示所屬進程: 
      ps -ft pst/0  
    以進程樹顯示系統中的進程如何相互鏈接: 
      ps -e --forest 
    以進程樹顯示指定的進程 
      ps -f --forest -C sshd, ps -ef --forest | grep -v grep | grep sshd 
    要顯示一個進程的所有線程,將顯示LWP(輕量級進程)以及NLWP(輕量級進 程數)列:
      ps -fL -C nginx 
    要列出所有格式說明符:
      ps L 
    查看進程的PID,PPID,用戶名和命令:
      ps -eo pid,ppid,user,cmd 
    自定義格式顯示文件系統組,ni值開始時間和進程的時間:
      ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime 
    使用其PID查找進程名稱:
      ps -p 1244 -o comm=
    要以其名稱選擇特定進程,顯示其所有子進程 
      ps -C sshd,bash 
    查找指定進程名所有的所屬PID,在編寫需要從std輸出或文件讀取PID的腳本時 這個參數很有用: 
      ps -C httpd,sshd -o pid= 
    檢查一個進程的執行時間 
      ps -eo comm,etime,user | grep nginx  
    查找占用最多內存和CPU的進程: 
      ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head ps -eo pid,ppid,cmd,%mem,%cpu 
--sort=-%cpu | head 
    顯示安全信息: 
      ps -eM ps --context 
    使用以下命令以用戶定義的格式顯示安全信息。 
      ps -eo euser,ruser,suser,fuser,f,comm,label 
    使用watch實用程序執行重復的輸出以實現對就程進行實時的監視,如下面的命 令顯示每秒鐘的監視:
      watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head' 

  按預定義的模式:pgrep

   pgrep [options] pattern
    -u uid: effective user,生效者
    -U uid: real user,真正發起運行命令者 
    -t terminal: 與指定終端相關的進程 
    -l: 顯示進程名 
    -a: 顯示完整格式的進程名 
    -P pid: 顯示指定進程的子進程 
   按確切的程序名稱:
     /sbin/pidof pidof bash 

uptime
 
  顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1、5、10分 鐘的平均負載,一般不
會超過1)
  系統平均負載: 指在特定時間間隔內運行隊列中的平均進程數 
    通常每個CPU內核的當前活動進程數不大于3,那么系統的性能良好。如果每 個CPU內核的任務數大于5,
那么此主機的性能有嚴重問題 
    如果linux主機是1個雙核CPU,當Load Average 為6的時候說明機器已經被充分使用 ?

top|htop

top:有許多內置命令: 
排序:
 P:以占據的CPU百分比,%CPU 
 M:占據內存百分比,%MEM 
 T:累積占據CPU時長,TIME+ 首部信息顯示: 
 uptime信息:l命令
 tasks及cpu信息:t命令 
 cpu分別顯示:1 (數字) 
 memory信息:m命令 
 退出命令:q
 修改刷新時間間隔:s 
 終止指定進程:k 
 保存文件:W  
 欄位信息簡介 
  us:用戶空間 sy:內核空間 ni:調整nice時間 id:空閑 wa:等待IO時間 hi:硬中斷 si:軟中斷
  (模式切換) st:虛擬機偷走的時間 
  選項: 
  -d #: 指定刷新時間間隔,默認為3秒
  -b: 全部顯示所有進程 
  -n #: 刷新多少次后退出
  htop命令:EPEL源 
  選項:
  -d #: 指定延遲時間;
  -u UserName: 僅顯示指定用戶的進程
  -s COLUME: 以指定字段進行排序 子命令:
  s: 跟蹤選定進程的系統調用 
  l: 顯示選定進程打開的文件列表 
  a:將選定的進程綁定至某指定CPU核心 
  t: 顯示進程樹 

free [OPTION] 

 -b 以字節為單位 
 -m 以MB為單位 
 -g 以GB為單位 
 -h 易讀格式 
 -o 不顯示-/+buffers/cache行
 -t 顯示RAM + swap的總和
 -s n 刷新間隔為n秒 
 -c n 刷新n次后即退出

vmstat命令:

  虛擬內存信息 vmstat [options] [delay [count]]
    vmstat 2 5 
  procs: 
    r:可運行(正運行或等待運行)進程的個數,和核心數有關
    b:處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
  memory: 
    swpd: 交換內存的使用總量 
    free:空閑物理內存總量
    buffer:用于buffer的內存總量 
    cache:用于cache的內存總量 
    swap: 
      si:從磁盤交換進內存的數據速率(kb/s) 
      so:從內存交換至磁盤的數據速率(kb/s) 
    io:
      bi:從塊設備讀入數據到系統的速率(kb/s) 
      bo: 保存數據至塊設備的速率
    system: 
      in: interrupts 中斷速率,包括時鐘 
      cs: context switch 進程切換速率
    cpu: 
      us:Time spent running non-kernel code 
      sy: Time spent running kernel code id: Time spent idle. Linux 2.5.41前,包括IO-wait time. 
      wa: Time spent waiting for IO. 2.5.41前,包括in idle. 
      st: Time stolen from a virtual machine. 2.6.11前, unknown. 
   選項: -s: 顯示內存的統計數據  

iostat:

  統計CPU和設備IO信息 
  示例:iostat 1 10
┌─[root@yyc]─[~]
└──? #which iostat
/usr/bin/iostat
┌─[root@yyc]─[~]
└──? #rpm -qf /usr/bin/iostat
sysstat-9.0.4-33.el6.x86_64

pmap命令:進程對應的內存映射 

  pmap [options] pid [...] 
   -x: 顯示詳細格式的信息 
   示例:pmap 1 ?
   另外一種實現: cat /proc/PID/maps 
┌─[root@centos7]─[~]
└──? #ps -C sshd o pid= | head -1 |xargs pmap -x
1070: /usr/sbin/sshd -D
Address Kbytes RSS Dirty Mode Mapping
000055c18eb2f000 800 292 0 r-x-- sshd
000055c18edf6000 16 16 16 r---- sshd
000055c18edfa000 4 4 4 rw--- sshd
000055c18edfb000 36 36 36 rw--- [ anon ]
000055c1905db000 132 60 60 rw--- [ anon ]
00007f1f98fc4000 48 20 0 r-x-- libnss_files-2.17.so
00007f1f98fd0000 2044 0 0 ----- libnss_files-2.17.so
00007f1f991cf000 4 4 4 r---- libnss_files-2.17.so
00007f1f991d0000 4 4 4 rw--- libnss_files-2.17.so

glances命令:EPEL源 

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password]
 [--password] [t refresh] [-f file] [-o output] 
 內建命令:
 a Sort processes automatically
 l Show/hide logs 
 c Sort processes by CPU% 
 b Bytes or bits for network I/O 
 m Sort processes by MEM% 
 w Delete warning logs 
 p Sort processes by name 
 x Delete warning and critical logs 
 i Sort processes by I/O rate 
 1 Global CPU or per-CPU stats 
 d Show/hide disk I/O stats 
 h Show/hide this help screen 
 f Show/hide file system stats 
 t View network I/O as combination 
 n Show/hide network stats 
 u View cumulative network I/O 
 s Show/hide sensors stats 
 q Quit (Esc and Ctrl-C also work) 
 y Show/hide hddtemp stats 
常用選項: 
 -b: 以Byte為單位顯示網卡數據速率 
 -d: 關閉磁盤I/O模塊 
 -f /path/to/somefile: 設定輸入文件位置 
 -o {HTML|CSV}:輸出格式 
 -m: 禁用mount模塊 
 -n: 禁用網絡模塊 
 -t #: 延遲時間間隔 
 -1:每個CPU的相關數據單獨顯示 
 C/S模式下運行glances命令 
   服務器模式: glances -s -B IPADDR IPADDR: 指明監聽的本機哪個地址 
   客戶端模式: glances -c IPADDR IPADDR:要連入的服務器端地址 

dstat命令:系統資源統計,代替vmstat,iostat 

 dstat [-afv] [options..] [delay [count]] 
  -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: 顯示延遲最大的進程 

iotop

  iotop命令是一個用來監視磁盤I/O使用狀況的top類工具iotop具有與top相似的UI,其中包括PID、用戶
I/O、進程等相關信息,可查看每個進程是如何使用IO 
  iotop輸出 
     第一行:Read和Write速率總計 
     第二行:實際的Read和Write速率 
     第三行:參數如下: 
   線程ID(按p切換為進程ID) 優先級 用戶 磁盤讀速率 磁盤寫速率 swap交換百分比 IO等待所占的百分比
線程/進程命令 
 iotop常用參數 
  -o, --only只顯示正在產生I/O的進程或線程,除了傳參,可以在運行過程中按o生效 
  -b, --batch非交互模式,一般用來記錄日志 
  -n NUM, --iter=NUM設置監測的次數,默認無限。在非交互模式下很有用 
  -d SEC, --delay=SEC設置每次監測的間隔,默認1秒,接受非整形數據例如1.1 
  -p PID, --pid=PID指定監測的進程/線程 
  -u USER, --user=USER指定監測某個用戶產生的I/O 
  -P, --processes僅顯示進程,默認iotop顯示所有線程 
  -a, --accumulated顯示累積的I/O,而不是帶寬 
  -k, --kilobytes使用kB單位,而不是對人友好的單位。在非交互模式下,腳本 編程有用 
 iotop常用參數和快捷鍵 
  -t, --time 加上時間戳,非交互非模式 
  -q, --quiet 禁止頭幾行,非交互模式,有三種指定方式 
  -q 只在第一次監測時顯示列名 
  -qq 永遠不顯示列名 
  -qqq 永遠不顯示I/O匯交互按鍵 
 left和right方向鍵:改變排序 
  r:反向排序 
  o:切換至選項--only 
  p:切換至--processes選項 
  a:切換至--accumulated選項 
  q:退出 
  i:改變線程的優先級 

kill命令:

   向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開頭 (可省略)
不區分大小寫 
  顯示當前系統可用信號: kill –l,trap -l 
 常用信號:man 7 signal
  1) SIGHUP: 無須關閉進程而讓其重讀配置文件 
  2) SIGINT: 中止正在運行的進程;相當于Ctrl+c 
  3) SIGQUIT:相當于ctrl+\ 
  9) SIGKILL: 強制殺死正在運行的進程 
 15) SIGTERM:終止正在運行的進程 
 18) SIGCONT:繼續運行 
 19) SIGSTOP:后臺休眠 
 指定信號的方法: 
  (1) 信號的數字標識:1, 2, 9 
  (2) 信號完整名稱:SIGHUP 
  (3) 信號的簡寫名稱:HUP 
 進程管理工具 
  按PID:kill [-SIGNAL] pid …
  kill –n SIGNAL pid;
  kill –s SIGNAL pid 
 按名稱:
  killall [-SIGNAL] comm… 
按模式:
  pkill [options] pattern 
  -SIGNAL 
  -u uid: effective user,生效者
  -U uid: real user,真正發起運行命令者 
  -t terminal: 與指定終端相關的進程 
  -l 顯示進程名(pgrep可用) 
  -a 顯示完整格式的進程名(pgrep可用)
  -P pid: 顯示指定進程的子進程 

作業管理
 
 Linux的作業控制 
 前臺作業:通過終端啟動,且啟動后一直占據終端;
 后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端) 
 讓作業運行于后臺 
 (1) 運行中的作業: Ctrl+z
 (2) 尚未啟動的作業: COMMAND & 
  后臺作業雖然被送往后臺運行,但其依然與終端相關,退出終端,將關閉后臺作業。如果希望送往后臺后,剝離
與終端的關系 
  nohup COMMAND &>/dev/null  
  screen;COMMAND 
 查看當前終端所有作業:jobs 
 作業控制: 
  fg [[%]JOB_NUM]:把指定的后臺作業調回前臺
  bg [[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行 
  kill [%JOB_NUM]: 終止指定的作業
 并行運行 
 同時運行多個進程,提高效率 
  方法1 vi all.sh f1.sh& f2.sh& f3.sh&
  方法2 (f1.sh&);(f2.sh&);(f3.sh&) 
  方法3 { f1.sh& f2.sh& f3.sh& }





本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97533

(0)
parrotparrot
上一篇 2018-05-05
下一篇 2018-05-05

相關推薦

  • Ansible使用介紹(三)templates及Roles角色

    本節索引: 一、前期環境準備 二、Playbook中模板templates的用法 三、Playbook中邏輯語句的用法 四、Roles角色詳解   一、環境搭建: 前期準備:一臺虛擬機作為ansible,三臺虛擬機作為被控端node 主控端: 主機名:ansible 系統版本:CentOS6.9 被控端: 主機名:node1 CPU內核數:4 系統…

    2018-05-31
  • Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用

    Linux系統上的命令格式為: command -options arguments–long options ifconfig   ~]# cd ~ 切換回自己的家目錄 ~]#? cd ~USERNAME ? ?切換指定用戶的家目錄 ~]#? cd – ? ? 在上一次所在目錄與當前目錄間來回切換 ? ? $PWD 當前工…

    Linux筆記 2018-05-11
  • 模擬網絡訪問解析

    搭建局域網DNS解析,具體實現功能如下圖 注:該測試只有正向解析 項目流程圖 1. 項目前準備關閉防火墻和SELINUX,配置網絡 ①開啟8臺機器 ②關閉防火墻及selinux iptables -vnL #查看防火墻狀態 systemctl stop firewall #關閉防火墻 getenforce #查看SELinux狀態 setenforce 0 …

    2018-06-04
  • 計算機原理與Linux基礎

    計算機的組成及功能 1、其實計算機的組織分為內部設備和外部設備, 內部設備: ? ? ? ? CPU:運算器、寄存器、緩存 ? ? ? ? 存儲器:內存,RAM(Random Access Memory) ? ? ? ? 控制器:控制器是整個計算機系統的控制中心,它指揮計算機各部分協調地工作,保證計算機按照預先規定的目標和步驟有條不紊地進行操作及處理。 外部…

    Linux筆記 2018-05-13
  • 計算機組成及其功能

    計算機組成

    2018-05-09
  • 第四個禮拜作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 ? ? ? ? cp -r /etc/skel /home/tuser1 ; ? ? ? ? ll -d /home/tuser1; ? ? ? ? chmod -R g-rwx,o-rwx /home/tuser1; ? …

    Linux筆記 2018-06-03
欧美性久久久久