一、vim命令
不要使用vim打開大文件,vim會(huì)一次性讀取所有內(nèi)容到內(nèi)存,容易造成宿主機(jī)內(nèi)存溢出。 打開文件前,可以使用du -h命令查看文件大小。一般,100MB以下為宜。
1、普通模式
j 向下
30j 向下移動(dòng)30行
k 向上
h 向左
l 向右
0 到行首
^ 到行首第一個(gè)字符,如果前面有空格的話
$ 到行尾
gg 快速到文件頭
G 快速到文件尾
100G 跳轉(zhuǎn)到第100行
2、命令模式
在普通模式下,輸入:即可進(jìn)入。
在命令模式下輸入:
:set nu 顯示行號(hào)
:set nonu 不顯示行號(hào)
3、查找字符串
在普通模式下,按下/直接進(jìn)入查找,輸入相應(yīng)的字符串按確定即可。
n 查找下一個(gè)匹配
N 查找上一個(gè)匹配
2n 查找下面第二個(gè)匹配
二、firewall-cmd命令
1、開放端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent # 開放8888端口,永久增加:reload后生效
firewall-cmd --zone=public --remove-port=8888/tcp --permanent #關(guān)閉8888端口
firewall-cmd --reload # 更新防火墻規(guī)則,配置立即生效
查看防火墻:
firewall-cmd --list-all

2、查看防火墻所有開放的端口
firewall-cmd --zone=public --list-ports
3、關(guān)閉防火墻
如果不想管控端口,直接關(guān)閉系統(tǒng)防火墻,啥都能通,但安全性不強(qiáng),不建議。
systemctl stop firewalld.servic
4、查看防火墻狀態(tài)
firewall-cmd --state
5、查看監(jiān)聽的端口
netstat -lnpt
PS:centos7默認(rèn)沒有 netstat 命令,需要安裝 net-tools 工具,yum install -y net-tools
6、檢查端口被哪個(gè)進(jìn)程占用
netstat -lnpt |grep 8888
7、查看進(jìn)程的詳細(xì)信息
ps 8888
8、中止進(jìn)程
# kill -9 [進(jìn)程號(hào)] ,例如
kill -9 6832
三、rm 命令
刪除一個(gè)目錄中的一個(gè)或多個(gè)文件或目錄,如果沒有使用- r選項(xiàng),則rm不會(huì)刪除目錄。如果使用 rm 來刪除文件,通常仍可以將該文件恢復(fù)原狀。
命令格式:rm [選項(xiàng)] 文件
常用參數(shù)
-f, --force 忽略不存在的文件,從不給出提示。
-i, --interactive 進(jìn)行交互式刪除
-r, -R, --recursive 指示rm將參數(shù)中列出的全部目錄和子目錄均遞歸地刪除。
-v, --verbose 詳細(xì)顯示進(jìn)行的步驟
--help 顯示此幫助信息并退出
--version 輸出版本信息并退出
使用實(shí)例
1.刪除文件 test.txt,系統(tǒng)會(huì)提示是否刪除。
rm test.txt
2.強(qiáng)制刪除 test.txt,系統(tǒng)不再提示。
rm -f test.txt
3.將 test 子目錄及目錄中所有檔案刪除。
rm -r test
四、top分析性能(整機(jī))
常用的分析性能的工具,能夠?qū)崟r(shí)監(jiān)控系統(tǒng)中各個(gè)進(jìn)程資源占用的情況,這和windows中任務(wù)管理器有點(diǎn)類似。
系統(tǒng)時(shí)間:17:15:47
運(yùn)行時(shí)間:118 days, 22 min,
當(dāng)前登錄用戶: 4 users,
負(fù)載均衡(uptime):load average: 0.09, 0.10, 0.03
average后面的三個(gè)數(shù)分別是1分鐘、5分鐘、15分鐘的負(fù)載情況,load average數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進(jìn)程數(shù),然后按特定算法計(jì)算出的數(shù)值。如果這個(gè)數(shù)除以邏輯CPU的數(shù)量,結(jié)果高于5的時(shí)候就表明系統(tǒng)在超負(fù)荷運(yùn)轉(zhuǎn)了

按1鍵:

按進(jìn)程的CPU使用率排序:運(yùn)行top命令后,按鍵大寫P
按進(jìn)程的內(nèi)存使用率排序:運(yùn)行top命令后,鍵入大寫M
uptime系統(tǒng)性能命令的精簡(jiǎn)版

五、cpu查看vmstat(CPU)
vmstat -n 2 3

一般vmstat工具的使用是通過兩個(gè)數(shù)字參數(shù)來完成的,第一個(gè)參數(shù)是采樣的時(shí)間間隔數(shù)單位是秒,第二個(gè)參數(shù)是采樣的次數(shù)。
procs
r:運(yùn)行和等待CPU時(shí)間片的進(jìn)程數(shù),原則上1核的CPU的運(yùn)行隊(duì)列 不要超過2,整個(gè)系統(tǒng)的運(yùn)行隊(duì)列不能超過總核數(shù)的2倍,否則代表系統(tǒng)壓力過大。
b:等待資源的進(jìn)程數(shù),比如正在等待磁盤I/O、網(wǎng)絡(luò)I/O等。
cpu
us:用戶進(jìn)程消耗CPU時(shí)間百分比,us值高,用戶進(jìn)程消耗CPU時(shí)間多,如果長(zhǎng)期大于50%,優(yōu)化程序。
sy:內(nèi)核進(jìn)程消耗CPU時(shí)間百分比。
us+sy參考值為80%,如果us+sy大于80%,說明可能存在CPU不足。
id:處于空閑的CPU百分比。
wa:系統(tǒng)等待IO的CPU時(shí)間百分比。
st:來自于一共虛擬機(jī)偷取的CPU時(shí)間百分比。
mpstat -P ALL 2
mpstat [-P {|ALL}] [internal [count]]
參數(shù) 解釋
-P {|ALL} 表示監(jiān)控哪個(gè)CPU, cpu在[0,cpu個(gè)數(shù)-1]中取值
internal 相鄰的兩次采樣的間隔時(shí)間、
count 采樣的次數(shù),count只能和delay一起使用,當(dāng)沒有參數(shù)時(shí),mpstat則顯示系統(tǒng)啟動(dòng)以后所有信息的平均值。有interval時(shí),第一行的信息自系統(tǒng)啟動(dòng)以來的平均信息。從第二行開始,輸出為前一個(gè)interval時(shí)間段的平均信息。
mpstat是Multiprocessor Statistics的縮寫,是實(shí)時(shí)系統(tǒng)監(jiān)控工具。其報(bào)告與CPU的一些統(tǒng)計(jì)信息,這些信息存放在/proc/stat文件中。在多CPUs系統(tǒng)里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。
mpstat最大的特點(diǎn)是:可以查看多核心cpu中每個(gè)計(jì)算核心的統(tǒng)計(jì)數(shù)據(jù);而類似工具vmstat只能查看系統(tǒng)整體cpu情況。

六、cpu查看pidstat
pidstat是sysstat工具的一個(gè)命令,用于監(jiān)控全部或指定進(jìn)程的cpu、內(nèi)存、線程、設(shè)備IO等系統(tǒng)資源的占用情況。pidstat首次運(yùn)行時(shí)顯示自系統(tǒng)啟動(dòng)開始的各項(xiàng)統(tǒng)計(jì)信息,之后運(yùn)行pidstat將顯示自上次運(yùn)行該命令以后的統(tǒng)計(jì)信息。用戶可以通過指定統(tǒng)計(jì)的次數(shù)和時(shí)間來獲得所需的統(tǒng)計(jì)信息。
pidstat [ 選項(xiàng) ] [ <時(shí)間間隔> ] [ <次數(shù)> ]
常用的參數(shù):
-u:默認(rèn)的參數(shù),顯示各個(gè)進(jìn)程的cpu使用統(tǒng)計(jì)
-r:顯示各個(gè)進(jìn)程的內(nèi)存使用統(tǒng)計(jì)
-d:顯示各個(gè)進(jìn)程的IO使用情況
-p:指定進(jìn)程號(hào)
-w:顯示每個(gè)進(jìn)程的上下文切換情況
-t:顯示選擇任務(wù)的線程的統(tǒng)計(jì)信息外的額外信息
-T { TASK | CHILD | ALL }
這個(gè)選項(xiàng)指定了pidstat監(jiān)控的。TASK表示報(bào)告獨(dú)立的task,CHILD關(guān)鍵字表示報(bào)告進(jìn)程下所有線程統(tǒng)計(jì)信息。ALL表示報(bào)告獨(dú)立的task和task下面的所有線程。
注意:task和子線程的全局的統(tǒng)計(jì)信息和pidstat選項(xiàng)無關(guān)。這些統(tǒng)計(jì)信息不會(huì)對(duì)應(yīng)到當(dāng)前的統(tǒng)計(jì)間隔,這些統(tǒng)計(jì)信息只有在子線程kill或者完成的時(shí)候才會(huì)被收集。
-V:版本號(hào)
-h:在一行上顯示了所有活動(dòng),這樣其他程序可以容易解析。
-I:在SMP環(huán)境,表示任務(wù)的CPU使用率/內(nèi)核數(shù)量
-l:顯示命令名和所有參數(shù)
pidstat -u 1 -p 2656416 // 2656416進(jìn)程每一秒打印一次打印出詳細(xì)情況

七、內(nèi)存查看free(內(nèi)存)和pidstat
free [-b-k-m] [-o] [-s delay] [-t] [-V]
free命令用來顯示內(nèi)存的使用情況,使用權(quán)限是所有用戶。

經(jīng)驗(yàn)值
應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存>70%內(nèi)存充足
應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<20%內(nèi)存不足,需要增加內(nèi)存
20%<應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<70%內(nèi)存基本夠用
pidstat -p 進(jìn)程號(hào) -r 采樣間隔秒數(shù)查看內(nèi)存使用情況
pidstat -p 2656416 -r 2

八、df 列出文件系統(tǒng)的整體磁盤使用量
df命令是用來查看linux系統(tǒng)服務(wù)器文件系統(tǒng)的磁盤使用情況??梢杂迷撁顏聿榭匆呀?jīng)使用了多少空間,還有多少空間可用。
選項(xiàng)可以有:
-a:全部文件系統(tǒng)列表,包含虛擬文件系統(tǒng)
-B:指定顯示scale size,比如以M,G為單位顯示
-h:方便人閱讀方式顯示。
-H:和-h相似,不過其中1k = 1000byte, 1M=1000k
-i:列出inode的信息
-k :區(qū)塊為1024字節(jié)
-l :顯示本地文件系統(tǒng)
-p:使用POSIX規(guī)范輸出
-t:打印指定的文件系統(tǒng)類型
-T:顯示文件系統(tǒng)類型
-x:不打印指定的文件系統(tǒng)類型

Filesystem:表示該文件系統(tǒng)位于哪個(gè)分區(qū),因此該列顯示的是設(shè)備名稱;
Used:表示用掉的磁盤空間大??;
Available:表示剩余的磁盤空間大??;
Use%:磁盤空間使用率;
Mounted on:文件系統(tǒng)的掛載點(diǎn),也就是磁盤掛載的目錄位置
查詢當(dāng)前目錄下所有文件的大?。篸u -sh *
[root@localhost nginx-1.12.2]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@localhost nginx-1.12.2]# du -sh *
388K auto
272K CHANGES
416K CHANGES.ru
40K conf
4.0K configure
148K contrib
8.0K html
4.0K LICENSE
4.0K Makefile
8.0K man
12M objs
4.0K README
5.3M src
[root@localhost nginx-1.12.2]#
九、磁盤IO查看iostat和pidstat
iostat 是 I/O statistics(輸入/輸出統(tǒng)計(jì))的縮寫。
iostat 命令主要用于對(duì)系統(tǒng)的磁盤操作活動(dòng)進(jìn)行監(jiān)視,包括 讀寫次數(shù)與讀寫的數(shù)據(jù)量、I/O 請(qǐng)求的服務(wù)時(shí)間與等待時(shí)間 等。同時(shí),iostat 命令還可用于 考察 CPU 的利用率,考察 NFS 網(wǎng)絡(luò)文件系統(tǒng)的處理活動(dòng) 等。
iostat [參數(shù)] [時(shí)間] [次數(shù)]
命令參數(shù)
參數(shù) |
解釋 |
|
-c |
顯示 CPU 使用情況的分類統(tǒng)計(jì)數(shù)據(jù)。 |
|
-d |
顯示設(shè)備使用情況的分類統(tǒng)計(jì)數(shù)據(jù)。 |
|
-h |
按照易讀的適當(dāng)單位顯示 -n 選項(xiàng)提供的 NFS 統(tǒng)計(jì)數(shù)據(jù)。 |
|
-k |
以 KB/s(而非默認(rèn)的每秒數(shù)據(jù)塊)為單位顯示統(tǒng)計(jì)數(shù)據(jù)。 |
|
-m |
以 MB/s 為單位顯示統(tǒng)計(jì)數(shù)據(jù)。 |
|
-n |
顯示 NFS 統(tǒng)計(jì)數(shù)據(jù)。 |
|
-N |
用于顯示 LVM2 邏輯卷的統(tǒng)計(jì)數(shù)據(jù)。 |
|
`-p[devices |
ALL]` |
顯示指定塊設(shè)備及其所有分區(qū)的統(tǒng)計(jì)數(shù)據(jù)。如果在命令行中指定了設(shè)備名,顯示指定設(shè)備及其所有分區(qū)的統(tǒng)計(jì)數(shù)據(jù)。關(guān)鍵字 ALL 表示顯示所有塊設(shè)備及其所有分區(qū)(包括未用分區(qū))的統(tǒng)計(jì)數(shù)據(jù)。 |
-t |
在顯示的統(tǒng)計(jì)數(shù)據(jù)中增加時(shí)間信息(時(shí)間的顯示格式依賴于 S_TIME_FORMAT 環(huán)境變量的設(shè)置)。 |
|
-V |
顯示命令的版本與版權(quán)信息,然后退出。 |
|
-x |
顯示附加的統(tǒng)計(jì)信息。 |
|
-z |
禁止輸出數(shù)據(jù)采樣期間沒有 I/O 活動(dòng)的任何設(shè)備。 |
iostat -xdk 2 3


pidstat是sysstat工具的一個(gè)命令,用于監(jiān)控全部或指定進(jìn)程的cpu、內(nèi)存、線程、設(shè)備IO等系統(tǒng)資源的占用情況。pidstat首次運(yùn)行時(shí)顯示自系統(tǒng)啟動(dòng)開始的各項(xiàng)統(tǒng)計(jì)信息,之后運(yùn)行pidstat將顯示自上次運(yùn)行該命令以后的統(tǒng)計(jì)信息。用戶可以通過指定統(tǒng)計(jì)的次數(shù)和時(shí)間來獲得所需的統(tǒng)計(jì)信息。
pidstat [ 選項(xiàng) ][<時(shí)間間隔>][<次數(shù)>]
常用的參數(shù):
-u:默認(rèn)的參數(shù),顯示各個(gè)進(jìn)程的cpu使用統(tǒng)計(jì)
-r:顯示各個(gè)進(jìn)程的內(nèi)存使用統(tǒng)計(jì)
-d:顯示各個(gè)進(jìn)程的IO使用情況
-p:指定進(jìn)程號(hào)
-w:顯示每個(gè)進(jìn)程的上下文切換情況
-t:顯示選擇任務(wù)的線程的統(tǒng)計(jì)信息外的額外信息
-T{TASK|CHILD|ALL}
這個(gè)選項(xiàng)指定了pidstat監(jiān)控的。TASK表示報(bào)告獨(dú)立的task,CHILD關(guān)鍵字表示報(bào)告進(jìn)程下所有線程統(tǒng)計(jì)信息。ALL表示報(bào)告獨(dú)立的task和task下面的所有線程。
注意:task和子線程的全局的統(tǒng)計(jì)信息和pidstat選項(xiàng)無關(guān)。這些統(tǒng)計(jì)信息不會(huì)對(duì)應(yīng)到當(dāng)前的統(tǒng)計(jì)間隔,這些統(tǒng)計(jì)信息只有在子線程kill或者完成的時(shí)候才會(huì)被收集。
-V:版本號(hào)
-h:在一行上顯示了所有活動(dòng),這樣其他程序可以容易解析。
-I:在SMP環(huán)境,表示任務(wù)的CPU使用率/內(nèi)核數(shù)量
-l:顯示命令名和所有參數(shù)
pidstat -d 采樣間隔秒數(shù) -p 進(jìn)程號(hào)
pidstat -d 2 -p 2656416

十、ifstat(網(wǎng)絡(luò)IO)
ifstat 命令用于統(tǒng)計(jì)網(wǎng)絡(luò)接口流量狀態(tài),能比較簡(jiǎn)單看網(wǎng)絡(luò)流量。ifstat 可以整齊地打印出網(wǎng)絡(luò)接口統(tǒng)計(jì)信息,還可以用來禁用指定的網(wǎng)絡(luò)接口。
語法格式
ifstat [OPTIONS]
選項(xiàng)說明
-a #監(jiān)測(cè)能檢測(cè)到的所有網(wǎng)絡(luò)接口的狀態(tài)信息
-z #隱藏流量是無的接口
-h #顯示幫助信息
-j #用JSON格式輸出信息
-n #關(guān)閉顯示周期性出現(xiàn)的頭部信息
-t #在每一行的開頭加一個(gè)時(shí)間戳
-T #報(bào)告所有監(jiān)測(cè)接口的全部帶寬
-w #用指定的列寬
-W #如果內(nèi)容比終端窗口的寬度還要寬就自動(dòng)換行
-S #在同一行保持狀態(tài)更新(不滾動(dòng)不換行)
-q #安靜模式
-v #顯示版本信息
-d #指定一個(gè)驅(qū)動(dòng)來收集狀態(tài)信息
十一、CPU占用過高的定位分析思路
結(jié)合Linux和JDK命令一塊分析。
案例步驟:
1、先用top命令找出CPU占比最高的

2、ps -ef或者jps進(jìn)一步定位,得知是怎么樣的一個(gè)后臺(tái)程序
jps -l 查詢java程序 或者ps -ef | grep java | grep -v grep

jps(Java Virtual Machine Process Status Tool)是JDK提供的一個(gè)顯示當(dāng)前所有java進(jìn)程pid的命令,簡(jiǎn)單實(shí)用。
命令格式:jps [options ] [ hostid ]
[options]選項(xiàng) :
-q:僅輸出VM標(biāo)識(shí)符,不包括classname,jar name,arguments in main method
-m:輸出main method的參數(shù)
-l:輸出完全的包名,應(yīng)用主類名,jar的完全路徑名
-v:輸出jvm參數(shù)
-V:輸出通過flag文件傳遞到JVM中的參數(shù)(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:傳遞參數(shù)到vm,例如:-J-Xms512m
grep -v grep 在文檔中過濾掉包含有g(shù)rep字符的行 ,避免影響最終數(shù)據(jù)的正確性 。
3、定位到具體線程或者代碼
ps -mp 進(jìn)程ID -o THREAD,tid,time
-m 顯示所有的線程
-p pid進(jìn)程使用cpu的時(shí)間
-o 該參數(shù)后是用戶自定義的格式
ps -mp 2656416 -o THREAD,tid,time文章來源:http://www.zghlxwxcb.cn/news/detail-772602.html

4、將需要的線程ID轉(zhuǎn)換為16進(jìn)制格式(英文小寫)
printf "%x\n" 線程ID

5、jstack 進(jìn)程ID | grep tid(16進(jìn)制線ID英文小寫) -A60
jstack 進(jìn)程ID打印報(bào)告
jstack 2656417 | grep 2888a1 -A60文章來源地址http://www.zghlxwxcb.cn/news/detail-772602.html
到了這里,關(guān)于Linux命令及CPU占用過高的定位分析思路的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!