Linux調優相關命令彙總

點擊上方 大目 ,選擇 置頂或者星標技術乾貨每日送達!

TIPS

本文基於CentOS 7編寫,理論支持所有所有版本Linux發行版,部分命令的個別參數在不同版本中可能存在細微的差異。

入門級

# 切換目錄cd# 示例# 切換到上一層目錄cd ..# 切換到/opt/softwarecd /opt/software

# 顯示工作目錄pwd

# 顯示指定工作目錄下之內容ls# 示例# 列出當前目錄中文件及目錄的詳情ls -l# 列出當前目錄及其子目錄中文件及目錄的詳情ls -lR

# 創建目錄mkdir# 示例# 創建目錄aaamkdir aaa# 在bbb目錄下創建目錄aaa,如果bbb目錄不存在,就創建一個mkdir -p bbb/aaa

# 刪除目錄rmdir# 示例# 刪除目錄aaarmdir aaa# 刪除bbb目錄下的aaa目錄,如果aaa刪除後,bbb目錄爲成爲空目錄,則將bbb也刪除rmdir -p bbb/aaa

# 將指定文件的訪問時間及修改時間設爲當前時間,若文件不存在,則會自動創建該文件touch# 示例# 將aaa文件的訪問時間及修改時間設爲當前時間,如果aaa不存在,則會自動創建該文件touch aaa

# 刪除文件或目錄(一旦通過rm命令刪除,將無法恢復,務必小心使用)rm# 示例# 刪除test.txt(此格式只能rm 文件;如果使用了rm 目錄,則會提示是目錄,無法刪除)rm test.txt # 遞歸刪除test_dir目錄及其內容rm -r test_dir

# 爲文件或目錄改名、或將文件或目錄移入其它位置mv# 示例# 將test.txt改名爲damu.txtmv test.txt damu.txt# 將aaa目錄放入bbb目錄中;如果bbb目錄不存在,則將aaa改名爲bbbmv aaa bbb

# 以樹狀圖列出目錄的內容tree

# 殺死進程kill# 示例# 殺死9999這個進程kill 9999# 查看信號kill -l# 發送SIGHUP信號殺死9999這個進程kill -HUP 9999# 使用SIGKILL信號殺死9999這個進程kill -9 9999

# 將所有行程以樹狀圖顯pstree# 示例# 展示該進程的完整指令及參數pstree -a

# 關機# 示例:shutdown# 立即關機shutdown -h now# 10分鐘後關機shutdown -h 10# 立即重啓shutdown -r now

# 重啓reboot

# 設置或顯示環境變量export# 示例# 列出當前的環境變量export -p# 設置環境變量JAVA_HOME=xxxexport JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home

# 設定權限# u 表示該文件的擁有者,g 表示與該文件的擁有者屬於同一個羣體(group)者,o 表示其他以外的人,a 表示這三者皆是。# + 表示增加權限、- 表示取消權限、= 表示唯一設定權限。# r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該文件是個子目錄或者該文件已經被設定過爲可執行。chmod # 示例# 將test.txt設爲所有人皆可讀取chmod a+r test.txt# 將文件test1.txt與test2.txt設爲該文件擁有者,與其所屬同一個羣體者可寫入,但其他以外的人則不可寫入chmod ug+w,o-w test1.txt test2.txt# 使用數字形式設置權限,語法是chmod abc file。其中a,b,c各爲一個數字,分別表示User、Group、及Other的權限。# r=4,w=2,x=1# 若要rwx屬性則4+2+1=7;# 若要rw-屬性則4+2=6;# 若要r-x屬性則4+1=5chmod 777 file

# 將指定文件或目錄的擁有者改爲指定的用戶或組chown# 示例# 將的擁有者設爲nginx,羣體的使用者nginxchown nginx:nginx nginx.conf# 遞歸將當前目錄下的所有文件與子目錄的擁有者皆設爲nginx,羣體的使用者爲nginxchown -R nginx:nginx *

# 查找文件裏符合條件的字符串grep# 示例# 在當前目錄中,查找後綴爲txt的文件中,包含test字符串的文件,並打印字符串所屬的行grep test *txt# 遞歸查找/opt目錄中,包含test字符串的文件,並打印字符串所屬的行grep -r test /opt# 查找1.txt中不包含test的行grep -v test 1.txt

# 打開文件並輸出# 示例# 打開1.txtcat 1.txt# 爲1.txt添加行號,並輸出到2.txt中cat -n 1.txt > 2.txt

# 查找指定目錄下的文件find# 查找當前目錄下的所有txt文件find . -name *.txt# 查找機器中所有大於50M的文件find / -type f -size +50M# 查找機器中所有小於50M的文件,並用du -h展示出來find / -type f -size +50M -exec du -h {} \;

系統

查看操作系統發行版本

不同的Linux發行版(例如CentOS與Debain)、以及不同版本(例如CentOS 6.x與CentOS 7.x)查看版本的方式不同,下面羅列了筆者知道的所有方式,總有一款能適用於你的環境。

方法1:通過 /etc 目錄下的文件查看

/etc/os-release/etc/system-release/etc/redhat-release/etc/centos-release/etc/issue

方法2:執行 lsb_release -a


uname

作用:

顯示系統信息

語法:

Usage: uname [OPTION]...Print certain system information.  With no OPTION, same as -s.
-a, --all 打印所有信息 -s, --kernel-name 打印內核名稱 -n, --nodename 打印網絡節點主機名 -r, --kernel-release 打印內核版本 -v, --kernel-version 打印內核版本 -m, --machine 打印硬件名稱 -p, --processor 打印處理器類型 -i, --hardware-platform 打印硬件平臺 -o, --operating-system 打印操作系統 --help 幫助 --version 顯示版本

使用:

[root@localhost ~]# uname -aLinux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

結果解讀:

Linux:內核名稱localhost.localdomain:主機名3.10.0-327.el7.x86_64:內核版本#1 SMP Thu Nov 19 22:10:57 UTC 2015:內核版本x86_64:硬件名稱x86_64:處理器類型x86_64:硬件平臺GNU/Linux:操作系統

常見用法:

uname -a

uptime

作用:

展示系統啓動運行了多久

語法:

Usage: uptime [options]
Options: -p, --pretty 對輸出結果格式化 -h, --help 展示幫助 -s, --since 展示操作系統的啓動時間 -V, --version 展示版本

使用:

[root@localhost ~]# uptime 18:52:01 up 48 days, 18:24,  4 users,  load average: 0.00, 0.01, 0.05

結果解讀:

18:52:01:當前時間48 days, 18:24:啓動了48 days, 18:24這麼久4 users:當前登錄了2個用戶load average: 0.00, 0.01, 0.05:平局負載,後面的數字分別是最近1分鐘、5分鐘、15分鐘的平均負載

用戶相關

id

作用:展示用戶的ID、以及所屬羣組的ID

語法:

Usage: id [OPTION]... [USER]Print user and group information for the specified USER,or (when USER omitted) for the current user.
-a 忽略,只是爲了和其他版本兼容 -Z, --context 只打印當前用戶的安全上下文 -g, --group 只打印有效的group ID -G, --groups 打印所有group ID -n, --name 打印名稱而不是號碼,和-u/-g/-G配合使用 -r, --real 打印真實ID而非有效ID,和-u/-g/-G配合使用 -u, --user 只打印有效的用戶ID -z, --zero 以NULL而非空格分隔結果 --help 幫助 --version 展示版本
Without any OPTION, print some useful set of identified information.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>For complete documentation, run: info coreutils 'id invocation'

使用:

# 查看當前用戶相關信息[root@localhost ~]# iduid=0(root) gid=0(root) groups=0(root)

結果解讀:

uid:用戶id及名稱gid:用戶當前所使用的組的id及名稱groups:用戶擁有的所有組的id及名稱

常見用法:

# 查看當前用戶相關信息id# 查看MySQL這個用戶的相關信息id mysql

TIPS

如果大家不知道什麼是有效ID、什麼是真實ID,可以閱讀下這個文章:https://www.annhe.net/article-4458.html[1]

w

作用:

展示當前登錄系統的用戶信息

語法:

Usage: w [options]
Options: -h, --no-header do not print header -u, --no-current ignore current process username -s, --short short format -f, --from show remote hostname field -o, --old-style old style output -i, --ip-addr display IP address instead of hostname (if possible)
--help display this help and exit -V, --version output version information and exit

使用:

[root@localhost ~]# w 18:55:14 up 48 days, 18:28,  4 users,  load average: 0.05, 0.03, 0.05USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATroot     pts/0    222.94.228.56    18:07   42:34   0.04s  0.04s -bashroot     pts/1    222.94.228.56    18:18   24:50   0.25s  0.06s -bashroot     pts/2    222.94.228.56    18:41   13:48   0.02s  0.02s -bashroot     pts/3    222.94.228.56    18:49    2.00s  0.05s  0.02s w

結果解讀:

第一行:類似uptime

USER:當前登錄的用戶有哪些

TTY:虛擬終端的別名,可以認爲是一個會話的名稱

FROM:你從那臺機器登錄進來的

LOGIN:什麼時候登錄的

IDLE:空閒時間

JCPU:是指連接上這個TTY的所有進程所佔用的時間,不包括過去的後臺作業時間;

PCPU:當前進程所佔用的時間

WHAT:這個用戶當前運行的進程是什麼








who

作用:展示當前登錄用戶的信息

語法:

Usage: who [OPTION]... [ FILE | ARG1 ARG2 ]Print information about users who are currently logged in.
-a, --all 等價於-b -d --login -p -r -t -T -u -b, --boot 系統啓動時間 -d, --dead 打印死亡的進程 -H, --heading 打印標題 -l, --login 打印系統登錄過程 --lookup 嘗試通過DNS規範化主機名 -m 相當於who am i -p, --process 打印由init產生的活動進程 -q, --count 顯示登入系統的用戶名和總人數 -r, --runlevel 打印當前運行級別 -s, --short 僅打印name, line, time(默認) -t, --time 打印最近的系統時鐘修改 -T, -w, --mesg 將用戶的消息狀態添加爲+,-或? -u, --users 列出登錄的用戶 --message 和-T相同 --writable 和-T相同 --help 幫助 --version 版本
If FILE is not specified, use /var/run/utmp. /var/log/wtmp as FILE is common.If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>For complete documentation, run: info coreutils 'who invocation'

使用:

[root@localhost ~]# whoroot     pts/0        2020-06-27 23:51 (222.94.228.56)root     pts/1        2020-06-27 21:54 (222.94.228.56)

結果解讀:

root:登錄的用戶是誰pts/0:虛擬終端別名2020-06-27 23:51 (222.94.228.56):登錄時間與遠程IP

常見用法:

# 顯示當前登錄系統的用戶who
# 展示詳情,相當於who -b -d --login -p -r -t -T -uwho -a
# 顯示自己的信息who am i
# 打印標題who -H
# 顯示登入系統的用戶名和總人數who -q

whoami

作用:

顯示自身用戶名稱

語法:

Usage: whoami [OPTION]...Print the user name associated with the current effective user ID.Same as id -un.
--help 幫助 --version 版本
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>For complete documentation, run: info coreutils 'whoami invocation'

使用:

whoami

last

作用:

顯示用戶最近登錄信息

語法:

Usage: last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]

常用參數:

-R:結果省略從哪裏登錄的一欄-num/-n/num:展示前num條username:展示指定用戶的登錄信息tty:只顯示指定虛擬終端的登錄信息

更多參數詳見 man last

使用:

[root@localhost ~]# last root     pts/1        222.94.228.56    Mon Jun 29 22:53   still logged in   root     pts/0        222.94.228.56    Mon Jun 29 22:47   still logged in   root     pts/5        222.94.228.56    Sat Jun 27 23:58 - 03:07  (03:08)    root     pts/0        222.94.228.56    Sat Jun 27 23:51 - 00:56  (01:04)    root     pts/4        222.94.228.56    Sat Jun 27 23:39 - 00:56  (01:17)

結果解讀:

root:誰登陸的pts/1:虛擬終端的別名,可以認爲是一個會話的名稱222.94.228.56:展示登錄機器的主機名,表示從哪裏登陸的Mon Jun 29 22:53 still:登錄的起止時間logged in:持續了多久

常見用法:

# 只顯示2條last -2
# 展示root用戶的登錄信息last username root
# 顯示虛擬終端別名爲pts/1的登錄信息last tty pts/1

CPU相關

cpuinfo

作用:查看CPU信息

使用:

cat /proc/cpuinfo

結果解讀:

# 概念:1. 物理CPU數:主板上實際插入的cpu數量2. CPU核心數:單塊CPU上面能處理數據的芯片組的數量,如雙核、四核等3. 邏輯CPU數:一般來說:   邏輯CPU=物理CPU個數×每顆核數       # 不支持超線程技術或未開啓此技術   邏輯CPU=物理CPU個數×每顆核數 *2     # 表示服務器的CPU支持超線程技術(簡單來說,它可使處理器中的1 顆內核如2 顆內核那樣在操作系統中發揮作用。這樣一來,操作系統可使用的執行資源擴大了一倍,提高了系統的整體性能)

# 邏輯處理核心數的編號,從0開始排序processor : 0# CPU廠商vendor_id : GenuineIntel# CPU產品系列代號cpu family : 6# CPU屬於其系列中的哪一代的代號model : 45# CPU的型號、主頻model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz# CPU所屬製作更新版本stepping : 7# 微代碼microcode : 0xffffffff# CPU當前所使用的主頻cpu MHz : 1999.994# 二級緩存大小cache size : 15360 KB# 物理idphysical id : 0# 單個物理CPU的邏輯CPU數siblings : 8# 當前物理核在其所處CPU中的編號,這個編號不一定連續core id : 0# CPU核心數cpu cores : 8# 用來區分不同邏輯核的編號,系統中每個邏輯核的此編號必然不同,此編號不一定連續apicid : 0# 初始的apicidinitial apicid : 0# 是否具有浮點運算單元(Floating Point Unit)fpu : yes# 是否支持浮點計算異常fpu_exception : yes# 執行cpuid指令前,eax寄存器中的值,根據不同的值cpuid指令會返回不同的內容cpuid level : 13# 表明當前CPU是否在內核態支持對用戶空間的寫保護(Write Protection)wp : yes# 當前CPU支持的功能flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm xsaveopt# 在系統內核啓動時粗略測算的CPU速度(Million Instructions Per Second)bogomips : 3999.98# 每次刷新緩存的大小單位clflush size : 64# 緩存地址對齊單位cache_alignment : 64# 可訪問地址空間位數address sizes : 42 bits physical, 48 bits virtual# 對能源管理的支持power management:

常見用法:

# 查詢系統有幾顆物理CPU(結果有幾行說明有幾個物理CPU)cat /proc/cpuinfo | grep "physical id" |sort |uniq
# 查詢系統每顆物理CPU的核心數cat /proc/cpuinfo | grep "cpu cores" | uniq
# 每顆物理CPU核心是否啓用超線程技術。如果啓用此技術那麼,每個物理核心又可分爲兩個邏輯處理器cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq
# 查詢系統具有多少個邏輯CPUcat /proc/cpuinfo | grep "processor" | wc -l

TIPS

參考:https://www.cnblogs.com/wxxjianchi/p/10522049.html[2]

top

作用:

顯示、管理執行中的程序

語法:

Usage:  top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

常用參數:

