- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業務經營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯網協會理事單位
- 安全聯盟認證網站身份V標記
- 域名注冊服務機構許可:滇D3-20230001
- 代理域名注冊服務機構:新網數碼
Linux服務器內存占用高排查方法
藍隊云小課堂:
當Linux服務器內存占用高時,可以按照以下步驟進行排查:
查看內存使用情況
使用free命令可以查看系統的內存使用情況,包括總內存、已用內存、空閑內存等信息。
有時系統內存占用高可能是由緩存和緩沖區所導致的。Linux系統會利用未分配的內存作為緩存和緩沖區,以提高文件訪問速度。
# -h 人類可讀的格式輸出信息
free -h
# 可能返回
total used free shared buff/cache available
內存: 15Gi 1.5Gi 12Gi 46Mi 1.4Gi 13Gi
交換: 2.0Gi 0B 2.0Gi
查看進程內存占用
使用top或htop命令可以查看系統進程的內存占用情況,按照內存使用量排序,找出消耗較大的進程。
htop命令可使用 yum install htop 進行安裝
# 命令進入htop的交互界面通過按鍵組合進行交互
htop
# top命令進入界面,按下大寫字母 M 按照內存占用從高到低進行排序
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
查看系統日志
查看系統日志可以幫助定位內存占用高的原因。
# journalctl命令查看系統日志,過濾關鍵詞(“memory”或“oom”)查找相關日志
journalctl | grep -i memory
# 內核日志包含有關內存使用情況
grep -i memory /var/log/messages
內存泄漏檢測
如果懷疑有內存泄漏,可使用valgrind進行內存泄漏檢測。
由于 valgrind 的工作原理,它可能會使程序的運行速度變慢,并且可能會增加程序的內存使用量。因此,通常只在開發和調試階段使用 valgrind,而不是在生產環境中。
# 對程序 nginx 進行 --leak-check=full 啟用完全的內存泄漏檢測
valgrind --leak-check=full nginx
查看共享內存
如果共享內存占用較多,需要進一步檢查是哪個進程在使用共享內存。
# 查看命令
cat /proc/meminfo | grep -i shmem
# 返回結果中Shmem表示系統中當前使用的共享內存總量
Shmem: 49004 kB
查看不可回收的slab內存
查看不可回收的slab內存占用情況,如果這部分內存占用較高,可以使用slabtop命令查看是哪些slab占用大。
# 查看
cat /proc/meminfo | grep -i SUnreclaim
# slabtop 命令用于實時顯示內核的“slab”內存緩存信息
slabtop
檢查大頁內存
查看是否配置了內存大頁。如果HugePages_Total輸出非0,表示配置了內存大頁。需要確認這些大頁是業務自身配置還是其它惡意程序配置。
# 查看
cat /proc/meminfo | grep -iE "HugePages_Total|Hugepagesize"
# 可能返回
HugePages_Total: 0
Hugepagesize: 2048 kB
檢查Swap分區
如果Swap分區使用過多,說明系統已經開始使用磁盤作為內存擴展,這可能會影響性能。
# 命令一
free
# 命令二
swapon -s
分析內存使用情況
可以使用pmap命令分析特定進程的內存使用情況,或者使用perf命令進行更詳細的性能分析。
更多小知識,可聯系藍隊云一起探討。
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP