- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認(rèn)證網(wǎng)站身份V標(biāo)記
- 域名注冊服務(wù)機(jī)構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機(jī)構(gòu):新網(wǎng)數(shù)碼
Linux服務(wù)器內(nèi)存占用高排查方法
藍(lán)隊云小課堂:
當(dāng)Linux服務(wù)器內(nèi)存占用高時,可以按照以下步驟進(jìn)行排查:
查看內(nèi)存使用情況
使用free命令可以查看系統(tǒng)的內(nèi)存使用情況,包括總內(nèi)存、已用內(nèi)存、空閑內(nèi)存等信息。
有時系統(tǒng)內(nèi)存占用高可能是由緩存和緩沖區(qū)所導(dǎo)致的。Linux系統(tǒng)會利用未分配的內(nèi)存作為緩存和緩沖區(qū),以提高文件訪問速度。
# -h 人類可讀的格式輸出信息
free -h
# 可能返回
total used free shared buff/cache available
內(nèi)存: 15Gi 1.5Gi 12Gi 46Mi 1.4Gi 13Gi
交換: 2.0Gi 0B 2.0Gi
查看進(jìn)程內(nèi)存占用
使用top或htop命令可以查看系統(tǒng)進(jìn)程的內(nèi)存占用情況,按照內(nèi)存使用量排序,找出消耗較大的進(jìn)程。
htop命令可使用 yum install htop 進(jìn)行安裝
# 命令進(jìn)入htop的交互界面通過按鍵組合進(jìn)行交互
htop
# top命令進(jìn)入界面,按下大寫字母 M 按照內(nèi)存占用從高到低進(jìn)行排序
top
# 可能返回
top - 08:16:26 up 15 min, 1 user, load average: 0.00, 0.04, 0.05
Tasks: 89 total, 1 running, 88 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 98.8 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2292 root 17 -3 1016716 40844 16904 S 1.3 2.0 0:09.14 YDService
1028 root 20 0 574288 19516 6152 S 0.0 1.0 0:00.23 tuned
1646 root 20 0 987628 19036 5824 S 0.0 0.9 0:00.29 YDLive
1709 root 20 0 622856 14296 3316 S 0.7 0.7 0:05.68 barad_agent
681 polkitd 20 0 614324 11116 4684 S 0.0 0.5 0:00.03 polkitd
1027 root 10 -10 61488 10136 8564 S 0.0 0.5 0:00.00 iscsid
1255 root 20 0 218528 9648 2984 S 0.0 0.5 0:00.07 rsyslogd
1708 root 20 0 164896 9496 2080 S 0.0 0.5 0:00.53 barad_agent
查看系統(tǒng)日志
查看系統(tǒng)日志可以幫助定位內(nèi)存占用高的原因。
# journalctl命令查看系統(tǒng)日志,過濾關(guān)鍵詞(“memory”或“oom”)查找相關(guān)日志
journalctl | grep -i memory
# 內(nèi)核日志包含有關(guān)內(nèi)存使用情況
grep -i memory /var/log/messages
內(nèi)存泄漏檢測
如果懷疑有內(nèi)存泄漏,可使用valgrind進(jìn)行內(nèi)存泄漏檢測。
由于 valgrind 的工作原理,它可能會使程序的運(yùn)行速度變慢,并且可能會增加程序的內(nèi)存使用量。因此,通常只在開發(fā)和調(diào)試階段使用 valgrind,而不是在生產(chǎn)環(huán)境中。
# 對程序 nginx 進(jìn)行 --leak-check=full 啟用完全的內(nèi)存泄漏檢測
valgrind --leak-check=full nginx
查看共享內(nèi)存
如果共享內(nèi)存占用較多,需要進(jìn)一步檢查是哪個進(jìn)程在使用共享內(nèi)存。
# 查看命令
cat /proc/meminfo | grep -i shmem
# 返回結(jié)果中Shmem表示系統(tǒng)中當(dāng)前使用的共享內(nèi)存總量
Shmem: 49004 kB
查看不可回收的slab內(nèi)存
查看不可回收的slab內(nèi)存占用情況,如果這部分內(nèi)存占用較高,可以使用slabtop命令查看是哪些slab占用大。
# 查看
cat /proc/meminfo | grep -i SUnreclaim
# slabtop 命令用于實時顯示內(nèi)核的“slab”內(nèi)存緩存信息
slabtop
檢查大頁內(nèi)存
查看是否配置了內(nèi)存大頁。如果HugePages_Total輸出非0,表示配置了內(nèi)存大頁。需要確認(rèn)這些大頁是業(yè)務(wù)自身配置還是其它惡意程序配置。
# 查看
cat /proc/meminfo | grep -iE "HugePages_Total|Hugepagesize"
# 可能返回
HugePages_Total: 0
Hugepagesize: 2048 kB
檢查Swap分區(qū)
如果Swap分區(qū)使用過多,說明系統(tǒng)已經(jīng)開始使用磁盤作為內(nèi)存擴(kuò)展,這可能會影響性能。
# 命令一
free
# 命令二
swapon -s
分析內(nèi)存使用情況
可以使用pmap命令分析特定進(jìn)程的內(nèi)存使用情況,或者使用perf命令進(jìn)行更詳細(xì)的性能分析。
更多小知識,可聯(lián)系藍(lán)隊云一起探討。
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP