Linux 內存監控


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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM