centos6 init進程是系統中的第一個進程,PID永遠為1
查看系統在中靜態進程的統計信息
命令: ps
格式: ps [可選項]
- ax: 顯示所有的進程信息
- -u: 使用以用戶為主的格式輸出進程信息
- -e: select all processes 顯示系統內的進程信息
- -l: 使用長格式顯示進程信息
- -f: full 使用完整的格式顯示進程信息
補充: ps -eo pid,args,psr
可以查看系統上進程的 pid 命令參數 已經占用的哪個cpu
ps aux命令
[root@ecs-t6-large-2-linux-20190824103606 tmp]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 125568 3984 ? Ss Sep04 0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S Sep04 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Sep04 0:00 [ksoftirqd/0]
解析
USER: 進程所屬的用戶
PID: 進程id
%CPU: 進程占用CPU的百分比
%MEM: 進程占用內存的百分比
VSZ: 進程使用的虛擬內存量
RSS: 進程占用的物理內存容量
TTY: 進程在哪個終端上運行
STAT: 進程狀態
START: 進程啟動時間
TIME: 進程實際占用cpu的時間
COMMAND: 命令名稱和參數
ps -elf命令
[root@ecs-t6-large-2-linux-20190824103606 tmp]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 31392 ep_pol Sep04 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea Sep04 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo Sep04 ? 00:00:00 [ksoftirqd/0]
1 S root 5 2 0 60 -20 - 0 worker Sep04 ? 00:00:00 [kworker/0:0H]
F : 進程的flag, 4代表使用者, super user
S : 進程的用戶
PPID : 父進程
C: cpu的利用率
PRI : Priority 優先級
NI : Nice
PRI/NI : 進程被CPU執行的優先級, 值越小, 越容易被執行
ADDR: 進程內存的地址
SZ: 占用的內存大小
WCHAN: 是否正在運作
CMD: 命令名稱和參數
查看動態的進程排名信息
top命令
- P:按%CPU排序
- M:按%MEM排序
- 1: 多核的話, 按1,可以顯示出全部CPU
空格:馬上刷新
默認每三秒就刷新一次
每隔一秒刷新一次
top -d 1
top 字段解析
top - 20:31:56 up 10 days, 5:03, 1 user, load average: 0.00, 0.01, 0.05
當前時間 系統運行的時間 在線人數 系統負載 : 任務隊列的平均長度
# 使用w 或 uptime 可以查看到同樣的信息
Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 0.0 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
total 進程總數81 正在運行1個進程 80個在休眠 0個停止了 0個僵屍進程數
3.2 us : 用戶空間占用cpu百分比3.2
0.0 sy : 內核空間占用cpu的百分百
0.0 ni : 用戶空間內改變過優先級的進程占用cpu的百分比
96.8 id: 空閑的cpu百分比
0.0 wa: 等待輸入輸出的進程占用cpu 的百分比
0.0 hi: 硬件cpu占用百分比
0.0 si: 軟中斷占用cpu百分比
0.0 st: 虛擬機占有cpu百分比
KiB Mem : 3880020 total, 601516 free, 1553552 used, 1724952 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2045092 avail Mem
Mem 內存 總共3880020k 物理內存容量 空閑內存容量=601516 已經使用:used=1553552 緩存=1724952
Swap: 交換區總量0
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125568 3984 2628 S 0.0 0.1 0:05.14 systemd
PID: 進程id
USER: 優先級
PR: 優先級
NI: 負數表示高優先級, 正數表示低優先級
VIRT: 進程使用的虛擬內存數
RES: 進程使用的未被換出的物理內存大小
SHR: 共享內存量
S: 進程狀態
%CPU: 使用的CPU百分比
@MEN: 使用的物理內存百分比
TIME+ : 使用的CPU時間總計
COMMAND : 命令名
加入nice值后, PRI(新) = PRI(老) + nice
- root ,可以設置的范圍是 [-20 19]
- 普通用戶 ,可以設置的范圍是 [0 19]
以樹型結構顯示各進程間的關系
命令: pstree
[root@ecs-t6-large-2-linux-20190824103606 tmp]# pstree
systemd─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─agetty
├─atd
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─dockerd-current─┬─docker-containe───10*[{docker-containe}]
│ └─10*[{dockerd-current}]
├─irqbalance
├─java───49*[{java}]
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─ntpd
├─polkitd───6*[{polkitd}]
├─python
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─wrapper─┬─java───14*[{java}]
└─{wrapper}
進程優先級設置
- niceness:表示進程可被執行的優先級的修正數值 ,可手工修改,與priority有關
優先級有正負之分(-20 ~ 19)
加入nice值后 PRI(新) = PRI(老) + nice
root可以設置nice值范圍(-20 ~ 19)
普通用戶可以設置nice值范圍(0 ~ 19)
- 用nice命令新的nice(新開啟的進程)
以新的nice來啟動命令
nice -10 vi & 設置nice值為10
nice --10 vi & 設置nice值為-10
- 用renice命令設置新nice(已經存在的進程)
renice 10 15132 設置nice值為10
renice -10 15132 設置nice值為-10
renice命令。renice -n 2 -p 3432。-n,后面是優先級的值;-p,是進程號。
- 用top命令修改進程的優先級
先輸入r,然后輸入pid,最后輸入優先級
后台運行
需要在命令行后添加&符號
如何讓 jar包后台運行?
nohup java -jar xxx.jar &
退出 exit
信號 kill
kill命令用來發送信號, 是進程間通信機制中唯一的異步通信機制
進程接收到信號后,采取其他動作,常用它殺死進程
信號值 | 符號 | 行為 |
---|---|---|
2 | sigint (interrupt) | ctrl + c |
9 | sigkill (強制殺死進程) | 請求終止,不能忽略 |
15 | sigterm ( terminate終止) | 請求終止 默認值 |
20 | sigtstp (stop, 掛起進程,放到后台執行) | ctrl + z |
強制殺死進程
kill -9 pid
有時候直接 kill pid 卻殺不掉這個進程, 說明他屏蔽了默認值
殺死終端
實現強制下線用戶
pkill [選項]
- -u: 根據進程所屬的用戶名,殺死進程
- -t: 根據用戶所在的終端 TTY殺死進程
[root@localhost ~]# w | grep -v "root"
14:10:10 up 6:08, 4 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
teacher tty1 - 14:04 5:34 0.16s 0.16s -bash
hack pts/1 173.17.17.174 14:05 4:32 0.17s 0.17s -bash
[root@localhost ~]# pkill -9 -t pts/1
[root@localhost ~]# w | grep -v "root"
14:12:22 up 6:10, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
teacher tty1 - 14:04 7:46 0.16s 0.16s -bash
顯示物理內存和交換空間的使用情況
命令: free
-m: 用MB的形式顯示內存信息
-h: human readable
[root@ecs-t6-large-2-linux-20190824103606 ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 1.4G 636M 8.6M 1.6G 2.0G
Swap: 0B 0B 0B
從用戶的角度來說,可用的空間就是 free + buff/cache
buff/cache 會隨着系統負載的增大而減小, 釋放掉緩存的空間,更多的IO直接針對磁盤操作,系統會變慢
內存監控
- 系統內存信息在這個文件記錄 /proc/meminfo
釋放內存
/proc是一個特殊文件系統,我們可以通過對它的讀寫操作,來作為與kernel實體間進行通信的一種手段.也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整.那么我們可以通過調整/proc/sys/vm/drop_caches來釋放內存
往 /proc/sys/vm/drop_caches 分別寫入1, 2, 3
頁面緩存(page cache)可以包含磁盤塊的任何內存映射
echo 1 > /proc/sys/vm/drop_caches;
inode是表示文件的數據結構
echo 2 > /proc/sys/vm/drop_caches;
dentries是表示目錄的數據結構 。
echo 3 > /proc/sys/vm/drop_caches.