平均負(fù)載
什么是平均負(fù)載?
是指單位時間內(nèi)系統(tǒng)處于可運(yùn)行狀態(tài)(使用cpu或者等待cpu)或者不可中斷狀態(tài)的平均進(jìn)程數(shù)
uptime命令
查看cpu的平均負(fù)載
[lciptv@ipcqa-02 ~]$ uptime
23:11:02 up 15 days, 13:31, 3 users, load average: 0.00, 0.00, 0.00
| 值 | 含義 |
|---|---|
| 23:11:02 | 系統(tǒng)時間 |
| up 15 days, 13:31 | 系統(tǒng)運(yùn)行時間 |
| 3 user | 用戶數(shù) |
| load average: 0.00, 0.00, 0.0 | 系統(tǒng)過去1分鐘,5分鐘,15分鐘的平均負(fù)載 |
top交互命令
| 命令 | 含義 |
|---|---|
| N | 按PID由高到低排列 |
| M | 根據(jù)內(nèi)存資源使用大小進(jìn)行排序 |
| P | 根據(jù)CPU資源使用大小進(jìn)行排序 |
| c | 顯示完整的進(jìn)程信息 |
| 1(數(shù)字) | 顯示每個邏輯CPU的詳細(xì)情況 |
cpu狀態(tài)信息:

| 值 | 含義 |
|---|---|
| us | 用戶態(tài)cpu使用的占比(沒有通過 nice 調(diào)度) |
| sy | 內(nèi)核態(tài)cpu使用的占比 |
| ni | 改變過優(yōu)先級的進(jìn)程占用CPU的百分比,表示用戶進(jìn)程中,通過 CPU 調(diào)度(nice)過的使用時間 |
| id | 空閑cpu占比 |
| wa | IO等待占用CPU的百分比 |
| hi | 硬中斷(Hardware IRQ)占用CPU的百分比 |
| si | 軟中斷(Software Interrupts)占用CPU的百分比 |
Cpu(s)與%CPU區(qū)別:
Cpu(s): us: 在一定的時間間隔內(nèi),用戶空間占用CPU時間百分比,是多核心cpu的一個平均值。
%CPU:上次更新到現(xiàn)在的CPU時間占用百分比,多線程情況下,如果是多核,占比可能大于100%
內(nèi)存信息:
- free +buff/cache = 可用內(nèi)存
- buffer:寫磁盤先將數(shù)據(jù)保存在磁盤緩沖區(qū)(buffer),然后寫入磁盤
- cache:將磁盤數(shù)據(jù)暫存在磁盤緩沖區(qū)(cache),供后續(xù)程序使用
- avail Mem:可以分配和使用的內(nèi)存量,而不會導(dǎo)致更多的交換
- swap used:swap交換分區(qū)的used,如果這個數(shù)值在不斷的變化,說明內(nèi)核在不斷進(jìn)行內(nèi)存和swap的數(shù)據(jù)交換,這是真正的內(nèi)存不夠用了
釋放內(nèi)存:
-
管理內(nèi)存的三種方式:
0:是系統(tǒng)默認(rèn)值,默認(rèn)情況下表示不釋放內(nèi)存,由操作系統(tǒng)自動管理
1:釋放頁緩存
2:釋放dentries和inodes
3:釋放所有緩存 手動釋放緩沖區(qū)的內(nèi)存到free
(1)手動執(zhí)行sync命令(描述:sync 命令運(yùn)行 sync 子例程。如果必須停止系統(tǒng),則運(yùn)行sync 命令以確保文件系統(tǒng)的完整性。sync 命令將所有未寫的系統(tǒng)緩沖區(qū)寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)
(2)釋放 echo 3 > /proc/sys/vm/drop_caches
(3)如果現(xiàn)在想讓操作系統(tǒng)重新分配內(nèi)存,那么設(shè)置drop_caches的值為0即可 echo 0 > /proc/sys/vm/drop_caches
- 操作系統(tǒng)釋放緩沖區(qū)內(nèi)存到free

PID — 進(jìn)程id
USER — 進(jìn)程所有者
PR — 進(jìn)程優(yōu)先級
NI — nice值。負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級
VIRT — 進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
RES — 進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
SHR — 共享內(nèi)存大小,單位kb
S — 進(jìn)程狀態(tài)。D=不可中斷的睡眠狀態(tài) R=運(yùn)行 S=睡眠 T=跟蹤/停止 Z=僵尸進(jìn)程
%CPU — 上次更新到現(xiàn)在的CPU時間占用百分比
%MEM — 進(jìn)程使用的物理內(nèi)存百分比
TIME+ — 進(jìn)程使用的CPU時間總計(jì),單位1/100秒
COMMAND — 進(jìn)程名稱(命令名/命令行)
cpu上下文切換
什么是cpu上下文切換?
頻繁的上下文切換,會將CPU都消耗在CPU上下文的保存和恢復(fù)上,導(dǎo)致任務(wù)運(yùn)行時間變短,影響系統(tǒng)性能。
vmstat命令
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 3084 472340 3352 12038260 0 0 4 2 9 3 0 0 100 0 0
| 值 | 含義 |
|---|---|
| in | 每秒中斷的次數(shù) |
| cs | 每秒上下文切換的次數(shù) |
jstack命令
jstack命令工具可以得到線程堆棧信息,根據(jù)這些線程堆棧信息,我們可以去檢查Java程序出現(xiàn)的問題,如檢測死鎖,并輸出死鎖的信息的排查
1、打印進(jìn)程下面的線程列表
ps -mp pid(進(jìn)程id) -o THREAD,tid(線程id),time
[lciptv@ipcqa-02 ~]$ ps -mp 126242 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
lciptv 0.1 - - - - - - 00:05:05
lciptv 0.0 19 - - - - 126242 00:00:00
lciptv 0.0 19 - - - - 126243 00:00:03
2、將需要的線程ID轉(zhuǎn)換為16進(jìn)制格式
printf "%x\n" tid(線程id)
[lciptv@ipcqa-02 ~]$ printf "%x\n" 126242
1ed22
3、打印線程的堆棧信息
jstack pid(進(jìn)程id) |grep tid -A 100
jstack pid |grep tid -A 100
ps命令
aux 關(guān)注線程本身a:顯示一個終端所有的進(jìn)程u:顯示進(jìn)程的歸屬用戶及內(nèi)存使用情況x:顯示沒有關(guān)聯(lián)控制終端的進(jìn)程
axjf 關(guān)注線程之間的關(guān)系j:顯示進(jìn)程歸屬的進(jìn)程組id、會話id、父進(jìn)程idf:以ascii的形式顯示出進(jìn)程的層次關(guān)系
-
ef
e:顯示所有進(jìn)程
-f : 全格式
[lciptv@ipcqa-04 ~] $ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 191204 3592 ? Ss 6月27 0:40 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 6月27 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 6月27 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 6月27 0:02 [ksoftirqd/0]
USER:進(jìn)程是哪個用戶產(chǎn)生的
PID:進(jìn)程的身份證號碼
%CPU:指進(jìn)程對CPU的占用率
%MEM:進(jìn)程占用內(nèi)存的百分比
VSZ:進(jìn)程使用虛擬內(nèi)存的大小
RSS:進(jìn)程使用物理內(nèi)存的大小
TTY:進(jìn)程關(guān)聯(lián)的終端
-
STAT:進(jìn)程當(dāng)前狀態(tài)
-D:不可被喚醒的睡眠狀態(tài),通常用于I/O情況 -R:該線程正在運(yùn)行 -S:該線程處于睡眠狀態(tài),可被喚醒 -T:停止?fàn)顟B(tài),可能在后臺暫?;蛘哌M(jìn)程處于出錯狀態(tài) -X:死掉的進(jìn)程 -Z:僵尸狀態(tài) -N:低優(yōu)先級 -l:多線程 -+:位于后臺 START:進(jìn)程的啟動時間
TIME:進(jìn)程運(yùn)行的時間
COMMAND:當(dāng)前進(jìn)程執(zhí)行的是哪個程序
[lciptv@ipcqa-04 ~] $ ps -axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 4 0 0 ? -1 S< 0 0:00 \_ [kworker/0:0H]
PPID:當(dāng)前進(jìn)程父進(jìn)程的idPID:當(dāng)前進(jìn)程的idPGID:當(dāng)前進(jìn)程所在的進(jìn)程組的IDSID:進(jìn)程所在的會話的IDTTY:進(jìn)程所關(guān)聯(lián)的終端TPGID:判斷進(jìn)程是否為守護(hù)進(jìn)程(-1則為守護(hù)進(jìn)程)STAT:進(jìn)程當(dāng)前狀態(tài)UID:用戶ID,記錄進(jìn)程是哪個用戶啟動的TIME:進(jìn)程運(yùn)行的時間COMMAND:記錄進(jìn)程之間的層次關(guān)系(和上邊不同)
ps -ef | grep java 命令詳解
[lciptv@ipcqa-04 ~] $ ps -ef | grep java
lciptv 2948 1 0 6月27 ? 00:20:40 /home/lciptv/app/jdk8/bin/java -classpath . -Dtarget=cqcu_serviceauth-service -Dspring.profiles.active=dev -jar iptv.serviceauth-4.0.0.BUILD-SNAPSHOT.jar
UID :程序被該 UID 所擁有
PID :就是這個程序的 ID
PPID :則是其上級父程序的ID
C :CPU使用的資源百分比
STIME :系統(tǒng)啟動時間
TTY :登入者的終端機(jī)位置
TIME :使用掉的CPU時間
CMD :所下達(dá)的是什么指令