d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 sq : 沒有任何延遲的顯示速度,如果使用者是有 superuser 的權限,則 top 將會以最高的優先序執行c : 切換顯示模式,共有兩種模式,一是隻顯示執行檔的名稱,另一種是顯示完整的路徑與名稱S : 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來s : 安全模式,將交談式指令取消, 避免潛在的危機i : 不顯示任何閒置 (idle) 或無用 (zombie) 的行程n : 更新的次數,完成後將會退出 topb : 批次檔模式,搭配 "n" 參數一起使用,可以用來將 top 的結果輸出到檔案內

使用:

[root@localhost ~]# toptop - 18:57:49 up 48 days, 18:30,  4 users,  load average: 0.02, 0.03, 0.05Tasks: 288 total,   1 running, 279 sleeping,   8 stopped,   0 zombie%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem :  1009368 total,    74540 free,   519392 used,   415436 buff/cacheKiB Swap:  1048572 total,   570600 free,   477972 used.   249136 avail Mem 
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2737 mongod 20 0 1571560 64216 5156 S 1.0 6.4 534:08.38 mongod 1783 root 20 0 148336 2260 1428 R 0.7 0.2 0:00.10 top 14047 root 20 0 0 0 0 S 0.3 0.0 0:21.71 kworker/6:2 1 root 20 0 49860 2212 1300 S 0.0 0.2 28:02.47 systemd

結果解讀:

第一行:展示了系統運行的時間、有幾個用戶,平均負載等信息。這個結果和uptime一樣第二行:展示了任務的相關信息,包括總共有多少任務、多少任務在任務在運行;多少在睡眠、多少停止了,多少個殭屍狀態的任務等第三行:CPU狀態

us(user):運行用戶進程的CPU時間sy(system):運行內核進程的CPU時間ni(niced):運行已調整優先級的用戶進程的CPU時間id(idle):空閒時間wa(IO wait):用於等待IO完成的CPU時間hi:處理硬件中斷的CPU時間si:處理軟件中斷的CPU時間st:被hypervisor偷去的CPU時間

第四行:內存狀態,包括全部可用內存、已使用內存、空閒內存、緩衝內存第七行開始:各個進程任務的的狀態監控

PID:進程號

USER:運行這個進程的用戶是誰PR:展示進程的實時優先級,取值0-99,越大則會持有更多的CPU時間片。NI:展示進程的nice值,值越小,優先級越高。意味着越高的優先級VIRT:virtual memory usage,進程使用的虛擬內存。VIRT = SWAP + RESRES:resident memory usage,常駐內存,駐留內存是進程使用的非交換物理內存。RES = CODE + DATASHR:shared memory,共享內存S:進程狀態,取值如下:

D:不可中斷的睡眠態。R:運行態S:睡眠態T:被跟蹤或已停止Z:殭屍態

CPU:自從上一次更新時到現在任務所使用的CPU時間百分比MEM:進程使用的可用物理內存百分比TIME:進程使用的總CPU時間,精確到0.01秒COMMAND:進程所使用的命令





常見用法:

# 展示完整命令(COMMAND)top -c
# 設置更新次數(更新2次後就退出)top -n 2
# 指定更新週期(每隔3秒刷新一次)top -d 3
# 查看指定進程的信息top -p 139
# 顯示指定進程中線程的運行信息top -Hp 139

參考文章:https://www.cnblogs.com/fuqu/p/10230385.html[3]

進程相關

ps

作用:

展示程序運行情況

語法:

Usage: ps [options]
Basic options: -A, -e all processes -a all with tty, except session leaders a all with tty, including other users -d all except session leaders -N, --deselect negate selection r only running processes T all processes on this terminal x processes without controlling ttys
Selection by list: -C <command> command name -G, --Group <GID> real group id or name -g, --group <group> session or effective group name -p, p, --pid <PID> process id --ppid <PID> parent process id -q, q, --quick-pid <PID> process id (quick mode) -s, --sid <session> session id -t, t, --tty <tty> terminal -u, U, --user <UID> effective user id or name -U, --User <UID> real user id or name
The selection options take as their argument either: a comma-separated list e.g. '-u root,nobody' or a blank-separated list e.g. '-p 123 4567'
Output formats: -F extra full -f full-format, including command lines f, --forest ascii art process tree -H show process hierarchy -j jobs format j BSD job control format -l long format l BSD long format -M, Z add security data (for SELinux) -O <format> preloaded with default columns O <format> as -O, with BSD personality -o, o, --format <format> user-defined format s signal format u user-oriented format v virtual memory format X register format -y do not show flags, show rss vs. addr (used with -l) --context display security context (for SELinux) --headers repeat header lines, one per page --no-headers do not print header at all --cols, --columns, --width <num> set screen width --rows, --lines <num> set screen height
Show threads: H as if they were processes -L possibly with LWP and NLWP columns -m, m after processes -T possibly with SPID column
Miscellaneous options: -c show scheduling class with -l option c show true command name e show the environment after command k, --sort specify sort order as: [+|-]key[,[+|-]key[,...]] L show format specifiers n display numeric uid and wchan S, --cumulative include some dead child process data -y do not show flags, show rss (only with -l) -V, V, --version display version information and exit -w, w unlimited output width
--help <simple|list|output|threads|misc|all> display help and exit

常用參數:

-A或e:列出所有的行程-w:顯示加寬可以顯示較多的資訊-f:“全格式”展示,返回的字段較多a:展示當前運行的所有程序,包括其他用戶的程序...其他的大家自己看下help吧,沒動力翻譯了……

示例:

# 全格式展示所有進程ps -ef
# 顯示較詳細的信息,比如進程佔用的CPU、內存等ps -au
# 顯示所有包含其他使用者的行程ps -aux

jobs

個人經驗,使用較少

作用:

顯示Linux中的任務列表及任務狀態

Ctrl+Z組合鍵將當前進程掛起(調入後臺並停止運行),這種操作在需要暫停當前進程並進行其他操作時特別有用。例如,我們使用windows系統是有時候在本地計算機搜索東西時,發現他搜索的老慢了甚至電腦都有點卡,我們突然不想讓它搜了,就想馬上讓它停止搜索,就是這種感覺。使用jobs命令,可以查看當前終端在後臺的進程任務任務號是以普通用戶的角度進行的,而進程號則是從系統管理員的角度來看的。一個任務可以對應於一個或者多個進程號

語法:

jobs [-lnprs] [ jobspec ... ]jobs -x command [ args ... ]
第一種格式列出活動的任務,選項含義如下:-l 除常規信息外,還列出進程號-n 僅顯示有關自從上次通知用戶狀態以來,更改狀態的任務信息-p 只顯示任務的進程組leader的進程id-r 只顯示正在運行的任務-s 只顯示已停止的任務如果指定了jobspec,則只展示jobspec的相關信息
如果指定了-x選項,則job會替換在command或args中找到的所有jobspec與相應的進程組id,並將其傳遞給command

常見用法:

jobs -l

pgrep

作用:根據特定條件查詢進程PID信息

語法:

Usage: pgrep [options] <pattern>
Options: -d, --delimiter <string> 指定分隔符 -l, --list-name 列出PID和進程名稱 -a, --list-full 列出PID和完整命令行 -v, --inverse 反向匹配,展示不匹配條件的結果 -w, --lightweight 列出所有TID -c, --count 展示匹配的進程個數 -f, --full 使用完整進程名進行匹配 -g, --pgroup <PGID,...> 展示匹配的進程組id -G, --group <GID,...> 展示匹配的GID -n, --newest 展示最近啓動的進程 -o, --oldest 展示啓動的進程 -P, --parent <PPID,...> 只匹配指定PPID的子進程 -s, --session <SID,...> 匹配SID -t, --terminal <tty,...> 匹配tty -u, --euid <ID,...> 匹配有效用戶id -U, --uid <ID,...> 匹配真實id -x, --exact 與命令名稱完全匹配 -F, --pidfile <file> 從文件中讀取PID -L, --logpidfile 如果未鎖定PID文件則失敗 --ns <PID> 匹配和PID屬於指定namespace的進程 --nslist <ns,...> 列出指定的namespace的信息。可選那麼space:ipc, mnt, net, pid, user, uts
-h, --help 幫助 -V, --version 版本

使用:

# 展示命令行爲java的進程的進程號pgrep java
# 查找命令行爲java的進程,並列出完整命令行pgrep -a java
# 查看root用戶運行的所有進程pgrep -U root
# 組合使用pgrep -a -U root

內存相關

meminfo

作用:查看內存信息

使用:

cat /proc/meminfo

結果解讀:

# 總內存MemTotal:        1009368 kB# 空閒內存MemFree:           77320 kB# 可用內存MemAvailable:     268716 kB# Buffer使用的大小Buffers:               0 kB# Cache使用的大小Cached:           329420 kB# 被高速緩衝存儲用的交換空間大小SwapCached:        18440 kB# 活躍中的高速緩衝存儲器頁面文件大小Active:           493144 kB# 不活躍的高速緩衝存儲器頁面文件大小Inactive:         268208 kBActive(anon):     245240 kBInactive(anon):   237316 kBActive(file):     247904 kBInactive(file):    30892 kBUnevictable:           0 kBMlocked:               0 kB# 交換區總大小SwapTotal:       1048572 kB# 空閒交換區大小SwapFree:         570568 kB# 等待被寫回到磁盤的大小Dirty:                52 kB# 正在被寫回的大小Writeback:             0 kB# 未映射的頁的大小AnonPages:        421380 kB# 設備和文件映射的大小Mapped:            27068 kBShmem:             50624 kB# 內核數據結構緩存的大小,可減少申請和釋放內存帶來的消耗Slab:              99168 kB# 可收回slab的大小SReclaimable:      50444 kB# 不可收回的slab的大小SUnreclaim:        48724 kBKernelStack:        6992 kB# 管理內存分頁的索引表的大小PageTables:         7496 kB# 已經發給NFS服務器,但尚未被確認(committed)寫入到穩定存儲的頁表NFS_Unstable:          0 kBBounce:                0 kBWritebackTmp:          0 kBCommitLimit:     1553256 kBCommitted_AS:    1597364 kB# 虛擬內存大小VmallocTotal:   34359738367 kB# 已使用的虛擬內存大小VmallocUsed:       53608 kB# 在vmalloc區域中可用的最大的連續內存塊的大小VmallocChunk:   34359681024 kBHardwareCorrupted:     0 kBAnonHugePages:    229376 kB# 大頁面的分配HugePages_Total:       0HugePages_Free:        0HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       2048 kBDirectMap4k:       63424 kBDirectMap2M:      985088 kB

TIPS

在Linux文檔中有更加詳細的描述,詳見:https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst[4]Buffer與Cache:

Linux Page cache和Block I/O layer[5]Linux內存Cache和Buffer理解[6]


free

作用:查看內存運行情況

語法:

Usage: free [options]
Options: -b, --bytes 以Byte爲單位顯示內存使用情況 -k, --kilo 以KB爲單位顯示內存使用情況 -m, --mega 以MB爲單位顯示內存使用情況 -g, --giga 以GB爲單位顯示內存使用情況 --tera 以TB爲單位顯示內存使用情況 -h, --human 自動以合適的單位顯示內存使用情況 --si 以1000爲底而非1024 -l, --lohi 展示最低/最高內存的統計信息 -t, --total 顯示內存總和(RAM + swap) -s N, --seconds N 每隔N秒刷新 -c N, --count N 打印N次後退出 -w, --wide 寬屏模式打印,將buff和cache分開顯示
--help 幫助 -V, --version 展示版本
For more details see free(1).

示例:

[root@localhost ~]# free              total        used        free      shared  buff/cache   availableMem:        1009368      519640       77092       50732      412636      250392Swap:       1048572      477968      570604

結果解讀:

total:物理內存總量used:已使用的內存,used = total - free - buffers - cachefree:空閒的內存數shared:多個進程共享的內存buff/cache:代表的是 buff(對應/proc/meminfo裏的Buffers)和cache的內存(對應/proc/meminfo 裏的Cached and Slab)。available:在CentOS 7中,available是真正可用內存。available包括了buff/cache中一些可以被釋放的內存,當物理內存不夠用的時候,內核會把非活躍的數據清空。Mem:

TIPS

不同版本的CentOS,free結果不同。可參考:https://www.cnblogs.com/operationhome/p/10362776.html[7]

vmstat

作用:全稱Virtual Meomory Statistics(虛擬內存統計),可對操作系統的虛擬內存、進程、IO讀寫、CPU活動等進行監視

語法:

Usage: vmstat [options] [delay [count]]
Options: -a, --active 展示active/inactive的內存 -f, --forks 顯示此係統啓動以來的forks的總數,包括fork、vfork和clone system calls -m, --slabs 展示slabinfo信息 -n, --one-header 只展示1次header,而非週期展示 -s, --stats 顯示各種事件計數器和內存統計(只顯示1次) -d, --disk 展示磁盤信息 -D, --disk-sum 顯示磁盤統計數據 -p, --partition <dev> 展示分區詳情 -S, --unit <char> 控制輸出的單位,k(1000字節) K(1024字節) 或 M(1048576字節),默認爲K -w, --wide 寬屏輸出模式 -t, --timestamp 打印時間戳
-h, --help 幫助 -V, --version 版本
For more details see vmstat(8).

使用:

[root@localhost ~]# vmstatprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 1  0 478632  93272      0 390596    0    0     0     1    0    0  0  0 100  0  0

結果解讀:

procs

r:可運行的進程數(runnable processes),包括了running的進程和等待運行的進程(running or waiting for run time)。如果此值過大,則意味着CPU非常繁忙。如果此參數長期 >= 邏輯CPU個數,則表示CPU可能存在瓶頸,考慮增加CPU處在非終端睡眠(uninterruptible sleep)狀態的進程數。此值表示被阻塞的進程數。主要是指被資源阻塞的進程對列數(比如IO資源、頁面調度等)

memory

swpd:已使用的虛擬內存大小free:空閒內存大小buff:用做buffer的內存大小cache:用來做cache的內存大小inact:inactive的內存總量(-a)active:active的內存總量(-a)

swap

si:每秒從磁盤交換到內存的大小,單位:KB/秒so:每秒從內存交換到磁盤的大小,單位:KB/秒當內存夠用時,這兩個值都是0。如果這兩個值長期大於0,則會影響系統性能,磁盤IO和CPU資源都會被消耗。當看到空閒內存(free)很少的或接近於0時,就認爲內存不夠用了,是不正確的。不能光看這一點,還要結合si和so。如果free很少,但是si和so也很少(大多時候是0),可以不用擔心。此時,系統性能不會受到影響的。

io

bi:每秒從塊存儲設備接收到的塊數bo:每秒發送到塊存儲設備的塊數隨機磁盤讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大

system

in:每秒中斷數,包括時鐘中斷cs:每秒上下文切換數這兩個值越小越好

cpu

us:用戶CPU時間(非內核進程佔用時間)百分比sy:系統使用的CPU時間百分比id:空閒CPU時間百分比wa:等待IO的CPU時間百分比st:被虛擬機偷去的CPU時間百分比







常見用法:

# 每隔一秒展示一次vmstat 1
vmstat -a

磁盤相關

df

作用:

展示磁盤使用情況

語法:

Usage: df [OPTION]... [FILE]...
Mandatory arguments to long options are mandatory for short options too. -a, --all 包含具有0Blocks的文件系統 -B, --block-size=SIZE 指定打印單位,可用單位:K, M, G, T, P, E, Z, Y (以1024爲底) ;也可用KB, MB, ... (以1000爲底)。例如-BM表示以MB爲單位打印 --direct 顯示文件的統計信息而不是掛載點 --total 在末尾產生一個彙總行 -h, --human-readable 自動以合適的單位顯示磁盤使用情況 -H, --si 以1000爲底而非1024 -i, --inodes 列出inode的信息,而非block的使用信息 -k 相當於--block-size=1K -l, --local 將列表限制爲本地文件系統 --no-sync 在獲取使用情況信息之前不調用同步(默認) --output[=FIELD_LIST] 使用FIELD_LIST定義的打印格式,如果省略FIELD_LIST則打印所有字段。FIELD_LIST是一個以逗號分隔的字段列表,可選的字段有:'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent', 'file','target' -P, --portability 使用POSIX輸出格式 --sync 在獲取使用情況信息之前調用同步 -t, --type=TYPE 將列表限制爲TYPE類型的文件系統。 -T, --print-type 在結果中,多出來一個Type列,其中打印文件系統類型 -x, --exclude-type=TYPE 將列表限制爲非TYPE類型的文件系統 -v (忽略) --help 幫助 --version 顯示版本

使用:

df

結果解讀:

Filesystem:文件系統的名稱1K-blocks:佔用多少個1K-block,相當於展示佔用了多少Kb的磁盤Used:使用了多少磁盤Avail:可用磁盤Use:使用的百分比Mounted on:掛載點

常見用法:

# 自動以合適的單位顯示磁盤使用情況df -h
# 查看gc.log這個文件所屬的文件系統信息df gc.log
# 指定輸出格式df --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target

拓展閱讀:

Linux 深入理解inode/block/superblock[8]

du

作用:

顯示目錄或文件的大小

語法:

Usage: du [OPTION]... [FILE]...  or:  du [OPTION]... --files0-from=F
Mandatory arguments to long options are mandatory for short options too. -0, --null 以0字節而不是換行符結束每條輸出(即:直接輸出下一行,不換行) -a, --all 顯示所有文件大小,不限於目錄 --apparent-size 打印“apparent size”,而非磁盤佔用情況 -B, --block-size=SIZE 指定打印單位,可用單位:K, M, G, T, P, E, Z, Y (以1024爲底) ;也可用KB, MB, ... (以1000爲底)。例如-BM表示以MB爲單位打印 -b, --bytes 相當於'--apparent-size --block-size = 1' -c, --total 在末尾產生一個彙總行 -D, --dereference-args 取消引用命令行上列出的符號鏈接 -d, --max-depth=N 指定要展示的最大深度,--max-depth=0相當於--summarize --files0-from=F 總結文件F中指定的NUL終止文件名的磁盤使用情況;如果F爲-,則從標準輸入中讀取名稱 -H 等價於--dereference-args (-D) -h, --human-readable 自動以合適的單位顯示磁盤使用情況 --inodes 列出inode的信息,而非block的使用信息 -k 相當於--block-size=1K -L, --dereference 取消引用所有符號鏈接 -l, --count-links 如果是硬鏈接,則計數很多次 -m 相當於--block-size=1M -P, --no-dereference 不遵循任何符號鏈接(這是默認設置) -S, --separate-dirs 不統計子目錄的大小 --si 類似於-h,但以1000爲底而非1024 -s, --summarize 只展示每個參數的統計信息 -t, --threshold=SIZE 如果SIZE爲正,則排除小於SIZE的條目;如果爲負,則排除大於SIZE的條目 --time 展示文件的修改時間 --time=WORD 在time字段展示WORD字段而非修改時間,WORD取值:atime, access, use, ctime or status --time-style=STYLE 指定時間的顯示格式,取值:full-iso, long-iso, iso, 或+FORMAT,FORMAT的解釋類似於“date” -X, --exclude-from=FILE 排除匹配FILE中的正則的文件 --exclude=PATTERN 排除匹配正則的文件 -x, --one-file-system 跳過不同文件系統上的目錄 --help 幫助 --version 版本

常見用法:

# 當前目錄及子目錄的大小,以及大小彙總du 
# 展示1.txt文件的大小du 1.txt
# 自動以合適的單位顯示目錄的大小du -h some_dir
# 排除 < 1000m的文件,展示當前目錄及子目錄的大小,以及大小彙總du -t 1000m
# 以合適的單位展示指定目錄的大小du -sh some_dir

網絡相關

netstat

作用:展示網絡狀態

語法:

usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}       netstat [-vWnNcaeol] [<Socket> ...]       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]
-r, --route 展示路由表 -I, --interfaces=<Iface> 展示網卡Iface的信息 -i, --interfaces 展示網卡信息列表 -g, --groups 顯示多播組的成員信息 -s, --statistics 展示網卡網絡統計信息 -M, --masquerade 顯示僞裝的網絡連接(masqueraded connections)
-v, --verbose 展示更多詳情信息 -W, --wide 不截斷IP地址 -n, --numeric 不解析名稱 --numeric-hosts 不解析主機名 --numeric-ports 不解析端口 --numeric-users 不解析 -N, --symbolic 解析硬件名稱 -e, --extend 展示更多信息 -p, --programs 爲socket展示PID或程序名稱 -o, --timers 在結果中顯示Timer列 -c, --continuous 持續列出結果
-l, --listening 展示監聽的服務器socket -a, --all 展示所有的socket(默認connected,指定-a則會展示監聽/爲監聽的socket) -F, --fib 展示轉發信息庫(Forwarding Information Base)(default) -C, --cache 展示路由緩存而非FIB -Z, --context 爲socket展示SELinux安全上下文
<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet List of possible address families (which support routing): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)

使用:

netstat

結果解讀:

使用不同參數,展示的結果不用,詳情大家看下 man netstat裏面的結果吧

常見用法:

# 查看全部的socketnetstat -a
# 查看使用tcp協議的網絡信息netstat -t
# 查看使用udp協議的網絡信息netstat -u
# 展示所有所有狀態的tcp監聽,並打印程序名稱netstat -antp

route

作用:顯示和操作路由表

語法:

Usage: route [-nNvee] [-FC] [<AF>]           列出內核路由表       route [-v] [-FC] {add|del|flush} ...  Modify routing table for AF.
route {-h|--help} [<AF>] 修改AF的路由表 route {-V|--version} 展示版本
-v, --verbose 展示更多詳情信息 -n, --numeric 不解析名稱 -e, --extend 展示更多信息 -F, --fib 展示轉發信息庫(Forwarding Information Base)(default) -C, --cache 展示路由緩存而非FIB
<AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet List of possible address families (which support routing): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)

使用:詳見 https://blog.csdn.net/u011857683/article/details/83795435[9] 裏面有非常詳細的描述

lsof

作用:列出當前系統當前打開的文件

語法:

 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s] [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s][+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.  -?|-h list help          -a AND selections (OR)     -b avoid kernel blocks  -c c  cmd c ^c /c/[bix]  +c w  COMMAND width (9)    +d s  dir s files  -d s  select by FD set   +D D  dir D tree *SLOW?*   +|-e s  exempt s *RISKY*  -i select IPv[46] files  -K list tasKs (threads)    -l list UID numbers  -n no host names         -N select NFS files        -o list file offset  -O no overhead *RISKY*   -P no port names           -R list paRent PID  -s list file size        -t terse listing           -T disable TCP/TPI info  -U select Unix socket    -v list version info       -V verbose search  +|-w  Warnings (+)       -X skip TCP&UDP* files     -Z Z  context [Z]  -- end option scan       +f|-f  +filesystem or -file names     +|-f[gG] flaGs   -F [f] select fields; -F? for help    +|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)                                        +m [m] use|create mount supplement  +|-M   portMap registration (-)       -o o   o 0t offset digits (8)  -p s   exclude(^)|select PIDs         -S [t] t second stat timeout (15)  -T qs TCP/TPI Q,St (s) info  -g [s] exclude(^)|select and print process group IDs  -i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]  +|-r [t[m<fmt>]] repeat every t seconds (15);  + until no files, - forever.       An optional suffix to t is m<fmt>; m must separate t from <fmt> and      <fmt> is an strftime(3) format for the marker line.  -s p:s  exclude(^)|select protocol (p = TCP|UDP) states by name(s).  -u s   exclude(^)|select login|UID set s  -x [fl] cross over +d|+D File systems or symbolic Links  names  select named files or files on named file systemsAnyone can list all files; /dev warnings disabled; kernel ID check disabled.

常見用法:

# 列出所有打開的文件lsof
# 查看哪些進程正在使用1.txtlsof 1.txt
# 遞歸查看test_dir目錄及其文件的信息lsof +D test_dir
# 查看java進程打開的文件lsof -c mysql
# 查看java或mysql打開的文件lsof -c java -c mysql
# 列出所有的網絡連接lsof -i
# 列出所有tcp連接lsof -i tcp
# 列出所有udp連接lsof -i udp
# 列出誰在使用8080端口lsof -i:8080
# 列出誰在用tcp協議使用8080端口lsof -i tcp:8080

References

[1]https://www.annhe.net/article-4458.html
[2]https://www.cnblogs.com/wxxjianchi/p/10522049.html
[3]https://www.cnblogs.com/fuqu/p/10230385.html
[4]https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst
[5] Linux Page cache和Block I/O layer: https://blog.csdn.net/gx19862005/article/details/57077143
[6] Linux內存Cache和Buffer理解: https://blog.csdn.net/lqglqglqg/article/details/82313966
[7]https://www.cnblogs.com/operationhome/p/10362776.html
[8] Linux 深入理解inode/block/superblock: https://blog.csdn.net/Ohmyberry/article/details/80427492
[9]https://blog.csdn.net/u011857683/article/details/83795435

乾貨分享

最近將個人學習筆記整理成冊,使用PDF分享。關注我,回覆如下代碼,即可獲得百度盤地址,無套路領取!

001:《Java併發與高併發解決方案》學習筆記;002:《深入JVM內核——原理、診斷與優化》學習筆記;003:《Java面試寶典》004:《Docker開源書》005:《Kubernetes開源書》006:《DDD速成(領域驅動設計速成)》007:全部008:加技術羣討論

近期熱文

LinkedBlockingQueue vs ConcurrentLinkedQueue解讀Java 8 中爲併發而生的 ConcurrentHashMapRedis性能監控指標彙總最全的DevOps工具集合,再也不怕選型了!微服務架構下,解決數據庫跨庫查詢的一些思路聊聊大廠面試官必問的 MySQL 鎖機制

關注我

喜歡就點個"在看"唄^_^

本文分享自微信公衆號 - IT牧場(itmuch_com)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章